时间:2021-07-01 10:21:17 帮助过:32人阅读
下面由Laravel教程栏目给大家介绍laravel自定义模板指令-tojs ,希望对需要的朋友有所帮助!
Blade 允许你自定义命令,你可以使用 directive 方法注册命令。当 Blade 编译器遇到该命令时,它将会带参数调用提供的回调函数。blade模板可以通过directive方法来自定义模板指定,
tojs指令主要用于PHP自定义一些数据转换为js对象方便js调用
- <?php
- namespace App\Providers;
- use App\Helpers\ToJs\ToJs;
- use Illuminate\Support\Facades\Blade;
- use Illuminate\Support\ServiceProvider;
- class ToJsServiceProvider extends ServiceProvider
- {
- /**
- * Bootstrap the application services.
- *
- * @return void
- */
- public function boot()
- {
- //
- }
- /**
- * Register the application services.
- *
- * @return void
- */
- public function register()
- {
- $this->app->singleton('tojs', function () {
- return new ToJs();
- });
- /*
- * The block of code inside this directive indicates
- * the chosen javascript variables.
- */
- Blade::directive('tojs', function () {
- return '<script> window.Laravel = ' . json_encode(app('tojs')->get()) . '</script>';
- });
- }
- }
- <?php
- namespace App\Helpers\ToJs;
- use Illuminate\Support\Arr;
- class ToJs
- {
- protected $data = [];
- public function put(array $data)
- {
- foreach ($data as $key => $value) {
- $this->data[$key] = value($value);
- }
- return $this;
- }
- public function get($key = null, $default = null)
- {
- if (!$key) return $this->data;
- return Arr::get($this->data, $key, $default);
- }
- public function forget($keys)
- {
- Arr::forget($this->data, $keys);
- return $this;
- }
- }
- namespace App\Helpers\ToJs\Facades;
- use Illuminate\Support\Facades\Facade;
- class ToJsFacade extends Facade
- {
- /**
- * Get the registered name of the component.
- *
- * @return string
- */
- protected static function getFacadeAccessor()
- {
- return 'tojs';
- }
- }
providers 添加\App\Providers\ToJsServiceProvider::class
aliases 添加'ToJs' => \App\Helpers\ToJs\Facades\ToJsFacade::class,
- if (!function_exists('to_js')) {
- /**
- * Access the javascript helper.
- */
- function to_js($key = null, $default = null)
- {
- if (is_null($key)) {
- return app('tojs');
- }
- if (is_array($key)) {
- return app('tojs')->put($key);
- }
- return app('tojs')->get($key, $default);
- }
- }
在PHP代码需要的地方调用 to_js(['username'=>'test']);
blade模板直接通过 @tojs
就可以在页面渲染出<script> window.Laravel = {"username":"test"}</script>
以上就是关于laravel自定义模板指令-tojs的详细内容,更多请关注gxlcms其它相关文章!