2014-04-05 50 views
0

從CodeIgniter進行調用。控制器中使用URL的調用函數

那裏,如果你有這樣的控制器:

class Article extends CI_Controller{ 

    public function comments() 
    { 
     echo 'Look at this!'; 
    } 
} 

您可以訪問comments()功能使用這樣的網址:example.com/Article/comments


我怎麼能這樣做在Laravel類似的東西?
我現在就做的方式是specifiying這樣的路線:

Route::get('/Article/comments}', '[email protected]'); 

,但我希望一個更加動態的方式做到這一點,因爲我不希望繼續創造每一個新途徑功能

回答

3

的動態調用通過URL控制器方法,Laravel用戶推薦的方式,是通過REST風格的控制器:

<?php 

class ArticleController extends controller { 

    public function getComment() 
    { 
     return 'This is only accesible via GET method'; 
    } 

    public function postComment() 
    { 
     return 'This is only accesible via POST method'; 
    } 

} 

並採用告訴Laravel這是一個RESTful控制器創建您的路線:

Route::controller('articles', 'ArticlesController'); 

然後,如果你遵循

http://laravel.dev/articles/comments 

使用瀏覽器,你應該得到:

This is only accesible via GET method 

你的名字你的控制器方法的方式(getComment,postComment,deleteComment ...)告訴Laravel應該使用HTTP方法來調用這些方法。

檢查文檔:http://laravel.com/docs/controllers#restful-controllers

但你也可以把它動態使用PHP:

class ArticlesController extends Controller { 

    public function comments() 
    { 
     return 'Look at this!'; 
    } 

    public function execute($method) 
    { 
     return $this->{$method}(); 
    } 

} 

使用控制器像這樣的:

Route::get('Article/{method}', '[email protected]'); 

然後你只需要

http://laravel.dev/Article/comments 
+0

真棒,不知道你能做到這一點在PHP! – Krimson

+0

也不會在'$ this - > {$ method}();之前加上'return'。返回視圖? – Krimson

+0

是的,當然,我忘了添加它。 :)編輯。 –

1

我建議你堅持用laravel創建REST controllers的方式,因爲這樣可以控制使用控制器方法調用HTTP Verb的方式。這樣做的簡單方法就是在控制器方法前添加HTTP Verb,如果您想在Laravel中指定GET請求,則方法comments方法的名稱看起來像getComments

例如,如果你需要做的article/comments URI一個GET請求,然後創建要使用相同的URI與另一HTTP動詞新的評論,可以說POST,你只需要像做這樣的:

class ArticleController extends BaseController{ 

    // GET: article/comments 
    public function getComments() 
    { 
     echo 'Look at this!'; 
    } 

    // POST: article/comments 
    public function postComments() 
    { 
     // Do Something 
    } 
} 

延伸閱讀: http://laravel.com/docs/controllers#restful-controllers

現在爲您具體的答案,這是做的Laravel方式,你要求什麼:

class ArticleController extends BaseController{ 

    public function getComments() 
    { 
     echo 'Look at this!'; 
    } 
} 

,並在routes.php文件,您需要添加如下控制器:

Route::controller('articles', 'ArticleController'); 
+0

你說得對。我只是顛倒了我的答案(它仍然存在)的順序,將RESTful Controller設置爲推薦的方式。 –

+0

感謝您的洞察!我要堅持這種方法 – Krimson

相關問題