【发布时间】:2017-01-27 19:06:06
【问题描述】:
在 Laravel 5 中,我需要在编译前通过添加以下字符串在运行时修改视图内容:“@extends(foo)”
注意:更改视图文件内容不是一种选择
所以该过程将类似于(每次调用视图)
- 获取视图内容
- 通过附加“@extends(foo)”关键字来编辑视图内容
- 编译(渲染)视图
我尝试过使用 viewcomposer 和中间件,但没有成功
这是我的作曲家服务提供商:
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
public function boot()
{
View::composer('pages/*', function ($view) {
// i want to do the following:
// 1- find all view under directory resources/views/pages
// 2- then add the following blade command "@extends(foo)" at the beginning of the view before compile
});
}
public function register()
{
//
}
}
这是我的视图中间件尝试(在中间件中我能够在编译后修改视图内容:()
<?php
namespace App\Http\Middleware;
use Closure;
class ViewMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
if (!method_exists($response,'content')) {
return $response;
}
$content = "@extends('layouts.app')".$response->content();
$response->setContent($content);
return $response;
}
}
谢谢
更新: 我需要完成的是根据其父目录使用布局扩展视图
例如我的视图目录有以下结构
我需要视图“controlpanel.blade.php”具有布局“layout/admin.blade.php”,因为它的父文件夹称为“admin”
-view
|--pages
|--admin
|--controlpanel.blade.php
|--layouts
|--admin.blade.php
【问题讨论】:
-
你要做什么,为什么需要这个?
-
为什么不将它们包含在您的视图中?
-
对于大型项目,您必须考虑转向“约定优于配置”。就我而言,所有视图都有布局,所以为什么不自动化呢。如果有人没有提到“约定优于配置”,这里是维基百科的定义:约定优于配置(也称为按约定编码)是软件框架使用的一种软件设计范式,它试图减少开发人员的决策数量需要使用框架来制作,而不必失去灵活性。希望这能澄清一下,谢谢
-
你总是想附加
@extends(foo)还是想把它放在视图中的特定位置? -
@RaghavendraN 现在我的目标是扩展“resources/view/pages”目录下的所有视图,谢谢
标签: php laravel laravel-5 blade