我想在Laravel中自动设置GET请求的视图。在BaseController
构造函数中,我执行此操作:
if (Request::server('REQUEST_METHOD') === 'GET')
{
$action = explode('@', Route::currentRouteAction());
$view = explode('get', $action[1]);
$view = strtolower(end($view));
$controller = strtolower(explode('Controller', $action[0])[0]);
$this->data['view'] = $controller . '.' . $view;
}
所以基本上如果我们发出/some/page
请求,它会查找名为views/some/page.blade.php
的视图文件。
目前,我使用$this->data
设置了一些数据和其他属性。所以我在每个方法中发送视图之前构建我的数据:
$this->layout->with($this->data);
我最终在每个GET
方法中进行了上述调用,并希望自动执行此操作。使用$this->data
的问题是我无法访问任何过滤器或其他闭包。是否有一个魔术方法或全局数据存储,我没有使用,我可以在每个请求结束时调用,只是抽出布局?
function afterEveryThing()
{
$this->layout->with($this->data);
}
像BaseController
中的上述内容或我能做到的地方?
答案 0 :(得分:1)
在这里从臀部拍摄,但你可以做下面的路由。完全按照所示使用这是一个坏主意,但可能是你想要做的事情的起点。
Route::any('{controller}/{method}', function($controller, $method) {
$controllerName = ucfirst($controller) . "Controller";
$controllerObject = new $controllerName;
if (Request::server('REQUEST_METHOD') === 'GET')
{
$controllerObject->$method();
return View::make("$controller.$method")->with('data', $controllerObject->data);
}
else
{
return $controllerObject->$method();
}
});
答案 1 :(得分:0)
这将有效(Laravel 4)
App::after(function($request, $response)
{
//
});
或
在任何版本中重命名操作并在控制器类中实现魔术方法 __ call 。例如,路由到“IndexController @ 索引”操作:
IndexController.php
private function __call($method, $args) {
... look for a view...
if (in_array('my_'.$method, self::$methods)) {
//call to index translated to my_index
call_user_func_array(array($this,'my_'.$method), $args);
} else {
//error no action
abort(404);
}
... after every thing ...
}
public function my_index(Request $request) {
... do action ...
}