【问题标题】:Laravel4 get section array in Controller/Router layer from a Blade templateLaravel4 从 Blade 模板获取 Controller/Router 层中的部分数组
【发布时间】:2013-11-24 14:09:20
【问题描述】:

我需要你的帮助。

我刚刚发现 \Illuminate\View\Environment 类有一个受保护的数组 $sections 和一个获取它的方法 getSections() 但它返回一个空数组。

这是我尝试获取它的方法:

$view = View::make('pages');
$env = $view->getEnvironment();
$env->make('pages');

print($env->getSections());

结果是Array( )

我哪里做错了?任何建议将不胜感激。

【问题讨论】:

    标签: php arrays laravel-4 blade


    【解决方案1】:

    这是因为当您调用$env->make('pages') 时,视图不会立即得到处理。它仅在 $view 对象上的 render 方法被调用时处理,当您通过 __toString() 方法将其作为响应返回时自动完成。问题在于,在页面被渲染之后,仍然在render 方法中,$sections variable is cleared,使用flushSections 方法。所以你实际上永远无法访问它。

    如果在创建视图之前调用incrementRender 方法,然后创建和渲染视图,获取部分,最后是decrementRender()flushSections(),你可以尝试欺骗它,但这可能会带来意想不到的结果。像这样的:

    // Fool it
    $env->incrementRender();
    $env->make('pages')->render();
    
    $sections = $env->getSections();
    
    // Clear it
    $env->decrementRender();
    $env->flushSections();
    

    【讨论】:

    • 我爱你,伙计。我假设 flushSections() 是“问题”,但不知道如何避免它。太感谢了。祝你有美好的一天。
    • 不客气,=D。顺便说一句,访问$env 对象可能有比创建视图并从视图中获取对象更好的方法。类似$app['env'],也许,
    • 不知道,但我确信从视图访问部分很有用,所以我创建了一个拉取请求github.com/laravel/framework/pull/2710
    • 可能是这样。祝你 PR 好运。
    猜你喜欢
    • 2022-12-04
    • 2014-01-18
    • 2015-12-04
    • 2017-08-01
    • 1970-01-01
    • 2021-02-12
    • 2017-03-26
    • 2011-07-18
    • 2013-09-10
    相关资源
    最近更新 更多