首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cakephp静态数据收集

Cakephp静态数据收集
EN

Stack Overflow用户
提问于 2013-10-24 13:37:49
回答 2查看 127关注 0票数 0

我不知道该怎么称呼这个问题,但我的问题是:

我正在Cakephp中创建一个网络商店。为此,我有很多不同的类别,它们都绑定到静态菜单线上。

现在,无论您在网上商店的位置,您将能够看到这些categories

所有的categories都存储在database中,然后循环到默认的布局中(这意味着如果我添加一个新的类别,它将自动地将它添加到菜单线中)。

我的问题是,既然所有这些类别都必须获取,无论您在我的应用程序中的位置,我如何收集它们?

我能想到的唯一方法是在每个controller中收集它们,并将它们设置为一个$_SESSION变量,然后检查是否设置了变量。

我知道肯定还有别的办法但是怎么做的?

我在使用CakePHP 2.4

此外,我的应用程序的菜单在Layouts->default.ctp中停止。

这意味着它不会"care"您所处的控制器或操作。这意味着必须在actions之前加载类别。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-24 14:39:29

听起来好像你在找beforeFilter()的回调。在基本控制器(很可能是AppController)上定义它,只需将类别设置为视图变量,这样就可以将数据用于扩展基本控制器的控制器上的所有布局。

下面是一个抽象的示例,说明它可能是什么样子:

代码语言:javascript
复制
...

class AppController extends Controller
{
    ...

    public $uses = array
    (
        'Category'
    );

    public function beforeFilter()
    {
        parent::beforeFilter();

        $this->set('categories', $this->Category->find('all'));
    }

    ...
}

在您的布局中,您可以简单地检查$categories的存在,并做您必须做的任何事情。

代码语言:javascript
复制
if(isset($categories))
{
    // show the category menu
}
票数 1
EN

Stack Overflow用户

发布于 2013-10-24 14:39:46

我会创建这样一个适当的组件

代码语言:javascript
复制
class CategoryLoaderComponent extends Component {

    public function beforeRender($controller)
    {
        parent::beforeRender($controller);
        $controller->loadModel('Category');
        $categories = $controller->Category->find('list');
        $controller->set('categories', $categories);
    }

}

这样,每个使用此组件的控制器都将自动设置$categories变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19567607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档