Вопрос CakePHP: Как я могу вызвать представление одного контроллера с другого контроллера? - PullRequest
0 голосов
/ 07 сентября 2011

Это posts / index.php =>

<?php foreach ($allposts as $post) {
            echo '<tr class="class_row">';
            echo '<td>';

            echo $this->Html->link($post['Post']['title'],
                                array('controller'=>'posts','action'=>'view',$post['Post']['id']),
                                array('id'=>'id_anchor_title','class'=>'class_anchor_title') );
            echo '<tr>';
            echo '<td>';
}
?>

Я хочу назвать это posts / index.ctp из products / index.ctp => Это будет общий / общий index.ctp длявсе контроллер.Как я могу это сделать?

В posts / index.ctp используется $ allposts.Это устанавливается в действиях posts / index.Но когда я буду вызывать posts / index.ctp из products / index action, там устанавливается другая переменная.Предположим, что $ this-> set ('allproducts', $ allproducts);устанавливается в действие продукты / индекс.Теперь, как я могу использовать эту переменную allproducts в posts / index.ctp?

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

Как указано @Vins, вы можете использовать $this->render('view_name'); в конце действия вашего контроллера, чтобы отобразить другое представление (в вашем случае это должно быть $this->render('/posts/index');)

С точки зрения использования переменной, которую выхочу, есть пара вещей, которые вы можете сделать.Можно было бы изменить функцию set в каждом контроллере, чтобы использовать общее имя.Например, у контроллера сообщений может быть $this->set('results',$allposts);, а у контроллера продуктов может быть $this->set('results',$allproducts);. При этом вы всегда можете ссылаться на $results в своем файле просмотра.Вы также можете установить другую переменную, $pageModel.$this->set('pageModel','Product'); в контроллере вашей продукции, например.Тогда ваш файл posts / index.php может сделать что-то вроде этого:

<?php foreach ($results as $result) {
            echo '<tr class="class_row">';
            echo '<td>';

            echo $this->Html->link($result[$pageModel]['title'],
                                array('controller'=>$this->controller,'action'=>'view',$result[$pageModel]['id']),
                                array('id'=>'id_anchor_title','class'=>'class_anchor_title') );
            echo '<tr>';
            echo '<td>';
}
?>

обратите внимание, что я заменил 'controller' => 'posts' на 'controller' => $this->controller Это сделает ваш вид динамическим, поэтому ссылки всегда будут указывать на действие видаправильного контроллера.

Надеюсь, это поможет!

1 голос
/ 07 сентября 2011

Мы можем использовать $this->render('view_name');, чтобы использовать другое представление для какого-либо другого действия.Я не уверен, как именно вы собираетесь достичь своей цели.

0 голосов
/ 07 сентября 2011

, если вы хотите визуализировать posts / index.ctp вместо products / index.ctp, используйте $this->render('/posts/index');

Или, возможно, вы захотите поместить это в элемент (это та же идея общего / общегоindex.ctp).

...