Cakephp静态数据收集
我不确定该怎么称呼这个问题,但我的问题是: 我正在用Cakephp创建一个webshop。为此,我有很多不同的类别绑定到一个静态菜单行 现在,无论您在网上商店的什么位置,您都可以看到这些Cakephp静态数据收集,php,cakephp,Php,Cakephp,我不确定该怎么称呼这个问题,但我的问题是: 我正在用Cakephp创建一个webshop。为此,我有很多不同的类别绑定到一个静态菜单行 现在,无论您在网上商店的什么位置,您都可以看到这些类别 所有类别都存储在数据库中,然后循环到默认布局中(这意味着如果我添加一个新类别,它将自动将其自身添加到菜单行) 我的问题是,无论您在我的应用程序中位于何处,所有这些类别都必须被提取。我如何收集它们 我能想到的唯一方法是在每个控制器中收集它们,并将它们设置为$\u会话变量,然后检查变量是否已设置 我知道一定有别
类别
所有类别
都存储在数据库
中,然后循环到默认布局中(这意味着如果我添加一个新类别,它将自动将其自身添加到菜单行)
我的问题是,无论您在我的应用程序中位于何处,所有这些类别都必须被提取。我如何收集它们
我能想到的唯一方法是在每个控制器中收集它们,并将它们设置为$\u会话
变量,然后检查变量是否已设置
我知道一定有别的办法,但怎么办
Im使用的是CakePHP 2.4
此外,我的应用程序的菜单在Layouts->default.ctp
这意味着它不关心您所处的控制器或操作。这意味着必须在操作
听起来像是在寻找回调之前加载类别。在基本控制器上定义它(很可能是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
}
我会像这样创建一个合适的组件
class CategoryLoaderComponent extends Component {
public function beforeRender($controller)
{
parent::beforeRender($controller);
$controller->loadModel('Category');
$categories = $controller->Category->find('list');
$controller->set('categories', $categories);
}
}
这样,使用此组件的每个控制器都将自动设置$categories变量请始终提及您的确切CakePHP版本!为什么你会考虑适当地/必要地在会话中存储数据?为了回答这个问题,人们需要了解您的应用程序结构是否有什么特殊之处?您只需要在布局、视图和/或元素中访问数据,不是吗?@ndm完全按照我的想法更新了我的问题,但不确定是否可以完成。谢谢!