2015-05-25 2 views
1

Я получаю проблему с пространством имен при попытке расширить фасад Response в Laraval 5. Я создал новое дерево папок в каталоге app с именем Extensions\Facades. В этой папке у меня есть файл с именем AjaxResponse.php, который имеет следующее содержание:Extend Laravel 5 Response Facade

<?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', 
] 

И это метание нормальной ошибки пространства имен класса не найдено:

FatalErrorException in ProviderRepository.php line 150: 
Class 'App\Extensions\Facades\AjaxResponse' not found 

Может кто-нибудь пролить свет на то, почему класс не найден?

+0

Попробуйте с * использовать \ ILLUMINATE \ Support \ Фасады \ Response; * (обратите внимание на обратная косая черта в начале). Во всяком случае, ServiceProvider должен перезаписать метод регистрации, см. Фасады в документах Laravel. – marcanuy

+0

Ошибка связана с классом, который я создал не для класса, который я использовал. Я не думаю, что есть проблема с этим. Кроме того, ссылка «ProviderRepository.php» относится к включению моего нового класса в файл 'config \ app.php', я думаю, –

+0

ОК получил вас. Я ошибаюсь, чтобы попытаться загрузить расширение в качестве поставщика услуг. Имеет смысл. Мне просто нужно иметь возможность использовать этот класс. Не имеет значения, что я пытаюсь это все еще говорит мне, что класс не может быть найден! Проклятые пространства имен PHP, которые они всегда дают мне головную боль –

ответ

2

Перейти проецировать корневую папку и в терминале типа

composer dump-autoload 

Все должно быть хорошо тогда. Когда вы создаете новую папку, композитор не знает об этом, поэтому он не может автозагружать файлы из нее, даже если они имеют psr-4 имен.

EDIT Также вы должны объявить псевдоним для вашего фасада в config/app.php под алиасами массива, а не поставщики один:

'AjaxResponse' => 'App\Extensions\Facades\AjaxResponse', 
+0

Ницца, спасибо. Все еще получаю ошибку f, но это хороший материал. –

+1

Разбито это спасибо –