扩展 Blade
Blade 允许你自定义一些指令,你可以使用 directvie
方法来注册指令。当 Blade 编译器遇到该指令时,它会自动的调用该指令注册时提供的回调函数并传递它的参数。
下面的例子创建了 @datetime($val)
指令来格式化 $val
:
<?php
namespace App\Providers;
use Blade;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Perform post-registration booting of services.
*
* @return void
*/
public function boot()
{
Blade::directive('datetime', function ($expression) {
return "<?php echo with{$express}->format('m/d/Y H:i'); ?>";
});
}
/**
* Register bindings in the container
*
* @return void
*/
public function register()
{
//
}
}
上面的例子中使用了 Laravel 的 with
帮助方法,它只是简单的返回一个所提供的对象或值,并提供方便的链式调用。最终该指令生成的 PHP 代码如下:
<?php echo with($var)->format('m/d/Y H:i'); ?>
在你更新 Blade 指令的逻辑之后,你应该删除所有已缓存的 Blade 视图,你可以使用 view:clear
Artisan 命令来清除。
文/Dearmadman(简书作者)
原文链接:http://www.jianshu.com/p/7d65f9eb94be
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文链接:http://www.jianshu.com/p/7d65f9eb94be
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
<?php namespace Modules\Manage\Http\Middleware; use Closure; use Blade; use Pingpong\Modules\ModulesServiceProvider; use App\Common\Helpers\Helper; /** * 初始化中间件 * Class Initialize * @package Modules\Manage\Http\Middleware */ class Initialize { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { /** * 注册模板路径 */ view()->addLocation(base_path('modules/Manage/Resources/views/')); /* * 添加快捷标签 */ Blade::directive('css', function ($expression) { $expression = Helper::parseHtmlTags($expression, 'assets/manage/css/'); return "<?php echo Html::style{$expression} ?>"; }); Blade::directive('js', function ($expression) { $expression = Helper::parseHtmlTags($expression, 'assets/manage/js/'); return "<?php echo Html::script{$expression} ?>"; }); Blade::directive('img', function ($expression) { $expression = Helper::parseHtmlTags($expression, 'assets/manage/images/'); return "<?php echo asset($expression) ?>"; }); //权限标签 Blade::directive('per', function ($expression) { return "<?php if (\\App\\Models\\Manager::checkAbility{$expression}) : ?>"; }); Blade::directive('endper', function () { return "<?php endif; ?>"; }); $breadcrumbs = base_path('modules/Manage/Http/Breadcrumbs.php'); if (file_exists($breadcrumbs)) { require $breadcrumbs; } return $next($request); } }