帮助者

时间:2018-04-20 04:16:24

标签: laravel laravel-5.4 blade

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

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

示例:我想检查此发布者是否命名为“main”并且状态为“active”,因此我必须在刀片中编写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;
}

blade if语句将更改为:

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

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

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

但是app/Helpers/general.php无法访问刀片变量$publisher,无论如何还是实际上无法访问帮助器中的刀片变量?感谢。

1 个答案:

答案 0 :(得分:3)

基本上,如果没有在辅助类的内部变量上设置发布者名称,isMainPublisher($publisher)是您的最佳选择,而且它的方式比其他选项更加惯用。

为了让isMainPublisher()工作(可能),你必须使用一个hacky全局声明,即使这样,也可能无法正常工作,因为它不可用于类

ALTERNATIVELY ,您可以将辅助工具添加到模型中作为方法:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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();

在我看来,这是一个优越的选择,因为它就像你说的那样。

我希望这有帮助!