如何在CakePHP3中更改控制器中的视图块内容?

如何在CakePHP3中更改控制器中的视图块内容?,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,在Layouts/default.ctp中,您将在第39行看到类似的内容: <div class="header-title"> <span><?= $this->fetch('title') ?></span> </div> 在/users/login控制器操作中 不起作用 我也试过了 $this->assign('title', 'Login'); 在/user

在Layouts/default.ctp中,您将在第39行看到类似的内容:

        <div class="header-title">
            <span><?= $this->fetch('title') ?></span>
        </div>
/users/login
控制器操作中

不起作用

我也试过了

$this->assign('title', 'Login');
/users/login
控制器操作中

我收到以下错误消息:

Call to undefined method App\Controller\UsersController::assign()
我读了文件,从

我明白了

当要转换块时,指定块的内容通常很有用 将变量查看到块中。例如,您可能希望使用块 用于页面标题,有时将标题指定为视图变量 在控制器中

我的

这表明您可以在控制器内部使用
分配
。我想我已经证明了这是错误的


文件中可能有打字错误。请告知我如何设置标题

多亏了irc频道#cakephp的达科塔,这是如何设置标题的

内部
userscocontroller.php

$this->set('title', 'Login');
内部
src/Template/Layouts/default.ctp

$this->fetch('title')上方

写:

if (isset($title)) {
    $this->assign('title', $title); 
}
问题是CakePHP3如何设置默认值

答案在

附加图像以防链接损坏

您可以看到它将默认为视图路径

如果要将视图变量转换为块,指定块的内容通常非常有用。例如,您可能希望对页面标题使用块,有时将标题指定为控制器中的视图变量

以上内容并不建议您在控制器中使用assign(请注意粗体)。以上建议,不要使用

$this->start('title');
echo $title;
$this->end()
你可以用

$this->assign('title', $title);
并且应该从控制器中设置
$title
变量

如果你想从你的控制器上用正确的方式来做,你必须写

$this->set('title', $title);
并从布局/视图文件中写入

echo $title;
蛋糕3(和蛋糕2?)为您提供了覆盖“视图”类的可能性。这是调用assign()的好地方

例如:

namespace App\View;

use Cake\View\View;

class AppView extends View
{
    public function initialize()
    {
        $this->assign('the_block_name', "Hello from AppView");
    }
}
在Layout/default.ctp中:

<?= $this->fetch('the_block_name') ?>

如果像我的例子一样,您希望定义一个“默认”块,那么上面的解决方案非常有效。可以按如下方式替代任何视图文件(.ctp)中的默认块:

$this->start('the_block_name');
    echo '<h4>Hello from current view!</h4>';
$this->end();
$this->start('u block'u name');
回显“当前视图中的您好!”;
$this->end();

i的可能副本表明这是针对CakePHP 3.x的。所以我不同意重复标志。但是两者都使用相同的功能,stackoverflow不是一个对每个php版本的数组如何按值排序的问题!!我同意。那么,在这种情况下,您还应该将2.5问题标记为此问题的副本。文档使用了一种繁琐的方式来表达此想法。这对初学者来说不是很明显。你是什么意思?我需要指定一个默认参数“page_header_image”(在我的模板中呈现),并且在某些情况下,覆盖特定页面的page_header_图像。我能写$this->assign('page_header_image','…');在特定视图中,但是默认的页面\页眉\图像值呢?
$this->start('the_block_name');
    echo '<h4>Hello from current view!</h4>';
$this->end();