Как маршрут GET и POST для того же шаблона в Laravel?

кто-нибудь знает какой-либо способ в Laravel 4, который объединяет эти 2 строки в одну?

Route::get('login', 'AuthController@getLogin');
Route::post('login', 'AuthController@postLogin');

поэтому вместо того, чтобы писать оба, вам нужно написать только один, так как оба они используют "тот же" метод, но также URL-адрес остается как site.com/login вместо перенаправления к site.com/auth/login?

мне любопытно, так как я помню, что у CI есть что-то вроде этого, где URL остается тем же самым, и контроллер никогда не отображается:

$route['(method1|method2)'] = 'controller/';

8 ответов


вы можете попробовать следующее:

Route::controller('login','AuthController');

затем в AuthController class реализуйте следующие методы:

public function getIndex();
public function postIndex();

Он должен работать ;)


документы говорят...

Route::match(array('GET', 'POST'), '/', function()
{
    return 'Hello World';
});

источник:http://laravel.com/docs/routing


вы можете объединить все HTTP-глаголы для маршрута, используя:

Route::any('login', 'AuthController@login');

это будет соответствовать как GET и POST http-команд. И он также будет соответствовать для PUT, PATCH & DELETE.


ниже код.

Route::match(array('GET','POST'),'login', 'AuthController@login');

Route::any('login', 'AuthController@login');

и в контроллер:

if (Request::isMethod('post'))
{
// ... this is POST method
}
if (Request::isMethod('get'))
{
// ... this is GET method
}
...

Route::match(array('GET', 'POST', 'PUT'), "/", array(
    'uses' => 'Controller@index',
    'as' => 'index'
));

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

Route::controller('users', 'UserController');

далее, просто добавьте методы к контроллеру. Имена методов должны начинаться с HTTP-глагола, на который они отвечают, а затем с версии URI заголовка:

<?php

namespace App\Http\Controllers;

class UserController extends Controller
{
    /**
     * Responds to requests to GET /users
     */
    public function getIndex()
    {
        //
    }

    /**
     * Responds to requests to GET /users/show/1
     */
    public function getShow($id)
    {
        //
    }

    /**
     * Responds to requests to GET /users/admin-profile
     */
    public function getAdminProfile()
    {
        //
    }

    /**
     * Responds to requests to POST /users/profile
     */
    public function postProfile()
    {
        //
    }
}

правильно, я отвечаю с помощью мобильного телефона, и поэтому я не тестировал это (если я правильно помню, этого нет в документации). Вот:

Route::match('(GET|POST)', 'login',
    'AuthController@login'
);

это должно сделать трюк. Если это не так, то Тейлор удалил его из ядра; что означало бы, что никто не использовал его.