Pergunta

Eu tenho um modelo para uma "prévia do blog" - que é basicamente apenas uma miniatura, título e trecho curto do referido blog em uma boa estrutura concisa construída para repetição em uma lista.

Como sugerido acima, pretendo puxar os 10 melhores blogs do meu site do banco de dados do meu modelo, transferi -los para o controlador, que os fornecerá como para a visualização. Na visão, precisarei percorrer os resultados e preencher uma nova "prévia do blog" para cada blog.

Minha solução atual (que acho que pode quebrar as regras do MVC) é fazer isso no modelo de visualização:

foreach($this->blogs as $blog) {
    $tpl = new Output_Html();
    $tpl->title = $blog['title'];
    // ...assign other vars

    $tpl->render();
}

De alguma forma, isso parece algo que a visão não deveria fazer? Mas, de que outra forma eu seria capaz de percorrer os modelos de "visualização" dentro do modelo de página principal?

Ajuda?

Foi útil?

Solução

Considerando que a visualização é responsável pela geração da saída, o que você está fazendo aqui parece OK: você não está fazendo "coisa de cálculo / negócio / qualquer coisa assim" na sua opinião.

O único problema que tenho é que você está escrevendo muito código aqui; Eu gostaria de passar o $blog matriz/objeto para a visão de um todo e deixe a visualização lidar com ela - em vez de atribuir cada propriedade do $blog para a vista.


ou seja, algo assim parece (Apenas uma ideia - depende de você ver como isso pode se encaixar na sua aula de exibição) mais bonita :

foreach($this->blogs as $blog) {
    $tpl = new Output_Html();
    $tpl->blog = $blog;
    $tpl->render();
}

Isso significa que, se o seu blog O objeto muda, você só tem uma visão para editar (para adicionar ou remover coisas), e você não precisa modificar cada chamada para essa visão para adicionar/remover um componente/propriedade de $blog.

Outras dicas

A reponsibilidade do controlador é lidar com a entrada e definir o modelo em um determinado estado. A reponsibilidade da sua visão é renderizar o modelo. Então, eu diria, tudo bem de fazer. É como renderizar uma visão parcial ou usar um ViewHelper. Veja o auxiliar encapsula a lógica de apresentação para dados de negócios dinâmicos.

Eu concordo com Pascal. Em vez de executar essa operação no seu controlador, basta passar para a vista e fazer o restante das coisas lá. Deixe o controlador receber as entradas, pré -processá -lo por meio de modelos e prepare tudo para a visualização. Dessa forma, você ainda garante a manutenção do seu código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top