Cakephp 在站点范围内填充下拉列表的最佳方法是

Cakephp 在站点范围内填充下拉列表的最佳方法是,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,我使用的是CakePHP 1.3和一个布局,其中包含用户有权管理的组织下拉列表,因此我尝试使用包含登录用户ID的组织填充该下拉列表,但我希望在用户看到任何内容之前填充该下拉列表,以便他们可以在标题中使用它。登录后,需要在每个页面上显示下拉列表。我尝试添加查询以在appcontroller中拉取这些组织,但用户ID在before筛选器中尚不可用。我应该在哪里或怎样做?它应该在会话中,还是有更好的构造可以使用?元素 在我的应用程序中,在beforeRender中使用用户id没有问题(如果您使用的是A

我使用的是CakePHP 1.3和一个布局,其中包含用户有权管理的组织下拉列表,因此我尝试使用包含登录用户ID的组织填充该下拉列表,但我希望在用户看到任何内容之前填充该下拉列表,以便他们可以在标题中使用它。登录后,需要在每个页面上显示下拉列表。我尝试添加查询以在appcontroller中拉取这些组织,但用户ID在before筛选器中尚不可用。我应该在哪里或怎样做?它应该在会话中,还是有更好的构造可以使用?元素

在我的应用程序中,在beforeRender中使用用户id没有问题(如果您使用的是Auth组件)

您可以将其与
$this->Auth->user('id')
一起使用

我会这样做:如果用户已登录,请检入AppController。如果他是,则从数据库(或从何处获取信息)中提取您想要的信息,并将其存储在一个名为
$dropdown
的变量中。
如果用户未登录,
$dropdown
将为
false

现在,您可以使用
$this->set(compact('dropdown'))将此变量设置为视图可用。


现在在您的布局中(这对您在每个页面上都有它很重要),您可以轻松地检查
$dropdown
是否为false。如果没有,您可以使用变量并向用户显示所需的下拉列表。

但在渲染前使用它很重要。BeforeFilter可能是错误的,因为它在所有情况下都不会启动/触发。然而,在渲染之前是。