在 Laravel 中向 FormRequest class 发送数据和从中发送数据

Sending data to and from FormRequest class in Laravel

我正在尝试将数据(更准确地说是对象,$product)传入和传出 FormRequest class、StoreImageRequest。验证失败后,StoreImageRequest 重定向到图像上传视图,这取决于传递的模型 $product(最初来自控制器)。由于我没有将任何数据发送回视图,因此它读取 $productnull

我需要将整个对象 ($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') }}