#php #html #arrays #laravel #laravel-5.8
Вопрос:
Я работаю над проектом Laravel 5.8, который представляет собой интернет-магазин. и в этом проекте я хотел добавить функцию «Факторы заказа на печать» для администраторов.
Поэтому я сделал такую форму:
<form method="POST" action="{{ route('orders.newprint') }}">
@csrf
@forelse($orders as $order)
<tr>
<td><input class="form-check-input" name="orderCheck[]" type="checkbox" value="{{ $order->ord_id }}">amp;nbsp;</td>
<td>{{ $order->ord_id }}</td>
<td>{{ $order->status_label }}</td>
<td>{{ $order->customer_name }}</td>
<td>{{ $order->ord_total }}</td>
</tr>
@empty
<td colspan="7" class="text-center">No order to show</td>
@endforelse
</form>
Таким образом, в основном администраторы могут выбирать несколько заказов, подобных этому:
И я пытаюсь отправить идентификаторы заказов в виде массива:
<input class="form-check-input" name="orderCheck[]" type="checkbox" value="{{ $order->ord_id }}">
Поэтому после нажатия кнопки Распечатать все факторы заказа на одной странице должны отображаться все факторы заказа.
Поэтому, чтобы сделать это, я добавил этот метод в контроллер:
public function prnpriview(Request $request)
{
$orders = $request->input('orderCheck');
foreach($orders as $ord){
$order = Order::find($ord);
$args = [
'order' => $order,
'address' => $order->order_address->first(),
'details' => $order->orderDetail,
'sendType' => $order->productSubmit,
'coupons' => $this->cartController->computeDiscountForOutRequests($order->ord_object_id, $order->ord_creator_id),
'user' => User::query()->find($order->ord_creator_id)
];
}
return view('admin.shop.orders.newprint', $args);
}
Однако проблема с этим заключается в том, что он отправляет только последние order
, а не все из них.
Код контроллера работал нормально для одного заказа. Но мне нужно передать несколько заказов newprint.blade.php
.
Итак, вопрос в том, как отправить все заказы, которые были проверены пользователем, и отправить их на просмотр с их args
массивом (обязательные отношения)?
Я был бы очень признателен за любую идею или предложение от вас, ребята, по этому поводу…
Спасибо.
ОБНОВЛЕНИЕ № 1
Вот мой код, в newprint.blade.php
котором показаны детали каждого фактора заказа для печати:
@foreach($args as $arg)
<p>Order Id:
<strong>
{{ digits2persian($order->ord_id) }}
</strong>
</p>
<p>Address:
<strong>
{{ $address->province_relation->prv_name }}،
{{ $address->city_relation->cit_name }}،
{{ $address->address }}
</strong>
</p>
...
@endforeach
ОБНОВЛЕНИЕ № 2:
Если я dd($args)
раньше return
в контроллере, и если я {{ dd($args) }}
в представлении, я получу это в результате:
Ответ №1:
Ты уже близко 🙂 Вам нужно создать массив массивов с помощью $arg
. Прямо сейчас, в цикле, он заменяет значение массива каждый раз, когда он проходит через него.
$args = [];
foreach($orders as $ord){
$args[] = [
...
];
}
Комментарии:
1. Затем, глядя на
newprint
клинок, я сказал@foreach($args as $arg) ... @endforeach
: «Но это вернется».Undefined variable: args
2. @KKKKKK попробуй с этим синтаксисом
return view('admin.shop.orders.newprint', ['args' => $args]);
3. Я только что добавил свой код в представление
newprint.blade.php
4. @KKKKKK, если вы
dd($args)
перед возвращением и в представлении, и перед началом в лезвии, что вы получите? Вам нужно немного отладить там5. Попробуйте добавить compact в представление, чтобы отправить переменную с информацией на страницу блейда
return view('admin.shop.orders.newprint', compact('args'))
@KKKKKK