Laravel 如何使用刀片模板中的类?

Laravel 如何使用刀片模板中的类?,laravel,laravel-5,Laravel,Laravel 5,我已经用路径App\Http\Helpers\创建了类Helper: <?php namespace App\Http\Helpers; class Helper { public static function applyClass($user) { return "new"; } } 当我试图从blade调用静态方法时: <tr class="{{ \Helper::applyClass($user) }}"> <tr cla

我已经用路径
App\Http\Helpers\
创建了类
Helper

<?php

namespace App\Http\Helpers;

class Helper 
{
    public static function applyClass($user) {
        return "new";
    }

}
当我试图从blade调用静态方法时:

<tr class="{{ \Helper::applyClass($user) }}">
<tr class="{{ Helper::applyClass($user) }}">

这不是立面的工作方式。扩展
illighted\Support\Facades\facade
需要自定义facade,这基本上只需要自定义facade实现
受保护的静态函数getFacadeAccessor()
。此方法应返回应该由facade解析的名称(或类或接口)

facade允许您以静态方式调用实例方法(即非静态方法)。这是因为facades知道如何将对静态方法的调用重定向到facade后面的实例。这是通过实现
\u callStatic($method,$args)
来实现的,它只是将静态方法调用重定向到
getFacadeAccessor()返回名称的实现

假设您在服务容器中注册了一个名为
helper
的服务。然后可以使用
app('helper')->getColor()
app()->make('helper')->getColor()
对其执行方法
getColor()

使用名为
Helper
的外观,通过从
getFacadeAccessor()
方法返回字符串来解析
Helper
,然后可以使用
Helper::getColor()
执行相同的操作


在您的情况下,您现在有几个选项:

1)使用带有静态方法的类:

与您已经做的类似,您可以使用静态方法定义一个类。然后使用完全限定类名(FQCN)从刀片视图静态调用这些方法:

我希望代码能说明问题。文件的名称空间是故意省略的,当然您应该根据目录使用名称空间(符合PSR-4)


如果您不需要任何依赖项,并且基本上只需要静态访问某些内容,我个人更喜欢全局帮助(选项3)。

您可以通过以下步骤直接实现这一点

步骤1

在所需路径中创建类文件(例如:
app/Helpers/Helper.php
)并定义类


try
composer dump autoload
查看调用静态方法时不需要刀片式服务注入。我尝试了:
composer dump autoload
没有结果对不起,我花了一点时间写下了所有内容。:)这就是答案,很好的解释,应该蒙着眼睛接受。我错过了一次双重投票。
<tr class="{{ \Helper::applyClass($user) }}">
<tr class="{{ Helper::applyClass($user) }}">
Class 'Helper' not found
// app/Helpers/Helper.php
class Helper
{
    public static function getColor(): string
    {
        return 'blue';
    }
}

// resources/views/some/page.blade.php
<div style="color:{{ \App\Helpers\Helper::getColor() }}"> ... </div>
// app/Helpers/Helper.php
class Helper
{
    public function getColor(): string
    {
        return 'blue';
    }
}

// app/Facades/Helper.php
class Helper extends \Illuminate\Support\Facades\Facade
{
    public function getFacadeAccessor()
    {
        return \App\Helpers\Helper::class;
    }
}

// config/app.php -> 'aliases' array
[
    // ... other facades ...
    'Helper' => \App\Facades\Helper::class,
]

// resources/views/some/page.blade.php
<div style="color:{{ \Helper::getColor() }}"> ... </div>
// app/Helpers/color_utils.php
if (!function_exists('get_color')) {
    function get_color()
    {
        return 'blue';
    }
}

// app/Providers/HelperServiceProvider.php
class HelperServiceProvider extends \Illuminate\Support\ServiceProvider
{
    public function register(): void
    {
        $filenames = glob(app_path('Helpers/*.php'));

        if ($filenames !== false && is_iterable($filenames)) {
            foreach ($filenames as $filename) {
                require_once $filename;
            }
        }
    }
}

// config/app.php -> 'providers' array
[
    // ... other providers ...
    \App\Providers\HelperServiceProvider::class,
]

// resources/views/some/page.blade.php
<div style="color:{{ get_color() }}"> ... </div>
// app/Helpers/Helper.php
class Helper
{
    public static function getColor(): string
    {
        return 'blue';
    }
}

// resources/views/some/page.blade.php
@inject('helper', \App\Helpers\Helper::class)

<div style="color:{{ $helper->getColor() }}"> ... </div>
composer dump-autoload
<tr class="{{ Helper::applyClass("user") }}">