在 Laravel 中向 FormRequest class 发送数据和从中发送数据
Sending data to and from FormRequest class in Laravel
我正在尝试将数据(更准确地说是对象,$product
)传入和传出 FormRequest class、StoreImageRequest
。验证失败后,StoreImageRequest
重定向到图像上传视图,这取决于传递的模型 $product
(最初来自控制器)。由于我没有将任何数据发送回视图,因此它读取 $product
为 null
。
我需要将整个对象 ($product
) 传回视图。我不确定模型是否存在于 class 的上下文中,也不知道如何检索它并将其传递到重定向视图以在那里使用。 Laravel 文档指向 protected $redirectRoute = 'route_name';
但没有给出任何数据线索。我想我正在尝试以 return redirect()->route('images.create')->with(['product' => $product]
的方式实现一些在控制器上下文中工作的东西。
如何将模型再次传递给视图?
StoreImageRequest:
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'picture1' => 'mimes:jpeg,bmp,png,jpg|max:1000',
'picture2' => 'mimes:jpeg,bmp,png,jpg|max:1000',
'picture3' => 'mimes:jpeg,bmp,png,jpg|max:1000',
];
}
public function messages()
{
return [
'picture1.mimes' => "Los formatos de archivos soportados son .jpg, .bmp, .png",
'picture1.max' => "Peso de imagen maximo 1MB",
'picture2.mimes' => "Los formatos de archivos soportados son .jpg, .bmp, .png",
'picture2.max' => "Peso de imagen maximo 1MB",
'picture3.mimes' => "Los formatos de archivos soportados son .jpg, .bmp, .png",
'picture3.max' => "Peso de imagen maximo 1MB",
];
}
uploadimage.blade.php
<div class="container" style="margin-top: 50px">
<h1>Seleccione las imagenes del producto</h1>
<p> Producto: {{ $product->name }}</p>
<p> Id: {{ $product->id }}</p>
<p> Marca: {{ $product->brand }}</p>
<form id="image_form" action="{{ route('store.images', $product->id) }}" method="post" enctype="multipart/form-data">
@csrf
<div class="mb-3">
<input type="file" name="picture1">
</div>
<div class="mb-3">
<input type="file" name="picture2">
</div>
<div class="mb-3">
<input type="file" name="picture3">
</div>
<button class="btn btn-primary" type="submit">Subir imagenes</button>
</form>
您可以在 FormRequest class 中定义一个 getRedirectUrl()
方法 class。
<?php
/**
* Get the URL to redirect to on a validation error.
*
* @return string
*/
protected function getRedirectUrl()
{
$product_id = $this->route()->parameter('product_id');
return 'store/' . $product_id . '/images'; // Or whatever your route name is
}
找到解决方法。如果数据事先来自会话,则可以在 FormRequest 的上下文中检索会话并重新刷新它:
/**
* Get the session associated with the request.
*
* @return \Illuminate\Session\Store|null
*/
public function getSession()
{
return $this->session;
$this->session()->reflash();
}
之后,会话(以及其中的对象 $product
)将可供视图以
的形式使用
{{ session()->get('product') }}
我正在尝试将数据(更准确地说是对象,$product
)传入和传出 FormRequest class、StoreImageRequest
。验证失败后,StoreImageRequest
重定向到图像上传视图,这取决于传递的模型 $product
(最初来自控制器)。由于我没有将任何数据发送回视图,因此它读取 $product
为 null
。
我需要将整个对象 ($product
) 传回视图。我不确定模型是否存在于 class 的上下文中,也不知道如何检索它并将其传递到重定向视图以在那里使用。 Laravel 文档指向 protected $redirectRoute = 'route_name';
但没有给出任何数据线索。我想我正在尝试以 return redirect()->route('images.create')->with(['product' => $product]
的方式实现一些在控制器上下文中工作的东西。
如何将模型再次传递给视图?
StoreImageRequest:
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'picture1' => 'mimes:jpeg,bmp,png,jpg|max:1000',
'picture2' => 'mimes:jpeg,bmp,png,jpg|max:1000',
'picture3' => 'mimes:jpeg,bmp,png,jpg|max:1000',
];
}
public function messages()
{
return [
'picture1.mimes' => "Los formatos de archivos soportados son .jpg, .bmp, .png",
'picture1.max' => "Peso de imagen maximo 1MB",
'picture2.mimes' => "Los formatos de archivos soportados son .jpg, .bmp, .png",
'picture2.max' => "Peso de imagen maximo 1MB",
'picture3.mimes' => "Los formatos de archivos soportados son .jpg, .bmp, .png",
'picture3.max' => "Peso de imagen maximo 1MB",
];
}
uploadimage.blade.php
<div class="container" style="margin-top: 50px">
<h1>Seleccione las imagenes del producto</h1>
<p> Producto: {{ $product->name }}</p>
<p> Id: {{ $product->id }}</p>
<p> Marca: {{ $product->brand }}</p>
<form id="image_form" action="{{ route('store.images', $product->id) }}" method="post" enctype="multipart/form-data">
@csrf
<div class="mb-3">
<input type="file" name="picture1">
</div>
<div class="mb-3">
<input type="file" name="picture2">
</div>
<div class="mb-3">
<input type="file" name="picture3">
</div>
<button class="btn btn-primary" type="submit">Subir imagenes</button>
</form>
您可以在 FormRequest class 中定义一个 getRedirectUrl()
方法 class。
<?php
/**
* Get the URL to redirect to on a validation error.
*
* @return string
*/
protected function getRedirectUrl()
{
$product_id = $this->route()->parameter('product_id');
return 'store/' . $product_id . '/images'; // Or whatever your route name is
}
找到解决方法。如果数据事先来自会话,则可以在 FormRequest 的上下文中检索会话并重新刷新它:
/**
* Get the session associated with the request.
*
* @return \Illuminate\Session\Store|null
*/
public function getSession()
{
return $this->session;
$this->session()->reflash();
}
之后,会话(以及其中的对象 $product
)将可供视图以
{{ session()->get('product') }}