2015-07-04 5 views
1

Я пытаюсь исследовать встроенные формы проверки в Laravel 5, как описано здесь:Custom «Запрос» не найден

https://mattstauffer.co/blog/laravel-5.0-form-requests#2.-create-your-controller

Но я всегда получаю ошибку о том, что «MyRequest» класс не найден.

// My route 
Route::post('/contacts', ['as' => 'contacts-store', 'uses' => '[email protected]']); 

// My custom request 
namespace Demo\Http\Requests; 
use Demo\Http\Requests\Request; 

class ContactsRequest extends Request {} // now Laravel cannot find this class 

// My controller 
namespace Demo\Http\Controllers; 

use Illuminate\Http\Request; 

use Demo\Http\Requests; // namespace where I put my request to 
use Demo\Http\Controllers\Controller; 
use Demo\Http\Requests\ContactsRequest; // direct reference to the class 

class ContactsController extends Controller 
{ 
    public function store(ContactsRequest $request) // this line throws exception 
    { 
    } 
} 

Вопрос: Я добавил все необходимые пространства имен в верхней части моего контроллера, но Laravel до сих пор не может найти свой класс ContactsRequest, как это возможно?

Update: Я только что вспомнил, что я изменил глобальное имя моего приложения с php artisan app:name Demo, после этого некоторые файлы теряются, поэтому я выполнил php composer dump-autoload и ContactsController нашел мой ContactsRequest, но теперь я другой Exeption говоря, что родительский класс Request не найден ...

+0

Вы правильно объявили пространство имен в ContactRequest? Поместить класс в папку недостаточно, возможно, «пространство имен Demo \ Http \ Requests;» отсутствует в верхней части файла? –

+0

@ jerdzej.kurylo: да, мне нужно пространство имен в верхней части пространства имен Demo \ Http \ Requests', кроме того, я сгенерировал этот класс запросов с помощью 'php artisan make: request ContactsRequest', поэтому считаю, что он не должен содержать ошибок – Anonymous

ответ

1

Наконец, выяснилось. Когда я не был в состоянии найти класс ContactsRequest, потому что я переименовал мое заявление от App к Demo и это, кажется, общая проблема, которая описана здесь:

https://laracasts.com/discuss/channels/general-discussion/l5-class-appconsolekernel-not-found

Когда я сделал php composer dump-autoload, Laravel очищается некоторый кэш и ContactsRequest класс был найденный.

Но появилось другое исключение, говорящее, что сейчас класса Request не существует. На этот раз это была моя ошибка, потому что я действительно переместил ее в другое место.

Вывод:

  • при запуске php artisan app:name NewAppName убедитесь запустить php composer dump-autoload каждый раз, когда вы создаете новый класс
  • вторая ошибка была моя ошибка, поэтому мне нужно, чтобы проверить, что родительский класс имеет правильное пространство имен
  • не использовать php artisan app:name NewAppName, если он вам не нужен, поскольку это приводит к непредсказуемому поведению автозагрузки
+0

Спасибо большое! Я был очень потерян с этим. – Vincent

4

Если вы сгенерировали запрос правильно следующей командой

php artisan make:request ContactsRequest 

Дважды проверьте, что у вас есть файл с именем ContactsRequest.php под

app/Http/Requests 

Папка. Если у вас есть один под этой папке вы сможете использовать свой собственный ContactsRequest следующим способом:

public function somefunction(Requests\ContactsRequest $request) 

Также в вашем ContactsRequest файле вы должны установить значение массива в истинно вместо ложной. Я забыл имя этой функции и не могу проверить, как я пишу этот ответ с моего телефона.

+0

Я только что обновил свой вопрос, я смог решить проблему с отсутствующим классом ContactsRequest, но теперь Laravel не может найти класс запроса по умолчанию, любые предложения? – Anonymous

+0

Запрос не найден в вашем классе пользовательского запроса или в вашем контроллере? –

+0

он не найден в пользовательских контактах. Класс права – Anonymous

4

Для тех из вас, у кого возникли проблемы даже после выполнения вышеуказанных ответов, я нашел еще одну потенциальную причину этой ошибки.Ошибка неверна, для меня была ошибка синтаксического анализа: синтаксическая ошибка в моем запросе (отсутствующая запятая в массиве правил). Так что дважды проверьте файл на наличие ошибок!

Я обнаружил его после звонка, вытаскивая мои волосы и записывая: new MyCustomRequest() в пределах моего store() метода моего контроллера.

Смежные вопросы