У меня возникла проблема с обработкой обновлений, обработанной в мои функциональные тесты по Codeception: у меня систематическая ошибка 404. Вот подробности.Laravel 5.2 Проблема функционального теста с коллаксией с запросами PUT/PATCH
Все идет хорошо для всех других имитируемых HTTP-запросов, но когда кодгенерация пытается выполнить метод обновления по HTTP-запросу put (запрос POST с параметром «_method», имеющим значение «PUT»), никогда не выполняется моим контроллером , которые приводят к созданию кода на URL-адресе обновления без перенаправления, который должен произойти после обработки в этом методе обновления. Я попытался перенаправить на свою домашнюю страницу поверх моего метода обновления, чтобы проверить этот факт, и перенаправление никогда не произойдет.
Для информации, я использую модуль Laravel5. Вот мое содержание functional.suite.yml файла:
class_name: FunctionalTester
modules:
enabled:
- Asserts
- \Helper\Functional
- MailCatcher
- Laravel5:
environment_file: .env.testing
config:
MailCatcher:
url: 'http://192.168.10.10'
port: '1080'
Я попытался заменить «PUT» значение «_method» парам по «заплатки», чтобы увидеть, если какие-либо изменения можно увидеть, но проблема сохраняется и поведение по-прежнему остается прежним.
Codeception включает приложение Laravel5 для его проверки. Единственный ключ, который у меня есть, заключается в том, что тестовая среда имеет проблему для интерпретации запроса PUT или PATCH. Для простого запроса POST нет проблем (создание не вызывает никаких проблем).
Я точно знаю, что форма HTML правильная, обновление происходит правильно в моей локальной среде, а http-запрос содержит правильные параметры. Вот что у меня есть, когда я исполню ее в с --debug вариант:
[Uri] http://project/en/permissions/update
[Method] POST
[Parameters] {"_token":"RUx7DjU3b6GEjodnpwXvJJYJIcmQJGbabj23q0yK","_method":"PATCH","_id":"1","name_en":"Administrator","name_fr":"Administrateur","slug":"admin"}
[Page] http://project/en/permissions/update
[Response] 200
[Request Cookies] {"XSRF-TOKEN":"eyJpdiI6InZQV2NVcTRoZHVONXYzZzNLTnBWU1E9PSIsInZhbHVlIjoiWWhWa0kyUGxJNkJRTXIyaEhVcDdHR0tRcklHZStpVWdlTjlDdmRKVmEyVDFPWkxBVmhLc1lra05zeWh1ZWtKMENCc29lWFZTN2lSd3dIbjZyNEo5eWc9PSIsIm1hYyI6ImEzMDNmOWM5OGQzNzE4ZWI5MDg0MTI0ZmQwMTI1ZTk0OTM1OTY4NjA5ZTZjMGFhYTI0MTdlMzMzM2QyMWQ4MzUifQ==","laravel_session":"eyJpdiI6ImF4cVFYYVNUU3J0WUd2VzNRZlhSc3c9PSIsInZhbHVlIjoibDdPd3ZEZVZOdDJwRlBjMVZtc2dNM0I3WUw0REEzK25NVFVWT1FIRjEzR05tRGZLXC9SYUZkRmhEdXlyQVdybURHTWVQVUtucnBkZEwwaTN4NWF6XC9YQT09IiwibWFjIjoiMzliODY4ZWUwYmZjODI1OTVkMTBiYjA4ODY2OWNiODc3ZTI1NzAzZmJhMjg4OTY4Y2MzM2VkMjYyYTkwOTQ2MyJ9"}
[Response Headers] {"cache-control":["no-cache"],"Set-Cookie":[{},{}]}
Как вы можете видеть, в конце процесса на 200 ответ, и это все .. Я проверил это с несколькими страницами и проблема везде одинакова.
Я заблокирован этой проблемой уже несколько недель, не найдя решения. Если у кого-то есть ключ, я слушаю!.
EDIT 1: 26/01/2015
Как уже было предложено мне, вот мой файл маршрутов.
Как вы можете видеть, я использую LaravelLocalization, это многоязычное приложение.
Я только показываю вам маршруты разрешений, но все они управляются таким образом.
Route::group([
'prefix' => LaravelLocalization::setLocale(),
'middleware' => [
'auth',
'localize',
'localeSessionRedirect',
'localizationRedirect',
]], function() {
// permissions
Route::get(LaravelLocalization::transRoute('routes.permissions.index'), ['as' => 'permissions.index', 'uses' => 'User\[email protected]']);
Route::get(LaravelLocalization::transRoute('routes.permissions.create'), ['as' => 'permissions.create', 'uses' => 'User\[email protected]']);
Route::post(LaravelLocalization::transRoute('routes.permissions.store'), ['as' => 'permissions.store', 'uses' => 'User\[email protected]']);
Route::get(LaravelLocalization::transRoute('routes.permissions.edit'), ['as' => 'permissions.edit', 'uses' => 'User\[email protected]']);
Route::put(LaravelLocalization::transRoute('routes.permissions.update'), ['as' => 'permissions.update', 'uses' => 'User\[email protected]']);
Route::delete(LaravelLocalization::transRoute('routes.permissions.destroy'), ['as' => 'permissions.destroy', 'uses' => 'User\[email protected]']);
});
EDIT 2: 29/01/2015
После решения Lerzenit объяснил here, я попытался поместить следующий код в файл тестов/_bootstrap.php:
Request::enableHttpMethodParameterOverride();
Это не имело никакого эффекта, у меня все еще есть ответ 200, и метод обновления моего контроллера никогда не достигается.
Я проверил, был ли параметр $httpMethodParameterOverride
отправлен в true
сразу после выполнения метода и может проверить, что успешно установлено значение true
.
Я все еще ищу решение.
EDIT 3: 05/02/2015
У меня есть ключ на пути к расследованию: мне удалось выполнить обновление на лицо под названием «Район», и это только один в моем проекте иметь один и тот же маршрут на английском и французском языках. Как я указывал ранее, я использую плагин LaravelLocalization
, и перевод маршрутов может быть причиной плохой интерпретации параметра _method
с значением PUT
, который должен перенаправляться к методу обновления моего контроллера.
Я был бы признателен, если бы кто-нибудь мог мне помочь в этом.
Показать файл маршрутов – mcklayin
Здравствуйте, @mcklayin, я отредактировал мое сообщение выше, чтобы показать файл маршрутов. – Okipa