Как проложить маршрут ПОЛУЧЕНИЯ и отправки по одному и тому же шаблону в Laravel?
Кто-нибудь знает какой-нибудь способ в Laravel 4, который объединяет эти 2 строки в одну?
Route::get('login', 'AuthController@getLogin');
Route::post('login', 'AuthController@postLogin');
Таким образом, вместо того, чтобы писать оба, вам нужно написать только один, так как оба они используют "один и тот же" метод, но также URL-адрес остается как site.com/login
вместо перенаправления на site.com/auth/login
?
Мне любопытно, так как я помню, что в CI есть что-то подобное, где URL-адрес остается прежним, а контроллер никогда не отображается:
$route['(method1|method2)'] = 'controller/$1';
8 answers
Вы можете попробовать следующее:
Route::controller('login','AuthController');
Затем в вашем AuthController class
реализуйте эти методы:
public function getIndex();
public function postIndex();
Это должно сработать;)
В документах говорится...
Route::match(array('GET', 'POST'), '/', function()
{
return 'Hello World';
});
Источник: http://laravel.com/docs/routing
Вы можете объединить все HTTP-глаголы для маршрута, используя:
Route::any('login', 'AuthController@login');
Это будет соответствовать как GET
, так и POST
глаголам HTTP. И это также будет соответствовать PUT
, PATCH
& DELETE
.
Смотрите приведенный ниже код.
Route::match(array('GET','POST'),'login', 'AuthController@login');
Route::any('login', 'AuthController@login');
И в контроллере:
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'
));
В laravel 5.1 это может быть достигнуто с помощью неявных контроллеров. посмотрите, что я нашел в документации 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()
{
//
}
}
Верно, я отвечаю с помощью своего мобильного телефона, и поэтому я не проверял это (если я правильно помню, этого тоже нет в документации). Вот так:
Route::match('(GET|POST)', 'login',
'AuthController@login'
);
Это должно сработать. Если это не так, то Тейлор удалил его из ядра; что тогда означало бы, что им никто не пользовался.