我在Laravel中使用以下索引函数设置了资源控制器:

public function index()
{
    if (!Auth::check()) {
        return redirect()->route('login');
    }
    $decks = Auth::user()->decks->sortByDesc('name');
    return view('decks.index')->with('decks', $decks);
}


在另一个页面上,我还需要通过AJAX调用来$decks变量。现在,我已经建立了一条通往我的控制器的附加路由,通过GET请求,我可以从中检索甲板:

public function getDecks()
{
    if (!Auth::check()) {
        return;
    }
    $decks = Auth::user()->decks->sortByDesc('name');
    return response()->json($decks);
}


我的问题:是否可以通过直接向$decks的请求获取index变量,或者我的解决方案是可行的?

如果我请求获取索引索引,则会获取decks.index视图的HTML,但是如何访问(如果可能)$decks变量?

我想我不太了解的是:$decks语句中的->with('decks', $decks)会发生什么?我知道我可以在该页面上使用刀片语法访问$decks,但是它从哪里访问数据,我也可以通过AJAX访问它吗?

最佳答案

您不能直接从索引路由中检索$decks。当您调用view(..)->with(...)时,它将在内部传递给刀片模板处理器,该处理器也接收$decks变量,然后在服务器端构建HTML,然后将“已编译的” HTM1返回到浏览器。因此,一旦服务器返回结果,就不再存在$decks变量。由于这种行为,不可能做您想要的。

所以是的,您的解决方案是可行的方法,尽管您可能会考虑将Auth::check()包裹在middleware中,并将对$decks的调用移到一个单独的函数中以简化代码。

我希望这能回答您的问题,如果有任何不清楚的地方,请随时提出!

09-28 13:55