2015-05-31 168 views
3

我有這個路由這是偉大的工作:Laravel路由愁楚

Route::get('/', '[email protected]'); 
Route::get('about', '[email protected]'); 
Route::get('contact', '[email protected]'); 
Route::get('signUp', '[email protected]'); 

MainController.php正確的功能得到預期調用。

當我遇到麻煩的是在得到以下工作:

我有一個新的文件名爲APIController.php。所有請求http://eamorr.com/api/getUsers應該由getUsers()處理APIController.php

我嘗試這樣做:

Route::get('api', '[email protected]'); //this works fine... 
Route::any('api/{$function}', function($function){ //but this won't work! 
    return redirect()->route('api/'.$function); 
}); 

我不想列出每一樣功能:

Route::get('api/addUser', '[email protected]'); 
Route::get('api/getUser', '[email protected]'); 
Route::get('api/getAllUsers', '[email protected]'); 
... 

我寧願如果/api/*請求一下就指向APIController ...

如果有人有任何提示,這將是非常棒的...

我只昨天開始學習Laravel,所以請放輕鬆點!

+0

我相信你需要從路由模式中省略'$'。 http://laravel.com/docs/5.0/routing#route-parameters –

+0

@GerardvanHelden是的,你是正確的 - 一個容易犯的錯誤,爲一個新人。但它仍然不起作用。我認爲'return redirect() - > route('api /'。$ function);'不正確。而我無法弄清楚我應該返回什麼...... – Eamorr

+0

請問爲什麼你不想列出每個功能?在我看來,將所有可能的路由明確地集中在一個地方是laravel路由的優點之一.. –

回答

1

你可以這樣調用控制器動作:

Route::any('/api/{action}', function($action) 
{ 
    // this will call the method from the controller class and return it's response 
    return app()->make('App\Http\Controllers\ApiController')->callAction($action, []); 
}); 

不過我建議你看看Implicit Controllers如@shaddy在他的回答表明,因爲如addUser行動將需要限制HTTP動詞POST,這你不能用這種方法正確地做。


而且,因爲從你的路線路徑它看起來像你建立一個API,你可能要考慮使用RESTful Resource Controllers

+0

謝謝。非常好的答案。有用於瞭解HTTP動詞。 – Eamorr

+0

不客氣。我還更新了我的答案,並提供了可能適用於您的方案的其他建議。 – Bogdan

+0

謝謝。是的,我快速瀏覽了RESTful資源控制器。我只打算使用GET和POST動詞,並且希望保持這種甜美和簡單。雖然我很樂意糾正(並歡迎它!),爲什麼這樣做並不是一個好主意。 – Eamorr

0

你有Route::controller方法,將您的類綁定的內隱控制器:

Route::controller('api', 'APIContoller'); 

這將宣佈新Implict Controller它會自動映射所有呼叫與請求類型爲前綴的控制器方法。

所以,如果你做的請求/api/users,這將觸發方法APIController。如果你這樣做POST請求/api/users就會觸發postUsers法等

你可以閱讀更多有關documentation隱控制器。

+0

感謝您與文檔的鏈接。不幸的是,當我把Route :: controller('api','APIController');'放到routes.php中時,出現一個錯誤頁面'抱歉,找不到你正在尋找的頁面。 (RouteFollection.php第145行中的NotFoundHttpException)'... – Eamorr

+0

@Eamorr你試圖訪問什麼網址?在名爲'public function getUsers'的APIController中創建一個簡單的方法,然後嘗試打開'/ api/users'。 – shaddy

+0

我有一個公共函數'getUsers()'在類'APIController extends Controller'中。 'getUsers()'返回:'return「getUsers」;'我想我在這裏做一些愚蠢的事情? – Eamorr