Где лучшее место для генерации маршрутов в MVC-приложении? - PullRequest
3 голосов
/ 26 октября 2011

Представьте, что у вас есть следующий сценарий:

В вашем приложении у вас есть несколько «Commentable» моделей. Комментарии отображаются в идентичным образом и может таким образом использовать тот же шаблон. В представлении по умолчанию виджет комментариев, отображаются два последних комментария со ссылкой для загрузки оставшегося X Комментарии.

Виджет также имеет форму (например, текстовое поле, которое отправляется по клавише ввода) для добавления нового комментарий к модели.

Учитывая приведенное выше требование, где находится разумное место для генерации ссылок, необходимых для работы формы и load-link?

Должны ли генерироваться ссылки в представлении, которое вызывает шаблон, вместе с моделью 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 Ответ

1 голос
/ 26 октября 2011

В приложении MVC вы никогда не должны просить модель создать ссылку. Вы должны добавить некоторый помощник вида, который может использовать модель для генерации этих ссылок.

...