Laravel 在助手中访问 blade 变量

Laravel access blade variable in helper

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

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

示例:我想检查此发布者名为 'main' 并且状态为 'active',因此我必须在 blade 中编写 if 语句,如下所示:

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

所有 blade 文件都复制了它,因此我在 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

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

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

但是app/Helpers/general.php不会访问blade变量$publisher,有没有办法或者实际上没有办法访问helper中的blade变量?谢谢。

本质上,如果不在助手 class 的内部变量上设置发布者名称,isMainPublisher($publisher) 是您的最佳选择,而且它比其他选项更惯用。

为了让 isMainPublisher() 工作(可能),你将不得不使用一个 hacky 全局声明,即使那样,它也可能无法工作,因为它对 class

替代方法,您可以将助手作为方法添加到模型中:

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

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

希望对您有所帮助!