0

我想在 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在我可以做到这一点的地方或某处类似上面的东西?

4

2 回答 2

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();
   }

});
于 2013-11-03T18:46:39.090 回答
0

这将起作用(Laravel 4)

App::after(function($request, $response)
{
    //
});

或者

在任何版本中重命名操作并在控制器类中实现魔术方法__call 。例如路由到“IndexController@ index ”动作:

索引控制器.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 ...
}
于 2016-05-17T07:26:37.063 回答