$this->set('title', 'Title Name');无法在 CakePHP 中工作 3.x
$this->set('title', 'Title Name'); not working in CakePHP 3.x
基本上在 default.ctp 我的标题是这样的:
<title>
<?= $this->fetch('title') ?>
</title>
在控制器内部我有这一行:
$this->set('title', 'Test-Title');
但是它什么都不做,它仍然显示控制器名称(Jobs, controllers full name os JobsController.ctp)
但是如果我把它放在我的视图文件中:
$this->assign('title', 'Test-Title');
它改变了标题。那么 $this->set('title', $title) 有什么问题?
您可以 set()
控制器中的变量:
// View or Controller
$this->set('title', 'Test-title');
然后将其用作布局或视图中的标准变量:
<!-- Layout or View -->
<title>
<?php echo $title; ?>
</title>
详情在这里:http://book.cakephp.org/3.0/en/views.html#setting-view-variables
使用 assign()
是不同的,这就是它与 fetch()
一起使用的原因。 assign()
与视图块一起使用:http://book.cakephp.org/3.0/en/views.html#using-view-blocks
fetch()
returns 块的内容不是变量。在您的控制器中使用 set()
设置一个变量,该变量可以通过回显变量在您的视图模板中输出:-
<?php echo $title; ?>
如果要使用 fetch()
,则需要在视图模板中将其与 assign()
结合使用以定义块。例如在您的视图模板中使用:-
<?php $this->assign('title', $title); ?>
然后在布局模板中:-
<title><?php echo $this->fetch('title'); ?></title>
在 CakePHP 3 中,想法是通过在视图中分配页面标题来设置页面标题,因为它与页面的呈现相关。这与 CakePHP 2 中最初的处理方式不同,在 CakePHP 2 中,您将在控制器中定义 title_for_layout
,然后在布局模板中回显 $title_for_layout
变量(不赞成使用 CakePHP 3 方法Cake 2 的更高版本)。
只是为了完成,我遇到了一种情况,其中在 <head></head>
之间引用了未定义变量的格式错误的 .js 脚本导致 <title></title>
标记被发布到 DOM(显示在页面源代码)但是 Chrome、Firefox 和(从记忆中)MSIE all 未能再次从内存中将标题内容传送到 APP UI - iOS 移动设备 未受影响。
如果你想坚持你的代码,在设置 "title" 变量后只需简单地写这个:
<?= __('Main Project Name') ?>
<?php if( isset($title)) $this->assign('title', $title); ?>
<?= ' - ' . $this->fetch('title') ?>
我在default.ctp
中这样做过
<?php
$cakeDescription = __d('cake_dev', 'Your Title');
?>
<title>
<?php echo $cakeDescription ?>: <?php echo $title_for_layout; ?>
</title>
在我的视图文件中,我已经这样做了。
<?php $this->assign('title', 'Your Title');?>
在 CakePHP 3 布局模板中,确保按如下方式设置标题。
<title>
<?= $this->fetch('title') ?>
</title>
那么在你看来:
<?php $this->assign('title', 'Title Name'); ?>
这是 CakePHP 使用其 built-in 视图 类 处理页面标题(视图块)呈现方案的方式。
基本上在 default.ctp 我的标题是这样的:
<title>
<?= $this->fetch('title') ?>
</title>
在控制器内部我有这一行:
$this->set('title', 'Test-Title');
但是它什么都不做,它仍然显示控制器名称(Jobs, controllers full name os JobsController.ctp)
但是如果我把它放在我的视图文件中:
$this->assign('title', 'Test-Title');
它改变了标题。那么 $this->set('title', $title) 有什么问题?
您可以 set()
控制器中的变量:
// View or Controller
$this->set('title', 'Test-title');
然后将其用作布局或视图中的标准变量:
<!-- Layout or View -->
<title>
<?php echo $title; ?>
</title>
详情在这里:http://book.cakephp.org/3.0/en/views.html#setting-view-variables
使用 assign()
是不同的,这就是它与 fetch()
一起使用的原因。 assign()
与视图块一起使用:http://book.cakephp.org/3.0/en/views.html#using-view-blocks
fetch()
returns 块的内容不是变量。在您的控制器中使用 set()
设置一个变量,该变量可以通过回显变量在您的视图模板中输出:-
<?php echo $title; ?>
如果要使用 fetch()
,则需要在视图模板中将其与 assign()
结合使用以定义块。例如在您的视图模板中使用:-
<?php $this->assign('title', $title); ?>
然后在布局模板中:-
<title><?php echo $this->fetch('title'); ?></title>
在 CakePHP 3 中,想法是通过在视图中分配页面标题来设置页面标题,因为它与页面的呈现相关。这与 CakePHP 2 中最初的处理方式不同,在 CakePHP 2 中,您将在控制器中定义 title_for_layout
,然后在布局模板中回显 $title_for_layout
变量(不赞成使用 CakePHP 3 方法Cake 2 的更高版本)。
只是为了完成,我遇到了一种情况,其中在 <head></head>
之间引用了未定义变量的格式错误的 .js 脚本导致 <title></title>
标记被发布到 DOM(显示在页面源代码)但是 Chrome、Firefox 和(从记忆中)MSIE all 未能再次从内存中将标题内容传送到 APP UI - iOS 移动设备 未受影响。
如果你想坚持你的代码,在设置 "title" 变量后只需简单地写这个:
<?= __('Main Project Name') ?>
<?php if( isset($title)) $this->assign('title', $title); ?>
<?= ' - ' . $this->fetch('title') ?>
我在default.ctp
<?php
$cakeDescription = __d('cake_dev', 'Your Title');
?>
<title>
<?php echo $cakeDescription ?>: <?php echo $title_for_layout; ?>
</title>
在我的视图文件中,我已经这样做了。
<?php $this->assign('title', 'Your Title');?>
在 CakePHP 3 布局模板中,确保按如下方式设置标题。
<title>
<?= $this->fetch('title') ?>
</title>
那么在你看来:
<?php $this->assign('title', 'Title Name'); ?>
这是 CakePHP 使用其 built-in 视图 类 处理页面标题(视图块)呈现方案的方式。