我已经按照一些教程创建了一些全局助手函数,以便在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);
}
}
}
我已将其添加到“providers”部分的config\app.php中:
'App\Providers\HelperServiceProvider',
现在我在刀片视图中调用我的助手:
{{ViewHelpers::bah()}}
现在它工作得很好。
但如果我将viewhelper名称空间更改为:
<?php namespace App\Helpers;
class ViewHelpers {
// omitted for brevity
我的观点因
Class 'ViewHelpers' not found
而失败。如何使视图看到viewhelpers类,即使它位于不同的命名空间中?在哪里添加
use App\Helpers
?另一个相关的问题-我可以为viewhelpers类创建一个别名,使其在我的视图中看起来像
VH:bah()
吗?如果可能的话,我更愿意用简单的方式来做(没有正面和其他什么),因为这些只是静态的助手,不需要类实例和ioc。
我用的是拉维5。
最佳答案
您将得到Class 'ViewHelpers' not found
,因为没有ViewHelpers
,有App\Helpers\ViewHelpers
,您需要指定名称空间(即使在视图中)。
您可以在config/app.php
中注册别名,这将允许您使用VH::something()
:
'aliases' => [
// in the end just add:
'VH' => 'App\Helpers\ViewHelpers'
],
如果您的名称空间是正确的,您甚至不必使用providers-class将由laravel加载。