How to route GET and POST for same pattern in Laravel?

旧巷老猫 提交于 2019-11-29 00:25:12

问题


Does anyone know of any way in Laravel 4 which combines these 2 lines into one?

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

So instead of having to write both you only have to write one since their both using the 'same' method but also the URL remains as site.com/login instead of a redirect to site.com/auth/login?

I'm curious since I remember CI has something like that where the URL remains the same and the controller is never shown:

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

回答1:


You could try the following:

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

Then in your AuthController class implement these methods:

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

It should work ;)




回答2:


The docs say...

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

source: http://laravel.com/docs/routing




回答3:


See the below code.

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



回答4:


You can combine all HTTP verbs for a route using:

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

This will match both GET and POST HTTP verbs. And it will also match for PUT, PATCH & DELETE.




回答5:


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

and in controller:

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



回答6:


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



回答7:


In laravel 5.1 this can be achieved by Implicit Controllers. see what I found from the laravel documentation

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

Next, just add methods to your controller. The method names should begin with the HTTP verb they respond to followed by the title case version of the 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()
    {
        //
    }
}



回答8:


As per the latest docs, it should be

Route::match(['get', 'post'], '/', function () {
    //
});

https://laravel.com/docs/routing




回答9:


Right, I'm answering using my mobile, and so I haven't tested this (if I remember correctly, it isn't in the documentation either). Here goes:

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

That should do the trick. If it doesn't, then Taylor had it removed from the core; which would then mean that nobody was using it.



来源:https://stackoverflow.com/questions/18326030/how-to-route-get-and-post-for-same-pattern-in-laravel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!