Laravel Blade自定义指令以字符串形式接收值,而不是其原始值
我是拉威尔的新手,经过研究,但我找不到这么简单的解决方案。我在Laravel Blade自定义指令以字符串形式接收值,而不是其原始值,laravel,laravel-5,blade,laravel-blade,Laravel,Laravel 5,Blade,Laravel Blade,我是拉威尔的新手,经过研究,但我找不到这么简单的解决方案。我在app/Providers/AppServiceProvider.php文件中为Blade创建了一个自定义指令,即“test”: <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Blade; class AppServiceProvider extends Servi
app/Providers/AppServiceProvider.php
文件中为Blade创建了一个自定义指令,即“test”:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Blade;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Blade::directive('test', function($expression){
// Dumps as well: "$var1 , $var2"
dump($expression);
list($arg1, $arg2) = explode(',',str_replace(['(',')',' '], '', $expression));
// will print: $var1 , $var2
return "<?php echo '$arg1 , $arg2'; ?>";
});
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
但也不起作用,指令总是接收变量的名称而不是其内容。在这种情况下,我忽略了什么?感谢您的帮助。我正在使用Laravel 5.4...在完成定制刀片制作后,请尝试以下操作:
php artisan视图:清除
在完成定制刀片制作后,尝试以下操作:
php artisan视图:清除编辑:最后我有了真正的解决方案
您需要添加以list to return语句开头的行,因为blade在替换指令后会在storage/framework/views目录中创建一个php文件。所以你需要像下面这样的东西
Blade::directive('test', function($expression){
return
'<?php
list($arg1, $arg2) = explode(\',\',str_replace([\'(\',\')\',\' \'], \'\', ' . $expression . '));
echo "$arg1 -- $arg2";
?>';
});
注意:您应该在Providers目录中创建BladeServiceProvider,然后将其添加到config/app.php中的Providers中。然后,您可以将指令添加到BladeServiceProvider。这并不重要。这比你的方法更合适。编辑:最后我有了真正的解决方案
您需要添加以list to return语句开头的行,因为blade在替换指令后会在storage/framework/views目录中创建一个php文件。所以你需要像下面这样的东西
Blade::directive('test', function($expression){
return
'<?php
list($arg1, $arg2) = explode(\',\',str_replace([\'(\',\')\',\' \'], \'\', ' . $expression . '));
echo "$arg1 -- $arg2";
?>';
});
注意:您应该在Providers目录中创建BladeServiceProvider,然后将其添加到config/app.php中的Providers中。然后,您可以将指令添加到BladeServiceProvider。这并不重要。这比你的方法更合适。将返回改为return”“代码>将返回更改为返回“”代码>
Blade::directive('test', function($expression){
return
'<?php
list($arg1, $arg2) = explode(\',\',str_replace([\'(\',\')\',\' \'], \'\', ' . $expression . '));
echo "$arg1 -- $arg2";
?>';
});
@php($expression = "(0,1)")
@test($expression)
@test("(10,12)") //It works now