0

我不确定如何称呼这个问题,但这是我的问题:

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

现在无论您在网上商店的哪个位置,您都可以看到这些categories

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

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

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

我知道必须有另一种方式,但如何?

我正在使用CakePHP 2.4

我的应用程序的菜单也停止在Layouts->default.ctp

这意味着它不知道"care"您在哪个控制器或操作中。这意味着必须在actions

4

2 回答 2

1

听起来好像您正在寻找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-24T14:39:29.913 回答
0

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

class CategoryLoaderComponent extends Component {

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

}

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

于 2013-10-24T14:39:46.557 回答