2013-10-09 6 views
0

У меня есть следующие модели:Как получить доступ к модели в представлении - Symfony 2

class Person 
{ 
    public $name; 
    function __Construct($name) 
    { 
     $this->name = $name; 
    } 
} 

Я следующий контроллер:

class NavigationController extends Controller 
{ 
    public function indexAction() 
    { 
     $people = array(
      new Person("James"), 
      new Person("Bob") 
     ); 
     return $this->render('FrameworkBundle:Navigation:index.html.php', $people); 
    } 
} 

Как получить доступ к модели массив в представлении. Есть ли способ напрямую получить доступ к модели или мне нужно назначить такое свойство :?

class NavigationController extends Controller 
{ 
    public function indexAction() 
    { 
     $people = array(
      new Person("James"), 
      new Person("Bob") 
     ); 
     return $this->render('FrameworkBundle:Navigation:index.html.php', array("model" => $people)); 
    } 
} 

Вид:

<?php 
    foreach($model as $person) 
    { 
     echo $person->title; 
    } 
?> 

Проблема с выше будет то, что он может быть изменен пользователем в

return $this->render('FrameworkBundle:Navigation:index.html.php', array("marybloomingpoppin" => $people)); 

ответ

0

В примере просмотра вы использовали, вы уже имели правильную реализацию:

class NavigationController extends Controller 
{ 
    public function indexAction() 
    { 
     $people = array(
      new Person("James"), 
      new Person("Bob") 
     ); 
     return $this->render('FrameworkBundle:Navigation:index.html.php', array("model" => $people)); 
    } 
} 

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

+0

К сожалению, мой опыт изменения переменных простирается далеко за пределы этого. Я вызвал некоторый массив («people» => $ people). И еще один коллега сделал это с массивом («users» => $ peopleRepository). Когда дело дошло до третьего коллеги, он был совершенно смущен в течение двух недель, которые я проводил в отпуске, потому что эта переменная отличалась по виду (была ли какая-то отдельная модель, которую он отсутствовал?) (Это произошло во всей заявке). В C# .NET MVC (хотя у вас есть viewbag), все это доступ к @model в представлении и в меру своих возможностей, а не путаница! – Jimmyt1988

+0

Это не технический вопрос, а вопрос вкуса и соглашения об именах. Обычно я предоставляю списки сущностей множественного имени моей сущности, поэтому, если у меня есть массив пользователей, я называю его массивом ('users' => $ anyVariable), так что по крайней мере в представлении доступ к списку пользователей всегда тоже самое. – m0c

+0

@moc это вопрос программирования ... Я не знаю, как это сделать по-другому, что такое код. Я не забочусь о соглашениях об именах, я не спрашивал, было ли это лучше, я спросил, как это сделать. это полностью вопрос программирования. – Jimmyt1988

Смежные вопросы