在MVC应用程序中生成路由的最佳位置在哪里?

时间:2011-10-25 20:55:17

标签: php model-view-controller zend-framework zend-route

想象一下,您有以下情况:

  

在您的应用程序中,您有几个“可注释”的模型。评论显示在   以相同的方式,因此可以使用相同的模板。在默认视图中   注释小部件,显示两个最新的注释,带有加载剩余X的链接   评论。

     

小部件还有一个表单(即在enter-key上提交的textarea)以添加新的表单   评论该模型。

鉴于上述要求,哪里有一个合理的位置来生成表单和加载链接需要完成其工作的链接?

是否应在调用模板的视图中生成链接以及Commentable模型?即。

<?php
  echo $this->partial('path/to/template/comments.phtml', array (
    'add-link' => $this->url($params, $routeName),
    'load-link' => $this->url($params, $routeName),
    'comments' => $this->model->getComments()
  );

是否可以向Commentable询问这些链接是否可以接受?我在comments.phtml - 模板:

<div class="comments">
  <div class="loadLink">
    <a href="<?php echo $this->comments->getLoadLink() ?>">
       <?php echo sprintf('Show all %d comments', count($this->comments)); ?>
    </a>
  </div>
  <div class="container">
    <?php 
       foreach ($this->comments->getFirst(2) as $comment) {
          echo $this->partial('comment.phtml', array('comment' => $comment);
       }
    ?>      
  </div>
  <div class="addComment">
     <form action="<?php echo $this->comments->getAddLink() ?>" method="post">
       <div>
          <textarea class="autogrow" name="comment" 
                    placeholder="Write a new comment" rows="1" cols="80">
          </textarea>
       </div>
     </form>
  </div>
</div>

由于MVC主张视图可以与控制器通信,路由生成是否被视为与控制器“通信”的一种方式,即使它没有以对象到对象的方式这样做?

1 个答案:

答案 0 :(得分:1)

在MVC应用程序中,您永远不应该要求模型构建链接。您应该添加一些可能使用该模型生成这些链接的视图助手。