Как добавить помощник или компонент на лету с помощью метода действия контроллера - PullRequest
3 голосов
/ 08 ноября 2010

Я не хочу добавлять его, как показано ниже, потому что они нужны мне только один раз в определенном методе действия

(поэтому не бесполезно загружайте память) class UsersController extends AppController { var $name = 'Users'; var $helpers = array('Html', 'Session'); var $components = array('Session', 'Email');

Ответы [ 3 ]

7 голосов
/ 08 ноября 2010
class UsersController extends AppController {
  public function method_name() {
    $this->helpers[] = 'MyHelper'
  }
}

Подробнее об этом в документации .

Надеюсь, что поможет.

0 голосов
/ 09 ноября 2010

Я использую компонент для добавления помощников и компонентов на лету:

$this->Common->addHelper('Tools.Datetime');
$this->Common->addHelper(array('Text', 'Number', ...));
$this->Common->addComponent('RequestHandler');
$this->Common->addLib(array('MarkupLib'=>array('type'=>'php'), ...));

и т. Д.

Полный код этого можно увидеть в только что открывшемся тикете расширения CakePHP:1006 *http://cakephp.lighthouseapp.com/projects/42648-cakephp/tickets/1277

Или с разметкой php: http://www.dereuromark.de/2010/11/10/loading-classes-on-the-fly/

Это также исправляет некоторые незначительные проблемы с решением, опубликованным mtnorthrop.Плагины, а также переданные опции теперь возможны.Веселитесь.

0 голосов
/ 08 ноября 2010

Вы можете загружать помощников, используя

$this->helpers[] = 'MyHelper';

, как Роб упомянул выше, но это не будет работать для контроллеров, потому что у них есть свои методы инициализации и запуска, которые должны быть вызваны для их работы.

В сети я наткнулся на небольшой код для загрузки компонентов внутри действия контроллера: ComponentLoaderComponent

Да, это компонент, но это не так.он очень большой, поэтому не должно быть проблемой включить его в свои контроллеры.

Либо это, либо вы можете просто изучить его, чтобы увидеть, как работает загрузка компонента, а затем написать свое собственное действие контроллера, чтобы сделать то же самое.

...