Laravel 如果使用命名空间,自定义视图助手将停止工作
Laravel custom view helpers stop working if using namespace
我按照一些教程创建了一些全局辅助函数以在 blade 视图中使用。
我在 App\Helpers 文件夹中创建了 ViewHelpers.php 文件。该文件包含以下代码:
<?php
class ViewHelpers {
public static function bah()
{
echo 'blah';
}
}
这是加载我的助手的服务提供商(目前只有一个文件):
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class HelperServiceProvider extends ServiceProvider {
public function register()
{
foreach (glob(app_path().'/Helpers/*.php') as $filename){
echo $filename; // for debugging - yes, I see it is getting called
require_once($filename);
}
}
}
我已将其添加到 config\app.php 的 'providers' 部分:
'App\Providers\HelperServiceProvider',
现在我在 blade 视图中调用助手:
{{ViewHelpers::bah()}}
目前它工作正常。
但是如果我将我的 ViewHelper 命名空间更改为:
<?php namespace App\Helpers;
class ViewHelpers {
// omitted for brevity
我的观点因 Class 'ViewHelpers' not found
而失败。
如何让我的视图看到 ViewHelpers class,即使它在不同的命名空间中?我在哪里添加 use App\Helpers
?
另一个相关问题 - 我可以为 ViewHelpers class 创建一个别名,让它看起来像我的视图中的 VH:bah()
吗?
如果可能的话(没有 Facades 什么的)我更愿意以简单的方式来做,因为这些只是静态助手,不需要 class 实例和 IoC。
我正在使用 Laravel 5。
你会得到Class 'ViewHelpers' not found
,因为没有ViewHelpers
,有App\Helpers\ViewHelpers
,你需要指定命名空间(即使在视图中)。
您可以在 config/app.php
中注册别名,这样您就可以使用 VH::something()
:
'aliases' => [
// in the end just add:
'VH' => 'App\Helpers\ViewHelpers'
],
如果您的命名空间正确,您甚至不必使用提供程序 - class 将由 Laravel 加载。
我按照一些教程创建了一些全局辅助函数以在 blade 视图中使用。
我在 App\Helpers 文件夹中创建了 ViewHelpers.php 文件。该文件包含以下代码:
<?php
class ViewHelpers {
public static function bah()
{
echo 'blah';
}
}
这是加载我的助手的服务提供商(目前只有一个文件):
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class HelperServiceProvider extends ServiceProvider {
public function register()
{
foreach (glob(app_path().'/Helpers/*.php') as $filename){
echo $filename; // for debugging - yes, I see it is getting called
require_once($filename);
}
}
}
我已将其添加到 config\app.php 的 'providers' 部分:
'App\Providers\HelperServiceProvider',
现在我在 blade 视图中调用助手:
{{ViewHelpers::bah()}}
目前它工作正常。
但是如果我将我的 ViewHelper 命名空间更改为:
<?php namespace App\Helpers;
class ViewHelpers {
// omitted for brevity
我的观点因 Class 'ViewHelpers' not found
而失败。
如何让我的视图看到 ViewHelpers class,即使它在不同的命名空间中?我在哪里添加 use App\Helpers
?
另一个相关问题 - 我可以为 ViewHelpers class 创建一个别名,让它看起来像我的视图中的 VH:bah()
吗?
如果可能的话(没有 Facades 什么的)我更愿意以简单的方式来做,因为这些只是静态助手,不需要 class 实例和 IoC。
我正在使用 Laravel 5。
你会得到Class 'ViewHelpers' not found
,因为没有ViewHelpers
,有App\Helpers\ViewHelpers
,你需要指定命名空间(即使在视图中)。
您可以在 config/app.php
中注册别名,这样您就可以使用 VH::something()
:
'aliases' => [
// in the end just add:
'VH' => 'App\Helpers\ViewHelpers'
],
如果您的命名空间正确,您甚至不必使用提供程序 - class 将由 Laravel 加载。