了解拉拉维尔:请解释"->with('i', ($request->input('page', 1) - 1) * 5); "



请原谅我问了一个可能是初学者的问题。只是我真的在网上搜索却没有找到答案!SOF似乎是我疯狂之前的最后选择。

我的问题是,我根本无法理解这行代码的作用:

->with('i', ($request->input('page', 1) - 1) * 5);

它位于我的Controller索引(request$request(方法中。

整体看起来是这样的:

public function index(Request $request)
{
$books = Book::indexBooks()->paginate(20);
return view('bookCRUD.index', compact('books'))
->with('i', ($request->input('page', 1) - 1) * 5);
}

另一位用户写了这篇文章,但我无法理解。

该代码将获得所有产品的前5名,按产品id降序排列。然后将产品数据传递到ProductCRUD目录中名为index.blade.php的视图中。你可以在你的项目/资源/视图中找到那个目录。它还闪烁一个名为i的会话变量(在视图中,您可以使用$i访问该变量(,如果存在,则该变量具有名为page的表单输入/查询字符串的值。否则,$request->input('page',1(=1。根据该变量的使用情况,$i将充当网格上每个页面的起始行号。

如果能得到建设性的答案,我将是最高兴的!

with()方法用于向视图发送数据。

文档使其更加清晰:

将数据传递到视图

正如您在前面的示例中看到的,您可以将一个数据数组传递给视图:

return view('greetings', ['name' => 'Victoria']);

以这种方式传递信息时,数据应该是一个数组具有键/值对。在您的视图中,您可以访问每个值使用其对应的密钥,例如<?php echo $key; ?>。像向CCD_ 3传递完整数据阵列的替代方案helper函数,可以使用with方法添加单个视图中的数据片段:

return view('greeting')->with('name', 'Victoria');

如您所见,with()接受两个参数:

  • 第一个(字符串(定义将返回到视图的变量的名称
  • 第二个参数指定该变量将获得的实际值

因此,在您提供的代码中:

return view('bookCRUD.index', compact('books'))
->with('i', ($request->input('page', 1) - 1) * 5);

这意味着在视图bookCRUD.index.blade.php中,$i变量将可用,并且其值将是$request->input('page', 1) - 1) * 5的结果。

所以,你可以用它做点什么,比如:

<p> The interesting value is: {{ $i }} </p>

附加:

以下陈述是等效的:

return view('a_nice_view')->with('manager', $user);

与另一个:

return view('a_nice_view')->withManager($user); // sugared.

这两条语句都将使视图中要使用的变量(在本例中为$manager(可用。


更新

与您问题的第二部分相关,他/她所说的是该行将退回5种产品。就其外观而言,他/她指的是compact('books')部分。这将向视图返回一个变量(我可以假设它是Book对象的集合(。

用法所说的其余内容只是对您所问内容的解释。唯一的细节是用户正在解释$i变量将获得的值。他/她正在使用$request->input('field', 'default_variable')来检索输入。查看文档。

检索输入值

使用一些简单的方法,您可以访问您的IlluminateHttpRequest实例而不必担心请求使用了HTTP谓词。不管HTTP谓词如何输入法可用于检索用户输入:

$name = $request->input('name');

您可以将默认值作为第二个参数传递给输入方法如果请求的输入值为请求中不存在:

$name = $request->input('name', 'Sally');

所以,正如您所看到的。。这样做$request->input('page', '1')意味着如果在请求中定义了page字段,它将获得该值,如果不存在,则默认值将为1。仅此而已。

这样看:

public function index(Request $request)
{
$books = Book::indexBooks()->paginate(20);
$value = ($request->input('page', 1) - 1) * 5; // this resolves the value to be retuned
// so, if 'page' is defined in the request it will get the value.
// if not, it will be '1', so doing the math: $value = 0.
return view('bookCRUD.index', compact('books'))
->with('i', $value);
}

with()方法在View实例上使用时,使变量可用于视图:https://laravel.com/docs/5.7/views#passing-要查看的数据

该代码使变量$i可用于bookCRUD.index视图,并用根据当前请求的输入计算的值填充该变量。

编写控制器代码进行比较的另一种方法是:

public function index(Request $request)
{
$books = Book::indexBooks()->paginate(20);
$i = ($request->input('page', 1) - 1) * 5);
return view('bookCRUD.index', compact('books', 'i'));
}

最新更新