Поэтому я хочу добавить псевдоним для пользовательских классов, чтобы иметь возможность использовать их в blade-файле:
<?php
namespace App\Classes;
class Requirement
{
public static function Test()
{
return "hello";
}
}
В config/app.php
Я добавил псевдоним так:
...
'Requirement' => App\Classes\Requirement::class
Затем я хотел бы иметь возможность вызвать его в шаблоне лезвия, как
{{ Requirement::Test() }}
Но псевдоним как-то не работает. Я тоже пробовал composer dump-autoload
, но это все еще не работает.
КСТАТИ: Является ли добавление пользовательских классов подобным образом жизнеспособным способом реализации логики, специфичной для сайта, такой как получение и обработка данных из базы данных, или есть лучший подход?
Редактировать 1
я создал Requirement.php
в app/Facades
со следующим содержанием
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Requirement extends Facade{
protected static function getFacadeAccessor() { return 'Requirement'; }
}
добавленной PageContentProvider.php
в app/Providers
со следующим содержанием
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class PageContentProvider extends ServiceProvider
{
/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind('Requirement', function($app){
return new \App\Classes\Requirement();
});
}
}
И в config/app.php
псевдоним
'Requirement'=>App\Facades\Requirement::class
а также провайдер
App\Providers\PageContentProvider::class
но это все еще не работает.
Редактировать 2
Добавив что-то вроде
exit();
или же
echo "blabla";
внутри register()
ничего не меняется. Означает ли это, что PageContentProvider
даже не загружается?
Редактировать 3
Так как стандарт AppServiceProvider
загружается, я удалил основную запись AppServiceProvider
в config/app.php
… и это все еще работает! Почему-то мои изменения не применяются. У кого-нибудь есть решение для этого?
Проблема была не в коде вообще:
После осознания того, что изменения в config/app.php
не применяется, простой
php artisan config:clear
исправлены буквально все проблемы, которые я представил в своем вопросе.
Добавьте в свой файл композитора:
"autoload": {
//...
"files" : ["app/classes/Requirement.php"]
},
Затем добавьте к своему псевдониму, как вы написали в своем config / app.php
Тогда вы сможете использовать в своих шаблонах:
{{ Requirement::test() }}
Попробуйте это, если это работает:
В вашем контроллере:
$whateveryour_variable = Requirement::Test();
return view('yourview',compact('whateveryour_variable'));
По вашему мнению:
{{$whateveryour_variable}}
Вы можете получить данные в вашей базе данных, затем сохранить их в переменной, а затем передать их на ваш взгляд.
Ты пробовал с косой чертой?
{{ \Requirement::Test() }}
РЕДАКТИРОВАТЬ: грамматика
То, что вы ищете, это Фасады.
Вы создаете класс Façade, который содержит ссылку на привязку вашего класса в контейнере службы, и это то, что вы используете в aliases
массив в вашем конфиг / app.php файл.
Документация: http://laravel.com/docs/5.1/facades
Так как вы упомянули, что вам нужен класс в Blade:
Вместо установки псевдонима, вы можете использовать лезвие @inject
функция в верхней части вашего блейд-файла.
@inject('your_class','App\Helpers\SomeNamespace\Yourclass')
Тогда в шаблоне лезвия:
{{$your_class->doSomething()}}