使用URL在Controller中调用函数

时间:2014-04-05 17:14:21

标签: php laravel laravel-4

我来自CodeIgniter。

如果您有这样的控制器:

class Article extends CI_Controller{

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

您可以使用以下网址访问comments()功能:example.com/Article/comments

<小时/> 我怎么能在Laravel做类似的事情?
我现在这样做的方式是指定这样的路线:

Route::get('/Article/comments}', 'ArticleController@comments');

但是我希望有一种更有活力的方式去做,因为我不想继续为每个功能创建新的路线

2 个答案:

答案 0 :(得分:3)

对于Laravel用户,通过URL动态调用控制器方法的推荐方法是通过RESTful控制器:

<?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}', 'ArticleController@execute');

然后你必须

http://laravel.dev/Article/comments

答案 1 :(得分:1)

我建议您坚持使用laravel的方式创建REST controllers,因为这样您就可以控制使用控制器方法调用HTTP Verb的内容。如果您想在Laravel中指定HTTP Verb请求方法的名称,那么执行此操作的方法只是在控制器方法前面添加comments,方法GET看起来像getComments

例如,如果您需要对GET URI执行article/comments请求,然后创建新评论,则要使用与另一个HTTP动词相同的URI,让我们说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');