将控制器加载到cakephp中的另一个控制器中

时间:2010-05-19 09:28:24

标签: php cakephp controller

我正在使用多个页面开发一个Web应用程序,每个页面都有自己的控制器。

现在的问题是控制器中有一些变量,为一个页面创建,是另一个页面所需的变量(使用不同的控制器)。

因此我需要将一个控制器加载到另一个控制器中。

我这样做是通过添加  App :: import('Controller','sections');

$ sections = new sectionsController; $ sections-> constructClasses();

到控制器,但这似乎不起作用..

也许你们有一些想法?

Thnx提前!

3 个答案:

答案 0 :(得分:4)

我认为你心中对MVC architectural pattern存在一些误解。如果你的枪需要一些子弹,那就得到子弹本身,并不需要另外一把枪。所以我希望你了解加载控制器确实是一个坏主意。

此外,如果你想让一些变量可以被所有控制器访问,就像Gaurav Sharma一样 提到,您可以使用Configure::write()在应用程序的配置app/config/core.php中存储数据。例如

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

然后,您可以在任何控制器中通过$someval获得Configure::read('somekey')

答案 1 :(得分:0)

您可以使用以下任何一种方法访问cakePHP应用程序中的任何位置的变量 1.)使用 configuration class
2.)对这些变量使用会话

答案 2 :(得分:0)

今天早上我一直在努力。我实际上从数据库中获取控制器名称,但我已将其更改为使用变量。

$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