我是 laravel 的新手,我 Undefined variable $columnCounts
在查看时遇到了一个错误。
我有一个 index() 方法,它调用同一个 NumberController 的另外两个方法 columnCount() 和 rowCount() 来进行少量数字计数。
这是 index() 方法:
public function index()
{
//
$column1count = $this->countColumn(1);
$column2count = $this->countColumn(2);
$column3count = $this->countColumn(3);
$row1count = $this->countRow(1);
$row2count = $this->countRow(2);
$row3count = $this->countRow(3);
$columnCounts = [['column' => 1, 'count' => $column1count], ['column' => 2, 'count' => $column2count], ['column' => 3, 'count' => $column3count]];
$rowCounts = [['row' => 1, 'count' => $row1count], ['row' => 2, 'count' => $row2count], ['row' => 3, 'count' => $row3count]];
$numbers = Number::all();
return view('index', ['numbers' => $numbers, 'columnCounts' => $columnCounts, 'rowCounts' => $rowCounts]);
}
这是 columnCount() 方法:
public function countColumn($column)
{
$lastNumber = Number::all()->sortByDesc('created_at')->first();
$lastColumn = Number::all()->where('colonna', '=', $column)->sortByDesc('created_at')->first();
$count = $lastNumber->id - $lastColumn->id;
return $count;
}
这是 rowCount() 方法:
public function countRow($row)
{
$lastNumber = Number::all()->sortByDesc('created_at')->first();
$lastRow = Number::all()->where('riga', '=', $row)->sortByDesc('created_at')->first();
$count = $lastNumber->id - $lastRow->id;
return $count;
}
如果我转到索引路线,一切顺利,它会显示列数和行数以及序列中的所有数字。
我在索引视图中有一个表单,用于在数据库中存储一个新号码。该表单具有索引操作,并在将号码存储到数据库后,我会执行以下操作:
return $this->index();
这是我的 store() 方法:
public function store(StoreNumberRequest $request)
{
$validated = $request->validated();
if ($validated) {
$lastNumber = $request->input('lastNumber');
$column1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
$column2 = [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24];
$column3 = [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36];
$row1 = [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34];
$row2 = [2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35];
$row3 = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36];
if (in_array($lastNumber, $column1) && in_array($lastNumber, $row1)) {
$number = [
'number' => $request->input('lastNumber'),
'colonna' => 1,
'riga' => 1,
];
Number::create($number);
$numbers = Number::all();
return view('index', ['numbers' => $numbers]);
} elseif (in_array($lastNumber, $column1) && in_array($lastNumber, $row2)) {
$number = [
'number' => $request->input('lastNumber'),
'colonna' => 1,
'riga' => 2,
'created_at' => now(),
'updated_at' => now(),
];
Number::create($number);
$numbers = Number::all();
return view('index', ['numbers' => $numbers]);
} elseif (in_array($lastNumber, $column1) && in_array($lastNumber, $row3)) {
$number = [
'number' => $request->input('lastNumber'),
'colonna' => 1,
'riga' => 3,
'created_at' => now(),
'updated_at' => now(),
];
Number::create($number);
$numbers = Number::all();
return view('index', ['numbers' => $numbers]);
} elseif (in_array($lastNumber, $column2) && in_array($lastNumber, $row1)) {
$number = [
'number' => $request->input('lastNumber'),
'colonna' => 2,
'riga' => 1,
'created_at' => now(),
'updated_at' => now(),
];
Number::create($number);
$numbers = Number::all();
return view('index', ['numbers' => $numbers]);
} elseif (in_array($lastNumber, $column2) && in_array($lastNumber, $row2)) {
$number = [
'number' => $request->input('lastNumber'),
'colonna' => 2,
'riga' => 2,
'created_at' => now(),
'updated_at' => now(),
];
Number::create($number);
$numbers = Number::all();
return view('index', ['numbers' => $numbers]);
} elseif (in_array($lastNumber, $column2) && in_array($lastNumber, $row3)) {
$number = [
'number' => $request->input('lastNumber'),
'colonna' => 2,
'riga' => 3,
'created_at' => now(),
'updated_at' => now(),
];
Number::create($number);
$numbers = Number::all();
return view('index', ['numbers' => $numbers]);
} elseif (in_array($lastNumber, $column3) && in_array($lastNumber, $row1)) {
$number = [
'number' => $request->input('lastNumber'),
'colonna' => 3,
'riga' => 1,
'created_at' => now(),
'updated_at' => now(),
];
Number::create($number);
$numbers = Number::all();
return view('index', ['numbers' => $numbers]);
} elseif (in_array($lastNumber, $column3) && in_array($lastNumber, $row2)) {
$number = [
'number' => $request->input('lastNumber'),
'colonna' => 3,
'riga' => 2,
'created_at' => now(),
'updated_at' => now(),
];
Number::create($number);
$numbers = Number::all();
return view('index', ['numbers' => $numbers]);
} elseif (in_array($lastNumber, $column3) && in_array($lastNumber, $row3)) {
$number = [
'number' => $request->input('lastNumber'),
'colonna' => 3,
'riga' => 3,
'created_at' => now(),
'updated_at' => now(),
];
Number::create($number);
$numbers = Number::all();
return view('index', ['numbers' => $numbers]);
} elseif ($lastNumber === 0) {
$number = [
'number' => $request->input('lastNumber'),
'colonna' => 0,
'riga' => 0,
'created_at' => now(),
'updated_at' => now(),
];
Number::create($number);
return $this->index();
}
}
}
这是 index.blade.view :
<div class="row text-center">
@foreach ($columnCounts as $column)
<div class="col border border-2 border-dark p-5 mb-5">
<p>Column {{ $column['column'] }} Count</p>
<p>{{ $column['count'] }}</p>
</div>
@endforeach
@foreach ($rowCounts as $row)
<div class="col border border-2 border-dark p-5 mb-5">
<p>Row {{ $row['row'] }} Count</p>
<p>{{ $row['count'] }}</p>
</div>
@endforeach
</div>
但是提交表单后,当我返回 $this->index(); 时,我收到“未定义变量 $columnCounts”的信息。
我在视图中也有一个删除按钮。该按钮调用 destroy() 方法来删除序列中插入的最后一个数字。
这是 destroy() 方法:
public function destroy()
{
DB::table("numbers")->orderBy("created_at", "DESC")->take(1)->delete();
return $this->index();
}
在 destroy() 方法中我返回 $this->index(); 就像在 store() 方法中一样。
当我使用 destroy() 删除一个数字时,应用程序会返回索引并正常运行,但使用 store() 时会出现该错误。
有人可以向我解释我做错了什么,以及是否有更好的方法将 $variables 发送到视图而不会出现此问题?