Gerenciador de conteúdo em estrutura MVC

Enviada por Guilherme Siquinelli 
Guilherme Siquinelli
Gerenciador de conteúdo em estrutura MVC
19 de March de 2012 às 02:42PM
Galera, espero que possam me clarear as ideias, dando um rumo...

Qual a melhor maneira de montar um gerenciador de conteúdo com estrutura MVC?


Estou usando esta estrutura: http://www.phpro.org/tutorials/Model-View-Controller-MVC.html mas fiquei meio perdido para saber onde faço a validação, para ver se o usuário está logado ou não, para mostrar as telas do backend, ou redirecionar para a tela de login...

E também como faço a separação do que é frontend e backend?

Alguém pode me ajudar?
Marcos Regis
Re: Gerenciador de conteúdo em estrutura MVC
20 de March de 2012 às 03:14PM
A melhor maneira é usar um Framework.
Existem excelentes FW para PHP como o Zend e o Symfony.
Guilherme Siquinelli
Re: Gerenciador de conteúdo em estrutura MVC
20 de March de 2012 às 03:23PM
Marcos, eu comecei o projeto usando o Zend...

Mas tive problemas com o Zend_File_Transfer_Adapter_Http();

Eu queria gravar um arquivo no FTP e em seguida o caminho no banco, porém, quando usava:

$upload = new Zend_File_Transfer_Adapter_Http();
$upload->setDestination(APPLICATION_PATH.'/upload/');

$file = $upload->getFileInfo();

if (!$upload->receive()) {
$messages = $upload->getMessages();
echo implode("\n", $messages);
}

ele não gravava no banco, se eu comento essa parte, ele grava...

Fiquei com medo de não conseguir terminar o projeto com ele, e acabei tentando com o PHPRO...

Você não recomenda então usar esse da PHPRO?
Marcos Regis
Re: Gerenciador de conteúdo em estrutura MVC
20 de March de 2012 às 03:50PM
eu não conheço esse PHPRO.

Acho que vocÊ desistiu muito rápido do Zend.
Seu problema não deve estar no Zend e sim na falta de permissões e se um não consegue, nenhum outro vai conseguir.

Olhe os logs do Zend pra saber qual foi o erro.
Guilherme Siquinelli
Re: Gerenciador de conteúdo em estrutura MVC
20 de March de 2012 às 03:55PM
Será que é permissão? as imagens eram upadas, mas quando funcionava o upload, ele não gravava a descrição e o caminho no banco...

Como disse, desisti por medo de não conseguir finalizar o projeto com o Zend, mas acho que voltarei a tentar com o Zend mesmo então, acho que não vai ter como escapar, hehe...

Vou procurar sobre os logs e ver se acho alguma coisa...

:)
Marcos Regis
Re: Gerenciador de conteúdo em estrutura MVC
20 de March de 2012 às 04:35PM
Eu entendi errado.

Você disse que não está gravando no banco mas não vi o código onde ele faz isso.

Configurou a camada de MODEL? Fez algum teste com algum objeto do Model?
Guilherme Siquinelli
Re: Gerenciador de conteúdo em estrutura MVC
21 de March de 2012 às 07:48AM
Ele consegue recuperar os dados gravados (quando comento o upload, ele grava no banco):

BannerController.php

<?php

class BannerController extends Zend_Controller_Action
{

public function init()
{
/* Initialize action controller here */
}

public function indexAction()
{
// action body
$banner = new Application_Model_BannerMapper();
$this->view->entries = $banner->fetchAll();
}

public function signAction()
{
// action body
$request = $this->getRequest();
$form = new Application_Form_Banner();

if ($this->getRequest()->isPost()) {

$upload = new Zend_File_Transfer_Adapter_Http();
$upload->setDestination(APPLICATION_PATH.'/upload/');

$file = $upload->getFileInfo();

if (!$upload->receive()) {
$messages = $upload->getMessages();
echo implode("\n", $messages);
}

if ($form->isValid($request->getPost())) {
$banner = new Application_Model_Banner($form->getValues());
$mapper = new Application_Model_BannerMapper();
$mapper->save($banner);
return $this->_helper->redirector('index');
}
}

$this->view->form = $form;
}
}

Ele usa o Application_Model_Banner pra dar os gets e sets, depois o Application_Model_BannerMapper para para gravar, o commit é feito ali no $mapper->save($banner);

BannerMapper.php

<?php

class Application_Model_BannerMapper
{
protected $_dbTable;

public function setDbTable($dbTable)
{
if (is_string($dbTable)) {
$dbTable = new $dbTable();
}
if (!$dbTable instanceof Zend_Db_Table_Abstract) {
throw new Exception('Invalid table data gateway provided');
}
$this->_dbTable = $dbTable;
return $this;
}

public function getDbTable()
{
if (null === $this->_dbTable) {
$this->setDbTable('Application_Model_DbTable_Banner');
}
return $this->_dbTable;
}

public function save(Application_Model_Banner $banner)
{
$data = array(
'banner' => $banner->getBanner(),
'comment' => $banner->getComment(),
'created' => date('Y-m-d H:i:s'),
);

if (null === ($id = $banner->getId())) {
unset($data['id']);
$this->getDbTable()->insert($data);
} else {
$this->getDbTable()->update($data, array('id = ?' => $id));
}
}

public function find($id, Application_Model_Banner $banner)
{
$result = $this->getDbTable()->find($id);
if (0 == count($result)) {
return;
}
$row = $result->current();
$banner->setId($row->id)
->setBanner($row->banner)
->setComment($row->comment)
->setCreated($row->created);
}

public function fetchAll()
{
$resultSet = $this->getDbTable()->fetchAll();
$entries = array();
foreach ($resultSet as $row) {
$entry = new Application_Model_Banner();
$entry->setId($row->id)
->setBanner($row->banner)
->setComment($row->comment)
->setCreated($row->created);
$entries[] = $entry;
}
return $entries;
}
}


Consegue identificar algum erro? Se quiser olhar outros arquivos, posso zipar o projeto e te passar o link, o zend é bem grande, nao consegui identificar o erro, olhei em muitos forums, desta forma que fiz peguei o forum da Zend mesmo...
Marcos Regis
Re: Gerenciador de conteúdo em estrutura MVC
21 de March de 2012 às 09:53AM
Não vi nada de anormal.
Algumas coisas eu teria mudado.

Por exemplo

$this->view->form = $form;
if ($this->getRequest()->isPost() && $form->isValid($request->getPost())) {

$upload = new Zend_File_Transfer_Adapter_Http();
$upload->setDestination(APPLICATION_PATH.'/upload/');

$file = $upload->getFileInfo();

if (!$upload->receive()) {
var_dump($upload->getMessages());
return;
}

$banner = new Application_Model_Banner($form->getValues());
$mapper = new Application_Model_BannerMapper();
$mapper->save($banner);
return $this->_helper->redirector('index');
}
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.