基本上在 default.ctp 中,我的标题是这样的:
<title>
<?= $this->fetch('title') ?>
</title>
在 Controller 内部我有这一行:
$this->set('title', 'Test-Title');
但它什么都不做,它仍然显示 Controller 名称(Jobs, controllers full name os JobsController.ctp)
但是如果我把它放在我的 View 文件中:
$this->assign('title', 'Test-Title');
它改变了标题。那么 $this->set('title', $title) 有什么问题?
最佳答案
fetch()
返回 block 的内容而不是变量。在您的 Controller 中使用 set()
设置一个变量,该变量可以通过回显变量在您的 View 模板中输出:-
<?php echo $title; ?>
如果你想使用fetch()
,你需要在 View 模板中结合使用assign()
来定义 block 。例如在您的 View 模板中使用:-
<?php $this->assign('title', $title); ?>
然后在布局模板中:-
<title><?php echo $this->fetch('title'); ?></title>
在 CakePHP 3 中,想法是通过在 View 中分配页面标题来设置页面标题,因为它与页面的呈现相关。这与 CakePHP 2 中最初的处理方式不同,在 CakePHP 2 中,您将在 Controller 中定义 title_for_layout
,然后在布局模板中回显 $title_for_layout
变量(这在在 Cake 2 的更高版本中支持 CakePHP 3 方法。
关于php - $this->设置 ('title' , 'Title Name' );在 CakePHP 3.x 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30171030/