5

我无法title_for_layout在 CakePHP 1.3 默认附带的 PagesController 中进行设置。

我在显示功能中使用以下代码:

$this->set('title_for_layout','some title');

我究竟做错了什么?

4

7 回答 7

7

在您的控制器中,相应的值为$this->pageTitle.

更新

糟糕,如评论中所述,这是 1.2 解决方案。1.3 可能性(经过一些研究)包括:

  1. 确保$title_for_layout在布局中得到回应
  2. $this->set()代码放在视图中而不是控制器中
于 2010-04-13T12:31:51.350 回答
3

如果您想模仿 cake 1.2 的行为,您可以执行以下操作:

在您的 app_controller 中,创建以下方法:

在 app/app_controller.php 中(如果你还没有创建这个文件,你可能需要创建)

public $pageTitle;

public function beforeRender() {
    $this->set('title_for_layout', $this->pageTitle);
}

然后在您的任何操作方法中,您可以像在 1.2 中一样使用 pageTitle。

public function index() {
    $this->pageTitle = 'Some Title';
}

beforeRender() 方法将在您的控制器完成处理之后,但在渲染布局之前调用,从而允许您为布局设置变量。

于 2011-04-28T14:38:27.857 回答
2

在 action 方法中,试试这个:

function index()
{
    $this->pageTitle= 'Your Title';
}
于 2011-07-12T09:50:31.990 回答
1

只是想我会添加到任何找到此解决方案的新人中,您可以$this->set('title', $title);在控制器内部的 CakePHP 1.3 中执行此操作,并且标题将自动呈现。

于 2011-02-09T19:30:58.587 回答
1

您可以使用 :

$this->assign('title', 'Some title');

在 ctp 中:

<title><?= $this->fetch('title'); ?></title>

它适用于 CakePHP 3.0

于 2014-07-25T22:15:59.720 回答
1

对于 CakePHP 3.x,

你可以按照这里的建议

本质上,

内部UsersController.php

$this->set('title', 'Login');

里面src/Template/Layouts/default.ctp

以上$this->fetch('title');

写:

if (isset($title)) {
    $this->assign('title', $title); 
}
于 2014-10-28T08:29:55.210 回答
0

改为使用beforeRender()。将以下内容放入 AppController 中:

class AppController extends Controller {
    var $content;

    function beforeRender() {
        $this->set('content',$this->content);
    }            
}

在控制器中,您可以执行以下操作:

function index() {
    $this->content['title'] = '123'; }

这样就行了。

于 2011-06-03T15:49:27.293 回答