Помощники пользовательского вида Laravel перестают работать при использовании пространства имен

Я следовал некоторым учебникам, чтобы создать некоторые глобальные вспомогательные функции для использования в блейд-представлениях.

Я создал файл ViewHelpers.php в папке App \ Helpers. Этот файл содержит следующий код:

<?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 в разделе «провайдеры»:

'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.

Я использую Laravel 5.

3

Решение

Ты получишь Class 'ViewHelpers' not found потому что нет ViewHelpers, есть App\Helpers\ViewHelpers и вам нужно указать пространство имен (даже в поле зрения).

Вы можете зарегистрировать псевдоним в config/app.php который позволит вам использовать VH::something():

'aliases' => [
// in the end just add:
'VH' => 'App\Helpers\ViewHelpers'
],

Если ваше пространство имен правильное, вам даже не нужно использовать провайдеров — класс будет загружен Laravel.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]