如何在Laravel中为相同的模式路由GET和POST?

时间:2013-08-20 02:22:12

标签: php laravel laravel-routing

有没有人知道Laravel 4中将这两行合二为一的方式?

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

因此,您不必同时编写两个,因为他们都使用“相同”方法,但网址仍然是site.com/login,而不是重定向到site.com/auth/login

我很好奇,因为我记得CI有类似的东西,其中URL保持不变,控制器永远不会显示:

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

10 个答案:

答案 0 :(得分:52)

文档说......

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

来源:http://laravel.com/docs/routing

答案 1 :(得分:27)

请参阅以下代码。

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

答案 2 :(得分:23)

您可以使用以下方法组合路线的所有HTTP谓词:

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

这将匹配GETPOST HTTP谓词。它也会匹配PUTPATCH& DELETE

答案 3 :(得分:12)

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

并在控制器中:

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

答案 4 :(得分:7)

您可以尝试以下方法:

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

然后在AuthController class中实施这些方法:

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

它应该工作;)

答案 5 :(得分:4)

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

答案 6 :(得分:1)

在laravel 5.1中,这可以通过Implicit Controllers实现。 看看我从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()
    {
        //
    }
}

答案 7 :(得分:1)

在路线中

apple

在控制器中

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

答案 8 :(得分:0)

是的,我正在回答使用我的手机,所以我没有测试过这个(如果我没记错的话,它也不在文档中)。这是:

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

这应该可以解决问题。如果没有,那么泰勒将其从核心中移除;这意味着没有人在使用它。

答案 9 :(得分:0)

根据最新文档,应该为

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

https://laravel.com/docs/routing