Как проложить маршрут ПОЛУЧЕНИЯ и отправки по одному и тому же шаблону в 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/$1';
Author: tereško, 2013-08-20

8 answers

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

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

Затем в вашем AuthController class реализуйте эти методы:

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

Это должно сработать;)

 7
Author: Mithredate, 2015-09-14 21:29:01

В документах говорится...

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

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

 41
Author: OrtegaGuillermo, 2014-04-23 05:28:13

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

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

Это будет соответствовать как GET, так и POST глаголам HTTP. И это также будет соответствовать PUT, PATCH & DELETE.

 21
Author: Rubens Mariuzzo, 2013-08-20 02:42:55

Смотрите приведенный ниже код.

Route::match(array('GET','POST'),'login', 'AuthController@login');
 16
Author: webnology, 2016-05-17 12:44:02
Route::any('login', 'AuthController@login');

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

if (Request::isMethod('post'))
{
// ... this is POST method
}
if (Request::isMethod('get'))
{
// ... this is GET method
}
...
 8
Author: Sid, 2014-12-22 23:59:51
Route::match(array('GET', 'POST', 'PUT'), "/", array(
    'uses' => 'Controller@index',
    'as' => 'index'
));
 3
Author: Igor Parra, 2014-07-11 17:45:01

В 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()
    {
        //
    }
}
 1
Author: Amir, 2015-11-08 19:41:09

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

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

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

 0
Author: Mike Rockétt, 2013-08-20 05:42:50