在Laravel 4中调用控制器

Tho*_*ton 38 laravel laravel-4

在Laravel 3中,您可以使用Controller :: call方法调用控制器,如下所示:

Controller::call('api.items@index', $params);

我查看了L4中的Controller类,发现这个方法似乎取代了旧方法:callAction().虽然它不是静态方法,但我无法使其工作.可能不是正确的方法吗?

我怎么能在Laravel 4中这样做?

Net*_*eto 90

嘿,你们可以使用IoC ......

试试这个

App::make($controller)->{$action}();
Run Code Online (Sandbox Code Playgroud)

例如:App :: make('HomeController') - > getIndex();

你也可以提供参数

App::make('HomeController')->getIndex($params);
Run Code Online (Sandbox Code Playgroud)

  • 在这种方法中,不会调用过滤器 (11认同)
  • 这取决于你需要什么.对于你有一个类似`/ {slug}`的路由并且它可能是产品或页面的情况,你想要调用一个函数来检查数据库中的slug然后调用相应的控制器. (2认同)

Lau*_*kel 50

如果我理解正确,那么您正在尝试构建以API为中心的应用程序,并希望在Web应用程序内部访问API,以避免发出额外的HTTP请求(例如,使用cURL).那是对的吗?

您可以执行以下操作:

$request = Request::create('api/items', 'GET', $params);
return Route::dispatch($request)->getContent();
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要指定控制器@方法目标,而是需要使用通常用于从外部访问API的uri路由.

更好的是,您现在可以指定请求应响应的HTTP谓词.


dan*_*i24 10

像Neto说你可以用户:

App::make('HomeController')->getIndex($params);
Run Code Online (Sandbox Code Playgroud)

但是要发送带有额外数据的POST,你可以使用"merge"方法:

$input = array('extra_field1' => 'value1', 'extra_field2' => 'value2');
Input::merge($input);

return App:make('HomeController')->someMethodInController();
Run Code Online (Sandbox Code Playgroud)

这个对我有用!

再见