Php Laravel Blade指令是一个空字符串
我这样做对吗?在我的Php Laravel Blade指令是一个空字符串,php,laravel,Php,Laravel,我这样做对吗?在我的AppServiceProvider课程中,我有以下内容: public function boot(){ Blade::directive('carousel', function($numberOfItems, $addoffset = null) { $str = ''; for($i = 0; $i < (int)$numberOfItems; $i++){ $str .= '<div>
AppServiceProvider
课程中,我有以下内容:
public function boot(){
Blade::directive('carousel', function($numberOfItems, $addoffset = null) {
$str = '';
for($i = 0; $i < (int)$numberOfItems; $i++){
$str .= '<div>';
if($i == $addoffset){
$str .= Ads::show('255x255');
}else{
$str .= '<a href="" class="promo-255x255" style="background:url(http://clipartzebra.com/images/2/game-images/game-images-0' . ($i + 1) . '.jpg) center;background-size:cover;"></a>';
}
$str .= '</div>';
}
return "<?php echo '" . $str . "'; ?>";
});
}
然后生成的是:
<?php echo ''; ?>
我不认为您可以用这种方式调用刀片模板中的函数,也不能直接调用控制器或任何其他位置中的函数。 您可以在blade模板中调用所需的任何函数,但为此,您需要创建一个helper.php文件,在其中存储您的函数,然后将其提供给您需要的任何地方。在composer.json中注册帮助程序
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Http/helpers.php"
]
},
这假设您的helper.php文件位于app/Http目录中
您可以在任何刀片模板中调用助手中的任何函数。我认为您不能以这种方式调用刀片模板中的函数,也不能直接调用控制器或任何其他位置中的函数。 您可以在blade模板中调用所需的任何函数,但为此,您需要创建一个helper.php文件,在其中存储您的函数,然后将其提供给您需要的任何地方。在composer.json中注册帮助程序
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Http/helpers.php"
]
},
这假设您的helper.php文件位于app/Http目录中
您不能在任何刀片模板中调用助手中的任何函数。该函数不起作用的原因是,传递的参数是
(6)
,而不是字符串'6'
(注意:它包括括号)。如果您尝试将其转换为int
,php会将其转换为0
,因此for循环实际上不会循环任何内容
你能做的是:
Blade::directive('carousel', function($numberOfItems, $addoffset = null) {
$numberOfItems = substr($numberOfItems, 1, -1);
...
这将删除第一个和最后一个字符(即括号)
编辑:另外,作为补充说明,如果您查看BladeCompiler
类内部,您会发现Laravel经常使用这些代码:
if (Str::startsWith($expression, '(')) {
$expression = substr($expression, 1, -1);
}
它不起作用的原因是,传递的参数是
(6)
,而不是字符串'6'
(注意:它包括括号)。如果您尝试将其转换为int
,php会将其转换为0
,因此for循环实际上不会循环任何内容
你能做的是:
Blade::directive('carousel', function($numberOfItems, $addoffset = null) {
$numberOfItems = substr($numberOfItems, 1, -1);
...
这将删除第一个和最后一个字符(即括号)
编辑:另外,作为补充说明,如果您查看BladeCompiler
类内部,您会发现Laravel经常使用这些代码:
if (Str::startsWith($expression, '(')) {
$expression = substr($expression, 1, -1);
}
您确定在测试更改之前删除了已编译的刀片文件吗?是的,我已删除了缓存文件代码>就在返回语句给您之前?另外,我认为应该是
return”“代码>(不带单引号)。您确定在测试更改之前删除了已编译的刀片文件吗?是的,我已删除了缓存文件。什么是dd($str)代码>就在返回语句给您之前?另外,我认为应该是return”“代码>(不带单引号)。助手函数是实现这一点的一种方法,但绝对有可能以OP尝试的方式实现。当然是这样,我同意你的看法。我给了他一个简单的解决办法。谢谢你给我指出这一点。助手函数是实现这一点的一种方法,但绝对有可能以OP尝试的方式实现。当然是这样,我同意你的看法。我给了他一个简单的解决办法。谢谢你把这个指向我。我刚刚注意到了。这是一个bug,不是吗?啊,好吧,把(6)
作为参数传递似乎有点傻。。。我认为它会将每个参数作为自己的参数从blade传递出去,我不会说这是一个bug,因为大多数blade指令实际上都需要括号。也许有人能想出更好的办法来处理这件事我刚才注意到了。这是一个bug,不是吗?啊,好吧,把(6)
作为参数传递似乎有点傻。。。我认为它会将每个参数作为自己的参数从blade传递出去,我不会说这是一个bug,因为大多数blade指令实际上都需要括号。也许有人能想出更好的办法来处理这件事