Dado o conceito de 'controladores magros, modelos gordos' e a aceitação geral de que o Views pode chamar diretamente o Models ao exigir dados para saída, deve-se considerar lidar com as partes de 'obter e exibir' as solicitações no Views e não no Controller? Por exemplo (tentativa de manter o código bastante genérico):
Controlador
<?php
class Invoice extends Base_Controller {
/**
* Get all the invoices for this month
*/
public function current_month() {
// as there's no user input let's keep the controller very skinny,
// DON'T get data from the Model here, just load the view
$this->load->view('invoice/current_month');
}
}
Visão
<?php
// directly retrieve current month invoices here
$invoices = $this->invoice_model->get_current_month();
// get some other display-only data, e.g. a list of users for a separate list somewhere on the page
$users = $this->user_model->get_users();
?>
<h1>This month's invoices</h1>
<ul>
<?php foreach ($invoices as $invoice) { ?>
<li><?php echo $invoice['ref']; ?></li>
<?php } ?>
</ul>
Para mim, isso faz pelo menos algum sentido nos casos em que uma solicitação é essencialmente apenas uma Visualização. Por que o Controlador deve coletar e repassar os dados para o View quando ele pode apenas recuperá-lo? Isso deixa o Controlador aberto para processamento puramente no "nível de aplicativo" (por exemplo, tratamento de solicitações GET / POST, gerenciamento de direitos e permissões de acesso etc.), além de manter os modelos reutilizáveis e todas as outras coisas boas.
Se este exemplo fosse estendido para permitir que um usuário filtrasse os resultados, o Controlador apenas manipularia o POST do formulário e passaria os filtros para a Visualização, que solicitaria os dados novamente, desta vez com os filtros.
Essa é uma abordagem válida para o desenvolvimento de um aplicativo MVC? Ou estou negligenciando uma parte importante do papel que um Controlador deve desempenhar?
offers_model->get_latest()
ser feita? Adicionar isso a todos os métodos do controlador (como eu tentei tolamente antes) parece exagero e claramente seco.