web-dev-qa-db-fra.com

Comment router GET et POST pour le même motif dans Laravel?

Est-ce que quelqu'un connaît quelque chose dans Laravel 4 qui combine ces 2 lignes en une seule?

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

Ainsi, au lieu d'avoir à écrire les deux, vous n'avez qu'à en écrire un car ils utilisent tous les deux la même méthode, mais l'URL reste aussi site.com/login au lieu d'une redirection vers site.com/auth/login?

Je suis curieux car je me souviens que CI a quelque chose comme ça où l'URL reste la même et le contrôleur n'est jamais affiché:

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

Vous pouvez essayer ce qui suit:

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

Ensuite, dans votre AuthController class implémentez ces méthodes:

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

Ça devrait marcher;)

7
Mithredate

Les docs disent ...

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

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

58
OrtegaGuillermo

Voir le code ci-dessous.

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

Vous pouvez combiner tous les verbes HTTP pour un itinéraire en utilisant:

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

Cela correspondra aux verbes HTTP GET et POST. Et il correspondra également pour PUT, PATCH & DELETE.

24
Rubens Mariuzzo
Route::any('login', 'AuthController@login');

et dans le contrôleur:

if (Request::isMethod('post'))
{
// ... this is POST method
}
if (Request::isMethod('get'))
{
// ... this is GET method
}
...
12
Sid
Route::match(array('GET', 'POST', 'PUT'), "/", array(
    'uses' => 'Controller@index',
    'as' => 'index'
));
4
Igor Parra

Dans laravel 5.1 cela peut être réalisé par les contrôleurs implicites. Voir ce que j'ai trouvé dans la documentation laravel

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

Ensuite, ajoutez simplement des méthodes à votre contrôleur. Les noms de méthode doivent commencer par le verbe HTTP auquel ils répondent, suivi de la version de casse de titre de l'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
Amir

Selon les derniers documents, il devrait être

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

https://laravel.com/docs/routing

1
Rinto George

Bon, je réponds en utilisant mon mobile, et donc je n'ai pas testé cela (si je me souviens bien, ce n'est pas dans la documentation non plus). Voici:

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

Cela devrait faire l'affaire. Si ce n'est pas le cas, Taylor l'a fait retirer du noyau; ce qui signifierait alors que personne ne l'utilisait.

0
Mike Rockétt