【问题标题】:How does @include work in laravel?@include 如何在 laravel 中工作?
【发布时间】:2016-11-30 18:16:23
【问题描述】:

我正在尝试在 laravel 中编写自定义指令。但是,它仅将我的刀片部分的路径作为字符串返回,而不是像 @include 那样的实际 html。

@customInclude('authenticated/partials/header2') 


    Blade::directive('customInclude', function($partial){
        if(Config::get('constants.ORG_ID') === 'organizationId'){
            return "<?php echo $partial; ?>";
        }
    });

我希望自定义指令返回在路径 'authenticated/partials/header2' 中找到的 html,但是,刀片似乎无法识别该路径是我的 php.ini 中的路径。我的自定义指令位于 AppServiceProvider.php 文件中。有谁知道@include 的工作原理非常好,所以他们可以解释为什么我的路径没有被识别。

【问题讨论】:

  • 提示。 $partial 的值为 authenticated/partials/header2。当你echo authenticated/partials/header2; 时会发生什么?
  • @ceejayoz 页面非常棒。返回语法错误,意外的 'authenticated' (T_STRING),期待 ',' 或 ';'
  • 正确,因为您已经在生成的编译 Blade 模板中生成了&lt;?php echo authenticated/partials/header2; ?&gt;。这不是有效的 PHP,即使您通过在其周围添加 's 使其有效,它也只会回显模板文件的路径。你需要让你的自定义指令 do 一些东西。
  • @ceejayoz 啊该死的。我需要做这样的事情吗stackoverflow.com/questions/16891398/…
  • 您可能可能能够做到这一点,我猜? return Blade::compile("@include('$partial')"); 可能得到你想要的,即使它相当不雅。如果您深入了解 @include 指令的工作原理,我怀疑还有更多 Laravel 方法。

标签: php laravel


【解决方案1】:

很酷的问题,它需要一些挖掘,但你可以很容易地复制 laravel 所做的事情:

Blade::directive('customInclude', function($partial){
    if(Config::get('constants.ORG_ID') === 'organizationId'){
        return "<?php echo view($partial); ?>";
    }
});

【讨论】:

  • 我在 ec6488ec73fd89a9fcb067be4180e524 第 0 行收到此错误 FatalErrorException:方法 Illuminate\View\View::__toString() 在尝试执行上述操作时不得抛出异常。
  • 听起来你的部分可能有错误?尝试一个简化的刀片开始 - 比如一个只有“hello world”的 foo.blade.php。还可以使用 php artisan view:clear 清除您的视图缓存
  • 啊,看来你是对的。但是,现在的问题是模板无法识别我刚刚执行常规@include 时使用的变量。我阅读了另一篇文章,并加入了 echo view($partial)->render();我现在得到一个未定义的变量错误。
  • 您可以按照您在控制器中调用的普通 view() 方法调用 view($partial) 方法,包括传入数据作为第二个参数。如果您只想传递所有内容,请致电view($partial, get_defined_vars())
  • 好吧,当我传入 get_defined_vars() 时,我现在在 Chrome 中收到一个页面不工作错误,在 Firefox 中收到一个连接重置错误。我相信我有太多的变数。当我将特定变量传递给 view() 方法时,我得到与变量未定义相同的错误。
【解决方案2】:

感谢克里斯的回答。这是正确的。但是,如果您想将特定变量传递给您的视图。执行以下操作

    Blade::directive('customInclude', function($partial){
        if(Config::get('constants.ORG_ID') === 'organizationId'){
            return "<?php echo view($partial,compact('variable1','variable2','variable3')); ?>";
        }
    });

通过 compact() 包含变量的整个过程让我失望。

【讨论】:

  • 不用担心。正如我在评论中提到的,您只需按照普通视图方法传递变量。 Compact 不是必需的,但它是一个不错的捷径。
猜你喜欢
  • 2018-02-12
  • 2016-06-13
  • 2014-02-23
  • 2011-07-20
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
相关资源
最近更新 更多