Laravel Blade指令是一个空字符串

时间:2015-12-09 18:14:24

标签: php laravel

我这样做是否正确?在我的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

2 个答案:

答案 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目录中。

您可以在任何刀片模板中调用助手中的任何功能。