$ this-> set('title','Title Name'); 不在CakePHP 3.x中工作

Tac*_*chi 10 php cakephp cakephp-3.0

基本上在default.ctp我有我的标题:

<title>
  <?= $this->fetch('title') ?>
</title>
Run Code Online (Sandbox Code Playgroud)

在控制器内部我有这条线:

$this->set('title', 'Test-Title');
Run Code Online (Sandbox Code Playgroud)

但它什么也没做,它仍然显示控制器名称(作业,控制器全名os JobsController.ctp)

但是,如果我把它放在我的视图文件中:

$this->assign('title', 'Test-Title');
Run Code Online (Sandbox Code Playgroud)

它改变了标题.那么$ this-> set('title',$ title)有什么问题?

drm*_*nja 21

fetch()返回块的内容而不是变量.使用set()在你的控制器设置一个变量,可以通过回变量输出在视图模板: -

<?php echo $title; ?>
Run Code Online (Sandbox Code Playgroud)

如果要使用fetch(),则需要assign()在视图模板中结合使用它来定义块.例如,在您的视图模板中使用: -

<?php $this->assign('title', $title); ?>
Run Code Online (Sandbox Code Playgroud)

然后在布局模板中: -

<title><?php echo $this->fetch('title'); ?></title>
Run Code Online (Sandbox Code Playgroud)

在CakePHP 3中,我们的想法是通过在视图中将页面标题与页面呈现相关联来设置页面标题.这与最初在CakePHP 2中处理的方式不同,你title_for_layout在控制器中定义了它,然后$title_for_layout在布局模板中回显变量(这在以后的Cake 2版本中不赞成使用CakePHP 3方法).

  • 旁注,默认的`title`块值在[**`Cake\View\View :: renderLayout()`**]中指定(http://api.cakephp.org/3.0/source-class-Cake. View.View.html#477-513),它来自`View :: $ viewPath`值. (3认同)

Dav*_*ave 14

您可以只set()控制器中的变量:

// View or Controller
$this->set('title', 'Test-title');
Run Code Online (Sandbox Code Playgroud)

然后在布局或视图中使用它作为标准变量:

<!-- Layout or View -->
<title>
    <?php echo $title; ?>
</title>
Run Code Online (Sandbox Code Playgroud)

详情请访问:http://book.cakephp.org/3.0/en/views.html#setting-view-variables

使用assign()是不同的,这就是它的原因fetch(). assign()与View Blocks一起使用:http: //book.cakephp.org/3.0/en/views.html#using-view-blocks