Reputation: 30431
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';
Upvotes: 61
Views: 111066
Reputation: 111
Use match to handle both methods
Route::match(['GET','POST'], 'users', UserController@store);
Upvotes: 2
Reputation: 2595
In Routes
Route::match(array('GET','POST'),'/login', 'AuthController@getLogin');
In Controller
public function login(Request $request){
$input = $request->all();
if($input){
//Do with your post parameters
}
return view('login');
}
Upvotes: 2
Reputation: 36980
As per the latest docs, it should be
Route::match(['get', 'post'], '/', function () {
//
});
https://laravel.com/docs/routing
Upvotes: 8
Reputation: 569
See the below code.
Route::match(array('GET','POST'),'login', 'AuthController@login');
Upvotes: 56
Reputation: 8929
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()
{
//
}
}
Upvotes: 1
Reputation: 1454
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 ;)
Upvotes: 11
Reputation: 4512
Route::any('login', 'AuthController@login');
and in controller:
if (Request::isMethod('post'))
{
// ... this is POST method
}
if (Request::isMethod('get'))
{
// ... this is GET method
}
...
Upvotes: 23
Reputation: 10348
Route::match(array('GET', 'POST', 'PUT'), "/", array(
'uses' => 'Controller@index',
'as' => 'index'
));
Upvotes: 6
Reputation: 979
The docs say...
Route::match(array('GET', 'POST'), '/', function()
{
return 'Hello World';
});
source: http://laravel.com/docs/routing
Upvotes: 93
Reputation: 9007
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.
Upvotes: -2
Reputation: 29241
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
.
Upvotes: 39