CakePHP 扩展视图


很多时候,在制作网页时,我们希望在其他页面中重复页面的某些部分。 CakePHP 具有这样一种功能,可以通过它在另一个视图中扩展视图,因此我们无需再次重复代码。

extend()方法用于扩展视图文件,该方法接受一个参数,即带有路径的视图文件的名称,提供视图文件的名称时不要使用扩展名.ctp。

例子


修改config/routes.php文件,如下所示:

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
    $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
        'httpOnly' => true,
    ]));
    $builder->applyMiddleware('csrf');
    $builder->connect('extend',['controller'=>'Extends','action'=>'index']);
    $builder->fallbacks();
});

新建src/Controller/ExtendsController.php文件,并将以下代码复制到该文件中:

<?php
    namespace App\Controller;
    use App\Controller\AppController;
    class ExtendsController extends AppController{
        public function index(){
        }
    }
?>

新建src/Template/Extends/header.php文件,并将以下代码复制到该文件中:

<div align="center">
    <h1>Common Header</h1>
</div>
<?= $this->fetch('content') ?>

新建src/Template/Extends/index.php文件,并将以下代码复制到该文件中,在这里,我们扩展了上述的header.php文件:

<?php $this->extend('header'); ?>
This is an example of extending view.

访问http://localhost/cakephp4/extend执行上述示例,输出如下所示:

Common Header