Laravel 10 中的 Dropzone 有问题,它不会加载到数据库

Problem with Dropzone in Laravel 10, it does not load to the db

提问人:Ray Duran 提问时间:11/8/2023 最后编辑:Ray Duran 更新时间:11/8/2023 访问量:31

问:

在我的客户表单中,我放置了一个拖放区来上传多个文件,在我的表格中,该列称为“文件”,但是当我发送表单时,该列是空的。文件也没有发送到存储中。

我发现通过对$rule检查行进行注释,从拖放区上传的文件将发送到指定的文件夹。但即便如此,该信息也不会保存在数据库中,而只保存在“文件”列中。

在这里,我将控制器的一部分留在存储函数中。

public function store(Request $request)
{
    
    // Eliminar el campo 'Files' del array $request antes de la validación
    $files = $request->input('Files');
    unset($request['Files']);

    // Validación para otros campos del formulario
    $request->validate(Aplicacione::$rules);

    // Restaurar el campo 'Files' después de la validación si existe
    $request['Files'] = $files;

    // Lógica para manejar la carga de los documentos
    $uploadedFiles = [];

    if ($request->hasFile('Files')) {
        foreach ($request->file('Files') as $file) {
            // Puedes agregar lógica específica para manejar documentos si es necesario

            // Ejemplo: Guardar el documento en una ubicación específica
            $fileName = $file->getClientOriginalName();
            $file->move(public_path('storage/files/'), $fileName);

            // Agregar el nombre del archivo a la lista de archivos cargados
            $uploadedFiles[] = $fileName;
        }
    }

    // Agregar los nombres de los archivos a la solicitud para almacenarlos en la base de datos
    $request['Files'] = $uploadedFiles;
    dd($request->all());

    // Lógica para manejar la carga de las firmas como imágenes
    $folderPath = public_path('storage/upload/');

    // Manejar la firma del propietario
    $ownerSignature = $request->input('OwnerSignature');
    $this->handleSignature($ownerSignature, $folderPath, 'owner_signature');

    // Manejar la firma del segundo propietario
    $owner2Signature = $request->input('Owner2Signature');
    $this->handleSignature($owner2Signature, $folderPath, 'owner2_signature');

    // Crear una nueva instancia de Aplicacione con los datos del formulario
    $aplicacione = Aplicacione::create($request->all());

    return redirect()->route('aplicaciones.index')
        ->with('success', 'Aplicacione created successfully.');
}

如果我对此发表评论

$request->validate(Aplicacione::$rules);

Dropzone 将文件发送到指定的路径,但它不会将信息保存在数据库中。

这是我模型的一部分。

    class Aplicacione extends Model
{
    
    static $rules = [
        'LegalBusinessName' => 'required',
        'bda' => 'required',
        'TaxID' => 'required',
        'BusinessClass' => 'required',
        'Street' => 'required',
        'City' => 'required',
        'State' => 'required',
        'ZipCode' => 'required',
        'BusinessPhone' => 'required',
        'ProductsSold' => 'required',
        'Email' => 'required',
        'OwnerName' => 'required',
        'Ownertreet' => 'required',
        'OwnerCity' => 'required',
        'OwnerState' => 'required',
        'OwnerZipCode' => 'required',
        'OwnerHomePhone' => 'required',
        'OwnerCellPhone' => 'required',
        'OwnerLicense' => 'required',
        'OwnerSocial' => 'required',
        'CurrentCash' => 'required',
        'OwnerSignature' => 'required',
        'Files' => 'sometimes|array', // Modifica la regla para permitir arrays o nulo 
    ];

    protected $perPage = 20;

    /**
     * Attributes that should be mass-assignable.
     *
     * @var array
     */
    protected $fillable = ['AgentesId','LegalBusinessName','bda','LegalEntity','Other','TaxID','BusinessClass','Street','City','State','ZipCode','BusinessPhone','MonthlyDeposit','ProductsSold','Email','Years','Months','OwnerName','Ownertreet','OwnerCity','OwnerState','OwnerZipCode','OwnerHomePhone','OwnerCellPhone','OwnerTitle','OwnerOwnership','OwnerLicense','OwnerState2','OwnerDateBirth','OwnerSocial','isCoApplicant','Owner2Name','Owner2treet','Owner2City','Owner2State','Owner2ZipCode','Owner2HomePhone','Owner2CellPhone','Owner2Title','Owner2Ownership','Owner2License','Owner2State2','Owner2DateBirth','Owner2Social','DesiredAmount','UseFunds','CurrentCash','CompanyName','Balance','AppDate','CoApplicant','Files','OwnerSignature','Owner2Signature','Estado','ApproveAmout'];


    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'Files' => 'array',
    ];

在任何情况下,“文件”字段都不会保存从放置区发送的任何数据。是否验证$rules。

这就是我的形式

                 <!--begin::Dropzone-->
                <div class="dropzone" id="upload_files">
                    <!-- Message para Dropzone -->
                    <div class="dz-message needsclick">
                        <i class="fa-solid fa-cloud-arrow-up fs-5x text-primary"></i>

                        <!-- Info sobre la carga de archivos -->
                        <div class="ms-4">
                            <h3 class="fs-3 fw-bold text-gray-900 mb-1">Drop files here or click to upload.</h3>
                            <span class="fs-4 text-danger mb-1">Uploading the requested files is required.</span><br>
                            <span class="fs-4 text-danger">Copy of Driver’s License</span><br>
                            <span class="fs-4 text-danger">Copy of Business License</span><br>
                            <span class="fs-4 text-danger">Copy of Voided Check</span><br>
                            <span class="fs-4 text-danger">4 Last Bank Statement</span><br>
                            <span class="fs-4 fw-semibold text-gray-500">Upload up to 20 files</span>
                        </div>
                    </div>
                    <!-- Fin de Message -->
                </div>
                <!-- Fin de Dropzone -->

这是 javascript 部分

<script>
    Dropzone.autoDiscover = false;

    var myDropzone = new Dropzone("#upload_files", {
        url: "{{ route('aplicaciones.store') }}",
        paramName: "Files", // Ajusta el nombre del parámetro según tu controlador
        maxFiles: 20,
        maxFilesize: 20, // MB
        addRemoveLinks: true,
        uploadMultiple: true, // Permitir la carga de múltiples archivos
        acceptedFiles: "image/*,application/pdf,application/msword",
        headers: {
            'X-CSRF-TOKEN': "{{ csrf_token() }}"
        },
        success: function (file, response) {
            // Lógica después de que se carga el archivo, si es necesario
            $('form').append('<input type="hidden" name="Files[]" value="' + response.name + '">');
            console.log(response);
        },
        error: function (file, response) {
            // Lógica en caso de error, si es necesario
            console.log(response);
        },
        init: function () {
            @if(isset($project) && $project->document)
                var files = {!! json_encode($project->document) !!};
                for (var i in files) {
                    var file = files[i];
                    this.options.addedfile.call(this, file);
                    file.previewElement.classList.add('dz-complete');
                    $('form').append('<input type="hidden" name="Files[]" value="' + file.file_name + '">');
                }
            @endif
        }
    });
    </script>

我必须澄清一下,除了拖放区之外,一切都正常工作

我希望我能找到这方面的帮助。

谢谢。。。

javascript php laravel 表单 dropzone

评论

0赞 ZeNix 11/8/2023
如果您评论您存储文件是因为没有验证,即使执行保存到数据库的请求不正确或缺少某些内容,我认为您的验证本身有问题。您在模型中定义了什么?$request->validate(Aplicacione::$rules);$rulesAplicacione
0赞 Ray Duran 11/8/2023
但是,如果我以发送和保存表单的相同方式注释$rule,并且 dropzone 将文件发送到存储中,当我有此注释“$request->validate(Application::$rules);”它以相同的方式发送,但不在那里,放置区不发送数据。下面我将留下我的模型的一部分。
0赞 ZeNix 11/8/2023
尝试调试您在请求中发送的内容,并将其与您的规则进行比较,因为几乎所有内容都是必需的。如果你在模型内部注释,这与注释是一回事,你应该期待相同的行为。dd()$rules$request->validate()
0赞 Ray Duran 11/8/2023
我已经做了所有这些,它做了同样的事情,无论它是否与请求一起做,dropzone 都不会将数据发送到数据库到我数据库的 Files 列。

答: 暂无答案