Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel Blade指令是一个空字符串_Php_Laravel - Fatal编程技术网

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指令实际上都需要括号。也许有人能想出更好的办法来处理这件事