我正在使用多个页面开发一个Web应用程序,每个页面都有自己的控制器。
现在的问题是控制器中有一些变量,为一个页面创建,是另一个页面所需的变量(使用不同的控制器)。
因此我需要将一个控制器加载到另一个控制器中。
我这样做是通过添加 App :: import('Controller','sections');
$ sections = new sectionsController; $ sections-> constructClasses();
到控制器,但这似乎不起作用..
也许你们有一些想法?
Thnx提前!
答案 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