Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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.

 

=)

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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!!

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.