我这样做是否正确?在我的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 . "'; ?>";
});
}
然后在刀片模板中我有这个:
@carousel(6)
然后生成的是:
<?php echo ''; ?>
我也试过这个:
public function boot(){
Blade::directive('carousel', function($numberOfItems, $addoffset = null) {
return "<?php
for($i = 0; $i < (int)$numberOfItems; $i++){
echo '<div>';
if($i == $addoffset){
echo Ads::show('255x255');
}else{
echo '<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>';
}
echo '</div>';
}
?>";
});
}
然后我得到
Undefined variable: i
答案 0 :(得分:2)
它不起作用的原因是因为传递的参数是$.ajax
而不是字符串(6)
(注意:它包括括号)。如果您尝试将其转换为'6'
,则php会将其转换为int
,因此for循环永远不会实际循环。
你可以做的是:
0
这将删除第一个和最后一个字符(也就是括号)。
编辑:另外,作为一个补充说明,如果您查看Blade::directive('carousel', function($numberOfItems, $addoffset = null) {
$numberOfItems = substr($numberOfItems, 1, -1);
...
类,您可以看到Laravel经常使用这些代码:
BladeCompiler
答案 1 :(得分:1)
我不认为您可以通过这种方式调用刀片模板中的函数,也不能直接调用控制器或任何其他位置的函数。 您可以在刀片模板中调用所需的任何功能,但为此您需要创建一个helper.php文件,您可以在其中存储您的功能,并将其提供给您需要的任何地方。在composer.json
中注册帮助器"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Http/helpers.php"
]
},
假设您的helper.php文件位于app / Http目录中。
您可以在任何刀片模板中调用助手中的任何功能。