2015-09-07 3 views
1

Поэтому я хочу, чтобы добавить псевдоним для пользовательских классов для того, чтобы иметь возможность использовать их в лезвии:Laravel пользовательских классов добавить псевдоним

<?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, но он все еще не работает.

BTW: Является ли добавление пользовательских классов таким образом жизнеспособным способом реализации логики для конкретного сайта, например, для извлечения и обработки данных из базы данных или есть лучший подход?

Edit 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 

, но она по-прежнему не работает.

Edit 2

Добавляя что-то вроде

exit(); 

или

echo "blabla"; 

внутри register(), ничего не меняется. Означает ли это, что PageContentProvider даже не загружается?

Редактировать 3

Поскольку стандартный AppServiceProvider загружается, я удалил запись coresponding из AppServiceProvider в config/app.php ... и он все еще работает! Как-то мои изменения не применяются. У кого-нибудь есть решение для этого?

ответ

1

Проблема не в коде вообще : Поняв, что изменения в config/app.php не получить применяется, простой

php artisan config:clear 

фиксируется буквально каждый вопрос я представил в моем вопросе.

0

Попробуйте, если это работает:

В контроллере:

$whateveryour_variable = Requirement::Test(); 
return view('yourview',compact('whateveryour_variable')); 

В вашем Вид:

{{$whateveryour_variable}} 

Вы могли бы принести данные в вашей БД затем сохранить его в переменной затем передайте это, на ваш взгляд.

+0

Я бы предпочел не делать этого, так как я должен был бы следить о том, какие данные должны быть отправлены с видом – VGD

0

Вы пробовали косую черту?

{{ \Requirement::Test() }} 

EDIT: грамматика

+0

я сделал, не работает - не было бы для меня решением, так как я не хочу никакого префикса, просто Requirement::Test() VGD

0

Что вы ищете является фасады.

Вы создаете класс Façade, который содержит ссылку на связывание вашего класса в контейнере службы, и это то, что вы используете в aliases массиве в вашем конфигурации/app.php файла.

Документация: http://laravel.com/docs/5.1/facades

+0

Я попробую, спасибо, но не должен ли он работать с простым классом? Просто интересно ... – VGD

+0

не работает, см. Редактировать 1 – VGD

+0

маленькая заметка: когда я помещаю что-то вроде exit() или echo «blabla» в register() провайдера, ничего не происходит - похоже, что провайдер не загружается. – VGD

0

Добавить в файл композитора:

"autoload": { 
    //... 
    "files" : ["app/classes/Requirement.php"] 
}, 

Затем добавить в свой псевдоним, как вы написали в вашей конфигурации/app.php

Тогда вы будете иметь возможность использовать в ваших шаблонах:

{{ Requirement::test() }} 
+0

Я сделал то, что вы предлагали, не работал - я дополнительно выполнил dump-autoload, но проблема остается: Class 'Requirement' не найден. – VGD

+0

Также с псевдонимом? Я тестировал с laravel 5.1, и он работает. Попробуйте создать файл в каталоге приложения, назовите его чем-нибудь, напишите в нем простой метод: function helloWorld() {echo 'hello'}. Добавьте в свой массив файлов автозагрузки, затем 'composer dump-autoload', вызовите helloWorld() где угодно - чтобы проверить, является ли загрузка файлов самой проблемой. – Iamzozo

+0

Также попробуйте с помощью 'app/Classes/Requirement.php', это может быть чувствительным к случаям, если вы используете linux/unix – Iamzozo

0

Поскольку вы упомянули, что вам нужен класс в Клинке:

Вместо настраивания псевдонима, вы можете использовать функцию лезвия @inject в верхней части файла лезвие.

@inject('your_class','App\Helpers\SomeNamespace\Yourclass') 

Затем в шаблоне лезвия:

{{$your_class->doSomething()}} 
Смежные вопросы