【问题标题】:How to make a Model available in a View Cakephp 2.x如何使模型在视图中可用 Cakephp 2.x
【发布时间】:2023-03-23 15:30:02
【问题描述】:

大家好,我有一个“配置文件”表,我需要在我的 default.ctp 视图文件中提供它,因为我正在尝试加载配置文件图像。我目前使用 $current_user 以 $current_user['filename'] 的形式访问“用户”。我的用户和个人资料关系已在我的模型中相应地设置。如果有人可以提供帮助,我将不胜感激。提前致谢。

我的 AppController 的 beforeFilter 声明尝试:

$this->set('profile', $this->loadModel('Profile'));
$this->set('profile', $this->User->find('all'));

我的default.ctp查看文件代码尝试:

<?php echo $this->Html->image('/uploads/profile/filename/thumb/small/'.$profile['filename']); ?>

当前代码:

<?php echo $this->Html->image('/uploads/profile/filename/thumb/small/'.$current_user['filename']); ?>

【问题讨论】:

  • 有什么问题?你到底想做什么? $current_user 数组从何而来?
  • 我也不清楚你要什么。无论如何,你不应该在 AppController 中设置两次 profile 变量,你正在覆盖它......而且你不应该能够直接从视图访问模型。视图与控制器交互。只需在其中设置变量即可。
  • 我正在尝试在每个用户登录系统时访问他们的个人资料图片文件名

标签: cakephp cakephp-1.3 cakephp-2.0 cakephp-2.1 cakephp-model


【解决方案1】:

您应该阐明您的要求。如果您想要每个页面上的所有个人资料信息,那么这就是您所需要的:

public function beforeFilter() {
   $this->loadModel('Profile');
   $profiles = $this->Profile->find('all');
   $this->set('profiles', $profiles);
}


// any view:
foreach($profiles as $profile) : // e.g.
    echo $profile['Profile']['filename'];
endforeach;

但您应该准确指定要返回的数据(idfilename),否则您将在每个请求中返回大量数据,这将影响任何实际水平的性能。

您应该缓存此查询和结果,因为它可能不会经常更改。

编辑:根据您的需要考虑是使用beforeFilter 还是beforeRender

【讨论】:

  • 我正在尝试在每个用户登录系统时访问他们的个人资料图片文件名
【解决方案2】:

对于您似乎想要做的事情,我建议您在元素内部使用 RequestAction。

在此处查看(特别是 requestAction 部分):

http://book.cakephp.org/2.0/en/views.html#elements

在你的元素中简单地调用类似的东西:

$profile = $this->requestAction('users/profile/'.$current_user);

echo $this->Html->image('/uploads/profile/filename/thumb/small/'.$profile['Profile']['filename'];

其中 'users/profile/'.$current_user 是获取配置文件的方法的 url

【讨论】:

  • 我正在尝试在每个用户登录系统时访问他们的个人资料图片文件名
  • 这种方法仍然有效,你只需要知道你的 $current_user ,你可以使用 $this->Auth->User('id');并在您的 requestAction 中传递它,该方法调用一个方法来查询您的配置文件模型以查找已识别的用户(使用 $this->Profile->find('first')。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 1970-01-01
  • 2020-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多