Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет, недавно начал изучать laravel 4.2, и мне этот фреймворк с каждый днём нравится всё больше и больше (без сарказма). Дошёл до момента отправки - проверки формы, всё получилось разобрался, но у меня есть один вопрос на который я не нашёл ответ в мануале да и гугле. Если честно я даже не знаю как его назвать, в общем читайте:
есть два роута:
Route::get('/Contacts', 'ContactsController@showContact');
Route::post('/Contacts/send', 'ContactsController@sendContact');
Первый как понятно показывает страницу контакты с формой обратной связи.
Второй принимает данные методом POST и проверяет их.
Так вот работает всё отлично, но если вызвать (прописать путь в строке браузера) на прямую POST роут /Contacts/send, то получаем ошибку:
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
Я понимаю что фреймворк мне как бы говорит что я вызываю пост роут без пост данных формы.
Так вот вопрос как от этого защитится? как запретить вызывать этот роут на прямую, чтобы он редиректил на /Contacts.
Не в сети
если отключите debug - то вам будет выводиться страница о ошибки.
как запретить вызывать этот роут на прямую, чтобы он редиректил на /Contacts
В вашем случае я бы сделал так
один роутер
Route::match(array('GET', 'POST'), 'contacts', array(
'as' => 'contacts',
'uses' => 'ContactsController@matchContact'
));
ну и в самом контролере, что-то типа
<?php
class ContactsController extends BaseController
{
public function __construct()
{
parent::__construct();
// если POST, то для класса matchContact устанавливаем CSRF, если отправка формы происходит
if (Request::isMethod('post'))
{
$this->beforeFilter('csrf', array('on' => 'matchContact'));
}
}
public function matchContact()
{
// если POST - то ...
if (Request::isMethod('post'))
{
// обработка POST запроса, если ошибки, возращаем ошибки, если валидация и сохранение успешное, то или редиректим на странцу нужную, или выставляем сообщение о удачной отправки
}
// код выполняемы без POST или после POST, в зависимости от кода выше
}
}
If you think it’s expensive to hire a professional to do the job, wait until you hire an amateur.
Не в сети
Спасибо за ответ, не любитель копипастить, постараюсь разобраться в этом коде.
Не в сети
Страницы 1