Загрузите контроллер в другой контроллер в cakephp - PullRequest
2 голосов
/ 19 мая 2010

я разрабатываю веб-приложение, используя несколько страниц, каждая со своим контроллером.

Проблема теперь в том, что в контроллере есть несколько переменных, созданных для одной страницы, которые необходимы для другой страницы (с другим контроллером).

Для этого мне нужно загрузить один контроллер в другой.

Я сделал это, добавив App :: import («Контроллер», «разделы»);

$ секции = новые секцииController; $ Разделы-> constructClasses ();

к контроллеру, но это, похоже, не работает ..

Может быть, у вас есть идеи?

Спасибо заранее!

Ответы [ 3 ]

4 голосов
/ 20 мая 2010

Я думаю, у вас есть некоторые недоразумения по поводу архитектурного паттерна MVC . Если вам нужна пуля для вашего пистолета, просто возьмите саму пулю, и нет необходимости приобретать другой пистолет с ней. Надеюсь, вы понимаете, что загрузка контроллера - действительно плохая идея.

Также, если вы хотите, чтобы некоторые переменные были доступны для всех контроллеров, как Гаурав Шарма упомянуто, вы можете использовать Configure::write() для хранения данных в конфигурации приложения app/config/core.php .e.g

Configure::write('somekey',$someval);

Тогда вы можете получить $someval на Configure::read('somekey') в любом контроллере.

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

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

$controller_name = "Posts"; // the name of the controller.
$action = "index"; // The action we want to call.

App::import('Controller', $controller_name); 

// Now we need the actual class name of the controller.
$controller_classname = $controller_name . 'Controller'; 

$Controller = new $controller_name;
$Controller->variable_name = "something"; // we can set class variables here too.

// Now invoke the dispatcher so that it will load and initialize everything (like components)
$d = new Dispatcher();
$d->_invoke($Controller, array('pass'=> '', 'action' => $action));

// And exit so it doesn't keep going.
exit(0);

Я, честно говоря, не удосужился выяснить, для чего нужен «проход» (я предполагаю переменные), но он выдает предупреждение без него. Вам также необходимо явно позвонить $this->render в вашем $action.

0 голосов
/ 19 мая 2010

Вы можете использовать любой из приведенных ниже способов для доступа к переменной в любом месте приложения cakePHP.
1.) используйте класс конфигурации ИЛИ
2.) использовать сессию для этих переменных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...