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
)并定义类
trycomposer 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") }}">