Я следовал некоторым учебникам, чтобы создать некоторые глобальные вспомогательные функции для использования в блейд-представлениях.
Я создал файл 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.
Ты получишь Class 'ViewHelpers' not found
потому что нет ViewHelpers
, есть App\Helpers\ViewHelpers
и вам нужно указать пространство имен (даже в поле зрения).
Вы можете зарегистрировать псевдоним в config/app.php
который позволит вам использовать VH::something()
:
'aliases' => [
// in the end just add:
'VH' => 'App\Helpers\ViewHelpers'
],
Если ваше пространство имен правильное, вам даже не нужно использовать провайдеров — класс будет загружен Laravel.
Других решений пока нет …