Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 31.05.2015 12:33:30

Ошибка при вызове

Всем привет, недавно начал изучать laravel 4.2, и мне этот фреймворк с каждый днём нравится всё больше и больше (без сарказма). Дошёл до момента отправки - проверки формы, всё получилось разобрался, но у меня есть один вопрос на который я не нашёл ответ в мануале да и гугле. Если честно я даже не знаю как его назвать, в общем читайте:
есть два роута:
Route::get('/Contacts', 'ContactsController@showContact');
Route::post('/Contacts/send', 'ContactsController@sendContact');
Первый как понятно показывает страницу контакты с формой обратной связи.
Второй принимает данные методом POST и проверяет их.
Так вот работает всё отлично, но если вызвать (прописать путь в строке браузера) на прямую POST роут /Contacts/send, то получаем ошибку:
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
Я понимаю что фреймворк мне как бы говорит что я вызываю пост роут без пост данных формы.
Так вот вопрос как от этого защитится? как запретить вызывать этот роут на прямую, чтобы он редиректил на /Contacts.

Не в сети

#2 31.05.2015 13:37:08

Artdevue
Откуда: Kiev
Сообщений: 119
Сайт

Re: Ошибка при вызове

если отключите 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.

Не в сети

#3 31.05.2015 14:18:08

Re: Ошибка при вызове

Спасибо за ответ, не любитель копипастить, постараюсь разобраться в этом коде.

Не в сети

Подвал раздела