我是Laravel的新手,经过研究但我找不到这么简单的解决方案。我创建了一个自定义指令,即" test"对于app/Providers/AppServiceProvider.php
文件中的Blade:
<?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()
{
//
}
}
理论上,它在刀片模板中的使用应该非常简单,但是如下例所示,该指令正在打印参数的文字值,例如$ var1正在打印$ var1而不是其真实内容&#34; test一个&#34;:
<?php
$var1 = 'test a';
$var2 = 'test b';
?>
// Prints: $var1 , $var2
// Expected: "test a test b"
@test($var1 , $var2)
已尝试使用多个标记打印其值:
@test( {{ $var1 }}, {{ $var2 }})
@test( {!! $var1 !!}, {!! $var2 !!})
@test( {{{ $var1 }}}, {{{ $var2 }}})
但两种方法都不起作用,指令总是接收变量的名称而不是其内容。在这种情况下我无视什么?任何帮助表示赞赏。我正在使用Laravel 5.4。*。
答案 0 :(得分:1)
编辑:最后,我有了真正的解决方案。
您需要将list以list开头添加到return语句,因为在替换指令后,blade会在storage / framework / views目录中创建一个php文件。所以你需要类似下面的内容。
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
注意:您应该在Providers目录中创建BladeServiceProvider,然后您应该将它添加到config / app.php中的提供程序。然后,您可以将指令添加到BladeServiceProvider。这不重要。这比你的方式更恰当。
答案 1 :(得分:0)
在制作自定义刀片后尝试此操作:
php artisan view:clear
。