我不知道该怎么称呼这个问题,但我的问题是:
我正在Cakephp中创建一个网络商店。为此,我有很多不同的类别,它们都绑定到静态菜单线上。
现在,无论您在网上商店的位置,您将能够看到这些categories。
所有的categories都存储在database中,然后循环到默认的布局中(这意味着如果我添加一个新的类别,它将自动地将它添加到菜单线中)。
我的问题是,既然所有这些类别都必须获取,无论您在我的应用程序中的位置,我如何收集它们?
我能想到的唯一方法是在每个controller中收集它们,并将它们设置为一个$_SESSION变量,然后检查是否设置了变量。
我知道肯定还有别的办法但是怎么做的?
我在使用CakePHP 2.4
此外,我的应用程序的菜单在Layouts->default.ctp中停止。
这意味着它不会"care"您所处的控制器或操作。这意味着必须在actions之前加载类别。
发布于 2013-10-24 14:39:29
听起来好像你在找beforeFilter()的回调。在基本控制器(很可能是AppController)上定义它,只需将类别设置为视图变量,这样就可以将数据用于扩展基本控制器的控制器上的所有布局。
下面是一个抽象的示例,说明它可能是什么样子:
...
class AppController extends Controller
{
...
public $uses = array
(
'Category'
);
public function beforeFilter()
{
parent::beforeFilter();
$this->set('categories', $this->Category->find('all'));
}
...
}在您的布局中,您可以简单地检查$categories的存在,并做您必须做的任何事情。
if(isset($categories))
{
// show the category menu
}发布于 2013-10-24 14:39:46
我会创建这样一个适当的组件
class CategoryLoaderComponent extends Component {
public function beforeRender($controller)
{
parent::beforeRender($controller);
$controller->loadModel('Category');
$categories = $controller->Category->find('list');
$controller->set('categories', $categories);
}
}这样,每个使用此组件的控制器都将自动设置$categories变量。
https://stackoverflow.com/questions/19567607
复制相似问题