【问题标题】:CakePHP default layout, can't pass values to default.ctpCakePHP 默认布局,无法将值传递给 default.ctp
【发布时间】:2012-10-22 20:48:00
【问题描述】:

我有一个页面网站,在主页上(布局/default.ctp)我有 2 个表单,订阅和联系表单,这些表单由联系人控制器控制。使用 $this->set('some_val', 'test');我可以从 AppController 设置值,但不能从联系人控制器设置值,如何将联系人控制器的值设置为在 default.ctp 中可用,除了会话?

public function beforeFilter() {
    parent::beforeFilter();
    //pr('beforeFilter'); // i was testing is this happening or not
    //exit();
    $tester = 'test';
    $this->set(compact('tester'));
}

在 default.ctp 我只是 pr($this->viewVars);确保我有 tester 值,但它始终为空。

这是如何在一个页面设计中实现多个控制器的正确方法吗?

另一个问题是有一个地方/功能可以检查是否是当前请求帖子,我想检查每个请求是什么?

谢谢。

【问题讨论】:

  • 请粘贴更多代码或正确解释您想要什么
  • @Learner 除了Contact控制器中的2个相关函数外,没有更多代码,您有以上几个问题。
  • 您在滥用框架。您只需将主页设为/contact/:action,然后您只需编辑表单操作即可将其发布到每个控制器。
  • 为什么CakeSession 不可能?你能详细说明一下吗?因为不明白为什么要在Default.ctp 中做任何其他事情,然后进行会话控制以进行身份​​验证。
  • 如果不是绝对必要,也不要使用 beforeFilter() - 将数据设置到控制器 beforeRender() 是正确的方法,因为它在可能的重定向之后触发并且布局实际上是呈现并需要您传递的内容。

标签: cakephp cakephp-2.0


【解决方案1】:

不确定我是否理解正确,但听起来您可能需要多个布局:

class CarsController extends AppController
{
  public function index($page)
  {
    /* Your logic */

    if ( $page == 'other' ) {
      $this->render('view', 'layout');
    } else {
      $this->render('view-other', 'layout-other');
    }
  }
}

我建议查看更多信息:http://api20.cakephp.org/class/controller#method-Controllerrender

【讨论】:

  • Hi Render 是一个需要我的功能,tnx。
  • 希望你能弄清楚关于多个控制器的那部分,因为这在物理上是不可能的:P,谢谢你的支持! :)
  • 是的,我在 google 上发现了其他问题,我是 cakephp 新手,点赞没问题,render 真的对我有帮助。 Tnx
【解决方案2】:

试试 echo $tester;默认情况下,它应该可用。

如果请求是发布的,您将在 $this->data 中有数据。

【讨论】:

  • 嗨,pr($this->viewVars) 也应该显示 $tester,但它没有显示,因为它没有被设置,$this->data 将只在数据正在被控制器中工作发送到,而不是 default.ctp(我的主页),如果我能捕捉到每一个请求,检查它是否发布,那就太好了。
  • 你想要得到的最终结果是什么。你为什么要在 beforeFilter 中设置 vars。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多