【问题标题】:Is there a "beforeOutput" type hook in Laravel?Laravel 中是否有“beforeOutput”类型的钩子?
【发布时间】:2014-06-19 04:22:32
【问题描述】:

我正在用 laravel 构建一个应用程序,当访问管理区域时,如果通过 Ajax 访问,它应该能够返回 JSON,如果不是,它应该能够返回 HTML。

目前,我的所有功能中都有如下内容。是否有某种钩子可以用来确定请求是否应该返回 JSON 或 HTML,所以我不必在每个方法中都这样做?

// if it's accessed via ajax or set the "Accepts:" header to json
        if( Request::ajax() || Request::wantsJson() )
            return Response::json( $inspiration );

        return View::make("admin.inspirations.show")->with("inspiration", $inspiration);

【问题讨论】:

  • 您可以将此作为过滤器添加到您的管理路由中。

标签: php json laravel laravel-4 hook


【解决方案1】:

您不必在每个方法中都这样做,您可以在 Base Controller 上创建灵活的方法:

class BaseController extends Controller {

    protected function makeResult($view, $data, $withs = null)
    {
        if( Request::ajax() || Request::wantsJson() )
            return Response::json( $data );

        $view = View::make("admin.inspirations.show")->with('data', $data);

        if ($withs)
        {
            foreach ($withs as $key => $value)
            {
                $view->with($key, $value);
            }
        }

        return $view;
    }

}

然后你就可以在你的控制器中返回:

return $this->makeResult("admin.inspirations.show", $inspiration);

如果您需要向视图发送更多数据:

return $this->makeResult("admin.inspirations.show", $inspiration, ["name" => $user->name]);

【讨论】:

  • 很遗憾,控制器中没有选项可以覆盖某些方法来处理他们的调用。这个解决方案让你重写所有现有的方法。
【解决方案2】:

使用 laravel,您可以使用 Filters 连接到路由(之前和之后)。您可能需要重新考虑您的“验证”逻辑,但我认为这是最好的方法。

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多