帮助程序中的拉拉维尔访问刀片变量



我有一个公共变量$publisher共享给所有视图:

$view->with('publisher', $publisher);

示例:我想检查此发布者是否命名为"主要"并且状态为"活动",因此我必须在刀片中编写 if 语句,如下所示:

@if ($publisher->name == 'main' && $publisher->status == 'active')
    // Code here
@endif

它被复制到所有刀片文件,因此我在 app/Helpers/general.php 创建了一个自定义帮助程序文件,将其命名为 isMainPublisher($publisher)

function isMainPublisher($publisher) 
{
    return ($publisher->name == 'main' && $publisher->status == 'active') ? true: false;
}

边栏选项卡 if 语句将更改为:

@if (isMainPublisher($publisher))
    // Code here
@endif

我正在考虑将刀片代码缩短为:

@if (isMainPublisher())
    // Code here
@endif

但是app/Helpers/general.php不会$publisher访问刀片变量,是否有或实际上没有办法在助手中访问刀片变量?谢谢。

本质上,除了在帮助程序类的内部变量上设置发布者名称之外,isMainPublisher($publisher) 是您的最佳选择,并且它比其他选项更惯用。

为了让isMainPublisher()工作(可能(,你必须使用一个黑客的全局声明,即使这样,它也可能不起作用,因为它对类不可用。

或者,您可以将帮助程序作为方法添加到模型中:

<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Publisher extends Model
{
    // Your new helper method
    public function isMain()
    {
        // some logic to determine if the publisher is main
        return ($this->name == "main" || $this->name == "blah"); 
    }
}

。然后像这样称呼它:

$publisher->isMain();

在我看来,这是更好的选择,因为它读起来就像你说的那样。

我希望这有帮助!

最新更新