У меня возникает проблема с пространством имен при попытке расширить фасад Response в Laraval 5. Я создал новое дерево папок под app
каталог называется Extensions\Facades
, В этой папке у меня есть файл с именем AjaxResponse.php
который имеет следующее содержание:
<?php namespace App\Extensions\Facades;
use Illuminate\Support\Facades\Response;
class AjaxResponse extends Response{
public static function send($code,$body,$http_code=200){
parent::json( array(
'status'=>(string)$code,
'body' =>$body
) )->setStatusCode($http_code)->send();
exit();
}
}
Я регистрирую это как поставщик услуг в config/app.php
как я понимаю, я должен:
providers=[
//..normal stuff
'App\Extensions\Facades\AjaxResponse',
]
И это вызывает обычную ошибку пространства имен для класса not found:
FatalErrorException in ProviderRepository.php line 150:
Class 'App\Extensions\Facades\AjaxResponse' not found
Кто-нибудь может пролить свет на то, почему класс не найден?
Зайдите в корневую папку проекта и в терминале наберите
composer dump-autoload
Все должно быть хорошо тогда. Когда вы создаете новую папку, композитор не знает об этом, поэтому он не может автоматически загружать из нее файлы, даже если они psr-4
Namespaced.
РЕДАКТИРОВАТЬ Также вам нужно объявить псевдоним для вашего фасада в config/app.php
под массивом псевдонимов, а не провайдерами один:
'AjaxResponse' => 'App\Extensions\Facades\AjaxResponse',
Других решений пока нет …