2010-06-24 3 views
0

Я использую CakePHP, и у меня есть компонент, который я написал, который использует компонент под названием «Пользователи» для обработки входа в систему, выхода из системы, регистрации и т. Д. Я хотел бы сделать это на макете default.ctp на боковой панели. Как я могу это сделать?Отображение части контроллера в макете/представлении

Я пробовал:

<div id="leftNav"> 
     <div id="login-block" class="block"> 
      <?php echo $this->element('loginblock', array('component' => 'user')); ?> 
      <ul> 
       <li><a href="https://stackoverflow.com/users/login">Login</a></li> 
       <li><a href="https://stackoverflow.com/users/register">Register</a></li> 
       <li><a href="https://stackoverflow.com/users/logout">Logout</a></li> 
      </ul> 
     </div> 
    </div> 

, но это не удалось.

+0

Какое содержимое вашего файла loginblock.ctp? – bancer

+0

нет. – Malfist

+0

«нет никого». - как вы можете сделать что-то, чего там нет? Или передать параметры, если на то пошло? – Leo

ответ

0

Вы не можете по определению показать a. Может отображаться только V-часть архитектуры MVC (или, как минимум, должно быть), а компоненты принадлежат части C.

Лучший способ передачи информации от компонента к представлению является set тин его через контроллер, как это:

class MyComponent extends Object { 

    function initialize(&$controller) { 
     $this->controller =& $controller; 
    } 

    function someMethod() { 
     $this->controller->set('user', $someInformation); 
    } 

} 

И с точки зрения вы можете выводить $user переменную как обычно.

+0

, но пользовательский компонент активен только на страницах http: // url/users/*. Я хочу, чтобы иметь возможность отображать его view (login.ctp или logout.ctp) на каждой странице. И.Е. в defualt.ctp – Malfist

+0

@Malfist Как бы вы визуализировали его представление, если вы не включили компонент? Если вы хотите отображать контент на основе информации, определенной в компоненте User, то этот компонент должен запускаться каждый раз. Вы ** можете ** использовать 'requestAction' в представлении, но это все равно нужно запустить компонент для получения информации. Так или иначе, вам нужно будет включить компонент везде, если вам нужна его информация. Однако в качестве альтернативы вы можете хранить информацию в сеансе, если все в порядке, что они не обновляются. – deceze

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