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';
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;)
Les docs disent ...
Route::match(array('GET', 'POST'), '/', function()
{
return 'Hello World';
});
source: http://laravel.com/docs/routing
Voir le code ci-dessous.
Route::match(array('GET','POST'),'login', 'AuthController@login');
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
.
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
}
...
Route::match(array('GET', 'POST', 'PUT'), "/", array(
'uses' => 'Controller@index',
'as' => 'index'
));
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()
{
//
}
}
Selon les derniers documents, il devrait être
Route::match(['get', 'post'], '/', function () {
//
});
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.