Jump to content

POWERED BY:

Archived

This topic is now archived and is closed to further replies.

Robson Silva

Mvc

Recommended Posts

Olá pessoal.

Já li bastante sobre MVC na internet, já troquei uma idéia com algumas pessoas e fiz vários testes para entender.

Mais ainda permanecem algumas dúvidas.

 

A essencia do MVC eu entendi bem, só não entendi algumas partes deste ciclo.

Tentei facilitar ao máximo a idéia do MVC.

Abaixo os passos que a aplicação faz para mostrar uma listagem de notícias ao usuário, e um desenho exemplificando este ciclo.

 

1) O usuário acessa pelo browser o endereço http://www.meusite.com.br/noticias

2) O browser solicita a classe Dispatcher que busca o controlador passado por parametro, no caso notícias, chamando a função estática dispatch (Dispatcher::dispatch).

3) O método Dispatcher verifica se existe o controlador NoticiaController e se a função passada por parametro (neste caso como não existe chama a funçaõ padão index()) existe.

4) Existindo o controlador e a função, o controlador pede ao model (classe NoticiaDAO) que busque as informações do banco.

5) A classe NoticiaDAO acessa o banco por meio da classe DataAcess que retorna um array de dados.

6) A classe NoticiaDAO transforma cada linha deste array de dados num objeto Noticia.

7) Criado o array de objetos Noticia, o controlador joga os dados para a classe Paginator, que faz a paginação dos dados.

8) A classe Paginator transforma o array de Noticia em paginação, retornando o html para o controlador.

9) O controlador envia todas as variáveis necessárias para a classe Template, que tem como objetivo incluir a view principal de notícias, que chamamos de index.phtml.

10) Os dados são mostrados ao usuário no browser.

 

 

Imagem Postada

 

 

Deste ciclo eu não entendo o seguinte:

- As variáveis $_POST eu posso pegar direto no controlador ou eu devo pegar elas no html e passar para o controlador? E as variáveis $_GET?

- Estou usando URL amigável. Para incluir uma nova notícia no banco, eu dou um post para a url http://www.meusite.com.br/noticias/add, para alterar, http://www.meusite.com.br/noticias/edit, para excluir eu acesso o link http://www.meusite.com.br/noticias/delete/1 (o número 1 é o id da notícia).

Para fazer paginação, eu faço http://www.meusite.com.br/noticias/page/1

 

O problema de usar isso é que eu não sei o que é controlador, o que é ação...

Por exemplo, se estiver fazendo paginação, eu passo page e o número

mas page não é uma ação, é uma página..

Geralmente as pessoas que não usam url automática usam uma variável para atribuir os valores, ex: ?module=noticias&action=add

 

Vocês tem uma idéia melhor de como organizar isto?

Ou eu devo passar as URL'S assim: http://www.meusite.com.br/module/noticias/action/add

 

 

Conto com a opinião de vocês.

 

=)

Share this post


Link to post
Share on other sites

É impressão minha ou você está usando Zend Framework? Se não for, ignore a resposta abaixo:

 

No ZF, a estrutura é sempre assim:

www.meusite.com.br/controller/action ou www.meusite.com.br/module/controller/action

 

Então, se você passa

www.meusite.com.br/noticias/add, noticias é o controller e add é a action chamada.

Agora, se você passa www.meusite.com.br/controller/page/1, o ZF procura o controller page. Se ele não encontra, ele entende que você está chamando o controller index passando por GET a variável page com valor 1. Para recuperar, faça algo assim:

// este código pega o parâmetro page e coloca na $page
$page = $this->_request->getParam('page');
// outra opção é retornar todos os parâmetros em um array.        
Zend_Debug::dump($this->_request->getParams());

Mais ou menos por aí

 

Carlos Eduardo

Share this post


Link to post
Share on other sites

Já li sobre Zend, sobre Cake, etc...

Tentei abstrair o máximo de todos os frameworks e conceitos de mvc na internet.

 

Estou montando a estrutura do mvc sozinho, do zero.

 

Não porque quero criar um novo framework, nada disso.

É que existem conceitos muito bons de orientação a objetos aplicados num framework e no outro não.

 

Quero montar esta estrutura para entender todo o funcionamento do mvc, me aprofundar mais em OOP do PHP e aplicar isso na realidade da empresa que trabalho.

 

Acho que estou no caminho certo então, já que estou fazendo assim:

 

Pego a URL atual como comando $_SERVER['REQUEST_URI']

 


/**
 * Pego a URL atual como comando $_SERVER['REQUEST_URI']
 */
$uri = $_SERVER['REQUEST_URI'];

/**
 * Divido a url criando um array. 
 * Ex: www.meusite.com.br/noticias/add vai ficar
 * array(3) { [0]=>  string(0) "" [1]=>  string(8) "noticias" [2]=>  string(3) "add" } 
 */
$uri = explode('/', $uri);

/**
 * Retiro a primeira posição do array que ficou em branco
 */
array_shift($uri);

/**
 * Pego os valores do array e jogo nas respectivas variáveis
 */
$module = $uri[0]; /* Controller */
$action = $uri[1]; /* Action */
$id     = $uri[2]; /* Id da notícia que estou acessando, no caso NULL */

Está correto o que estou fazendo ou existe uma forma melhor?

 

Abraço!!

Share this post


Link to post
Share on other sites

Cara, isso 'você decide'.. pode ser questão pessoal, mas eu estou gostando de fazer assim:

?ctrl=comentario&ac=view&id=3 //mostra o comentário de id 3 para editar
?ctrl=comentario&ac=view&order=desc&by=data // listagem ordenada por DATA DESC
?ctrl=comentario&ac=view //lista todos os comentarios
?ctrl=comentario&ac=new //cadastra um novo comentario
?ctrl=comentario&ac=del&id=3 //confirma exclusão do comentario de id 3

?ctrl=noticiao&ac=new //cadastra uma nova noticia ..
e então, deixo a 'limpeza' da URL por conta de um .htaccess posterior.

isso 'dentro' do painel.. fora dele, a navegação é de um site comum.. com apenas chamadas nas VIEWs.. meu MVC ainda precisa ser melhorado.. mas eu já trabalhei com explode para as URLs, e não curti muito... por isso fiz com parâmetros individuais

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.