2013-08-20 89 views
23

有沒有人知道在Laravel 4中將這兩條線合併爲一個的任何方式?如何在Laravel中爲相同模式路由GET和POST?

Route::get('login', '[email protected]'); 
Route::post('login', '[email protected]'); 

因此而不必寫兩個你只需要編寫一個,因爲他們都使用「相同」的方法,但也是URL仍然是site.com/login,而不是重定向到site.com/auth/login

我很好奇,因爲我記得有CI類似的東西,其中的URL保持不變,控制器從未顯示:

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

回答

7

你可以嘗試以下方法:

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

然後在你的AuthController class實現這些方法:

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

它應該工作;)

+3

來自未來的提示:[隱式控制器在Laravel 5.2中已棄用,將來會被刪除](http://benjaminkohl.com/post/implicit-controller-routing-is-deprecated-in-laravel-5-2 )。 – jojonas

16

您可將所有HTTP動詞使用的路線:

Route::any('login', '[email protected]'); 

這將匹配GETPOST HTTP動詞。它也將匹配PUT,PATCH & DELETE

+0

如何檢查動詞是GET還是POST? – enchance

+0

你總是可以使用'$ _SERVER ['REQUEST_METHOD'] ==='POST',但我不會建議在一個動作中混合兩個邏輯......帶控制器的想法是**將邏輯**分開與Post-Redirect-Get模式一起使用。花2或3分鐘閱讀這個特定的線程:https://github.com/laravel/laravel/pull/1517。 –

+0

@enchance,你可以檢查是'GET'或'POST'有: '如果(支持:: isMethod( '後'))'' {'' // ...'' }' – Sid

0

對,我回答使用我的手機,所以我沒有測試過(如果我沒有記錯,它不在文檔中)。這裏去:

Route::match('(GET|POST)', 'login', 
    '[email protected]' 
); 

這應該做的伎倆。如果沒有,那麼泰勒將它從核心中移除;這意味着沒有人使用它。

3
Route::match(array('GET', 'POST', 'PUT'), "/", array(
    'uses' => '[email protected]', 
    'as' => 'index' 
)); 
35

文檔說...

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

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

+1

這個答案更精確。 –

+1

這應該是正確的答案。 – felipsmartins

+2

我很抱歉,這是如何得到這麼多upvotes?是的,它解釋瞭如何同時使用GET和POST,但沒有說明如何根據請求類型調用不同的方法。 – lennard

6
Route::any('login', '[email protected]'); 

和控制器:

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

這是一個更好的答案。謝謝 – kikuyu1

1

在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() 
    { 
     // 
    } 
} 
相關問題