我正在Laravel 4中编写api。我想将查询字符串参数传递给我的控制器。具体来说,我想允许这样的事情:
api/v1/account?fields=email,acct_type
其中查询参数传递给路由控制器方法,该方法具有如下签名:
public function index($cols)
routes.php中的路由如下所示:
Route::get('account', 'AccountApiController@index');
我手动指定我的所有路线是为了清晰和灵活(而不是使用Route::controller
或Route::resource
),我总是路由到控制器和方法。
我创建了一个(全局)辅助函数,将'fields'查询字符串元素隔离到一个数组$cols
中,但是在每个控制器的每个方法中调用该函数都不是DRY。如何有效地将$cols
变量传递给我的所有Route::get
路由'控制器方法?或者,更一般地说,如何通过路径(或路由组)将一个或多个额外参数从查询字符串有效传递到控制器方法?我正在考虑使用过滤器,但这看起来有点偏离标签。
答案 0 :(得分:4)
您可能希望在BaseController中实现此功能。这是可能的解决方案之一:
class BaseController extends Controller {
protected $fields;
public function __construct(){
if (Input::has('fields')) {
$this->fields = Input::get('fields');
}
}
}
之后,可以在每个BaseController子路径中访问$ fields:
class AccountApiController extends \BaseController {
public function index()
{
dd($this->fields);
}
}