【问题标题】:Return a view with Laravel Octane Route使用 Laravel Octane Route 返回视图
【发布时间】:2021-04-26 21:07:08
【问题描述】:

我正在尝试在 routes/web.php 文件中使用 Octane 路由和 Laravel。

use Laravel\Octane\Facades\Octane;
use Symfony\Component\HttpFoundation\Response;

Octane::route('GET', '/url', function(){
   return new Response('hello world');
});

上面的代码可以工作,但是我怎样才能返回一个带有数据的视图。我尝试了很多东西,但没有任何效果。是否可以使用 Octane 返回像 Route 外观这样的视图?

感谢您的帮助!

【问题讨论】:

  • return view(...)有什么问题吗?
  • 是的,我在主页上有一个 404,我尝试使用另一个 URL 并出现此错误:TypeError: Laravel\Octane\Octane::invokeRoute(): Return value must be of type Symfony\ Component\HttpFoundation\Response 所以无法返回视图 :( 我尝试返回 Response::view(),但不起作用。
  • 那么我建议将RedirectResponse 返回到另一个可以发送视图的路由。 (说清楚,我不知道 Octane 是什么,只是根据我的 Laravel 经验提出建议。)

标签: php laravel


【解决方案1】:

Laravel 在后台有很多神奇的功能,可以将从控制器返回的视图转换为响应对象。更具体地说,响应对象是 Illuminate\Http\Response 的一个实例,它扩展自 Symfony 响应类。

要自己利用这个魔法,您可以直接调用它:

// Using the Router class
return Illuminate\Routing\Router::toResponse($request, $response);

// or using the facade (which points to the router class)
return Route::toResponse($request, $response);

这是一个 Octane 的具体示例:

Octane::route('GET', '/url', function($request) {
    return Route::toResponse($request, view('...'));
});

采用这种方法可以让您返回通常能够从传统路由返回的任何内容(数组、模型、字符串、重定向等)。

但是,如果您想要特定于视图的内容,这也可以:

use Illuminate\Http\Response;

Octane::route('GET', '/url', function() {
    return new Response(view('...'));
});

Laravel 的 Response 类知道如何将可渲染对象(视图是其实例)转换为字符串。

完整的 Symfony 特定实现如下所示:

use Symfony\Component\HttpFoundation\Response;

Octane::route('GET', '/url', function() {
    return new Response(view('...')->render());
});

重申一下,所有这些选项都可以。使用您最熟悉的解决方案。

【讨论】:

  • 非常感谢泰勒!你知道是否可以使用控制器而不是 Octane::route() 的闭包; ?
猜你喜欢
  • 1970-01-01
  • 2016-09-11
  • 2016-05-16
  • 2022-06-15
  • 2021-06-19
  • 2019-05-21
  • 2013-10-13
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多