cakephp 2 - помощник загрузки в зависимости от макета

я хотел бы загрузить помощников в зависимости от макетов. я хочу что-то вроде этого, но id не работает:

function beforeRender(){
  if (array_key_exists($this->request->action, $this->custom_layouts)){
    public $helpers = array('Html', 'Form', 'Session', 'Menu1');                
    $this->layout = $this->custom_layouts[$this->action];

  }else{
    public $helpers = array(
      'Session',
      'Html' => array('className' => 'TwitterBootstrap.BootstrapHtml'),
      'Form' => array('className' => 'TwitterBootstrap.BootstrapForm'),
      'Paginator' => array('className' => 'TwitterBootstrap.BootstrapPaginator'),
      'Menu1'
    );
    $this->layout = 'default';
  }
} 

спасибо за любую помощь привет


person mart    schedule 08.02.2013    source источник


Ответы (1)


вы не можете объявить public $helpers внутри методов.

Вам нужно вызвать его так, как PHP хочет, чтобы он назывался:

$this->helpers[] = 'Menu1';
$this->helpers['Html'] = array('className' => 'TwitterBootstrap.BootstrapHtml');
...
person mark    schedule 08.02.2013
comment
Пожалуйста, проверьте, работает ли динамическое использование разных помощников с одним и тем же псевдонимом (например, иногда $this->Html сопоставляется с «BootstrapHtmlHelper», а иногда с «HtmlHelper»). Назначение одного и того же псевдонима разным классам может вызвать проблемы с кешем Cake и привести к неожиданным результатам (например, к случайному присоединению объекта «неправильного» типа). По крайней мере, так обстоит дело с «Моделями», но то же самое может применяться и к другим классам. - person thaJeztah; 09.02.2013
comment
Большое спасибо Марк, работает отлично. До сих пор он работает так, как ожидалось - person mart; 09.02.2013
comment
@martin приятно слышать, просто обязательно протестируйте его с отладкой, установленной на 0, потому что только тогда кеширование будет полностью включено. - person thaJeztah; 09.02.2013
comment
@thaJeztah Я попробовал сейчас с отладкой, установленной на 0, и, похоже, это работает. Я использую плагин начальной загрузки Twitter для внешнего интерфейса с адаптированным макетом, а для серверной части администратора — стандартный макет по умолчанию cakephp без начальной загрузки Twitter. Что я делаю сейчас: В AppController я не загружаю html и форму общедоступных хелперов, потому что я не использую собственные хелперы, поэтому в этом нет необходимости, потому что они загружаются сами по себе. В случае обнаружения административных представлений загрузите хелперы html, формы и пагинатора, как указано значком. - person mart; 09.02.2013