laravel视图&模板
如果想在每次渲染某些视图时绑定数据,视图组件可以帮你把这样的程序逻辑都组织到同一个地方。
- 首先创建__App\Http\ViewComposers__目录
- 创建provider:php artisan make:provider ComposerServiceProvider
- 在boot函数下写入
public function boot()
{
// 使用对象型态的视图组件...
view()->composer(
'profile', 'App\Http\ViewComposers\ProfileComposer'
);
// 使用闭包型态的视图组件...
view()->composer('dashboard', function ($view) {
});
}
- 在__config/app.php配置文件内加入服务提供者
App\Providers\ComposerServiceProvider::class
- 在__App\Http\ViewComposers__目录下创建__ProfileComposer.php__
namespace App\Http\ViewComposers;
use Illuminate\Contracts\View\View;
class ProfileComposer
{
public function __construct()
{
// 所有依赖都会自动地被服务容器解析...
}
//视图被渲染之前,视图组件的 compose 方法会被调用,并传入一个 Illuminate\Contracts\View\View 实例。你可以使用 with 方法来把数据绑定到视图。
public function compose(View $view)
{
$view->with('count', 1);
}
}
在`profile.blade.php`下填写`{{$count}}`
在控制器或者路由中直接通过调用view方法返回 __1__即成功
对所有的视图都进行渲染操作
或者直接把下面的方法放到`ComposerServiceProvider`服务提供者下
view()->composer('*', function ($view) {
$view->with('qq','fucker');
});
或者使用共享在__AppServiceProvider的boot方法
view()->share('key','value');
模板
Blade视图文件使用__blade.php__作为扩展名,保存于__resource/views__文件夹内,模板的缓存文件保存在__/storage/framework/views__下
Blade 的 {{ }} 语法会自动调用 PHP htmlentites 函数来防御 XSS 攻击。
可以使用 @ 符号来告知 Blade 渲染引擎该表达式应该维持原样。
扩充Blade
Blade允许自定义命令,可以使用directive
方法注册命令, 在__AppServiceProvider__的boot()方法下
return "<?php echo with{$expression}->format('m/d/Y H:i'); ?>";
});
Blade::directive('sb',function(){
return "<?php echo 'hello world' ?>";
});
在视图层直接使用@调用即可