繁体   English   中英

如何使“上传文件”不是必需的 - Laravel 8

[英]How to make "upload file" optional not required - Laravel 8

我试图让用户选择是否要上传文件

这是完整的 controller 代码:

<?php

namespace App\Actions\Fortify;

use App\Models\Team;
use App\Models\User;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Laravel\Fortify\Contracts\CreatesNewUsers;

class CreateNewUser implements CreatesNewUsers
{
use PasswordValidationRules;

/**
 * Create a newly registered user.
 *
 * @param  array  $input
 * @return \App\Models\User
 */
public function create(array $input)
{


    
    Validator::make($input, [
        'name' => ['required', 'string', 'max:255'],
        'usertype' => ['required', 'string', 'max:255'],
        'firmtype4' => ['required', 'string', 'max:255'],
        'firmName' => ['required', 'string', 'max:255'],
        'comNum' => ['nullable', 'string', 'max:255'],
        'litNote' => ['required', 'string', 'max:255'],
        'linktocomp' => ['required', 'string', 'max:255'],
        'Location' => ['required', 'string', 'max:255'],
        'sex' => ['required', 'string', 'max:255'],
        'BD' => ['required', 'string', 'max:255'],
        'idnumb' => ['required', 'string', 'max:255'],
        'study' => ['required', 'string', 'max:255'],
        'workplace' => ['required', 'string', 'max:255'],
        'whatworkbefore' => ['nullable', 'string', 'max:255'],
        'Soicalmide' => ['required', 'string', 'max:255'],
        'kindofparti' => ['required', 'string', 'max:255'],
        'whyparti1' => ['required', 'string', 'max:255'],
        'prevparti2' => ['nullable', 'string', 'max:255'],
        'whyparti' => ['required', 'string', 'max:255'],
        'smalword' => ['required', 'string', 'max:255'],
        'videolink' => ['nullable', 'string', 'max:255'],
        'applybefore' => ['required', 'string', 'max:255'],
        'howyouknow' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => $this->passwordRules(),
        'fathername' => ['required', 'string', 'max:255'],
        'surname' => ['required', 'string', 'max:255'],
        'phone' => ['required', 'string', 'max:255'],
        'instagram' => ['nullable', 'string', 'max:255'],
        'twitter' => ['nullable', 'string', 'max:255'],
        'linkedin' => ['nullable', 'string', 'max:255'],
    ])->validate();


   

    return DB::transaction(function () use ($input) {

    $request = request();
 if ($request->hasFile('uploadfile')) {
 $profileImage = $request->file('uploadfile');
    $profileImageSaveAsName = time() . "aa" . "-profile." . $profileImage->getClientOriginalExtension();

    
    $upload_path = 'uploads/form1/';
    $profile_image_url = $upload_path . $profileImageSaveAsName;
    $success = $profileImage->move($upload_path, $profileImageSaveAsName);
}


$request2 = request();
 if ($request2->hasFile('uploadfile2')) {
 $profileImage2 = $request2->file('uploadfile2');
    $profileImageSaveAsName2 = time() . "bb" . "-profile." . $profileImage2->getClientOriginalExtension();

    
    $upload_path2 = 'uploads/form1/';
    $profile_image_url2 = $upload_path2 . $profileImageSaveAsName2;
    $success = $profileImage2->move($upload_path2, $profileImageSaveAsName2);
}
    


$request3 = request();
 if ($request3->hasFile('uploadfile3')) {
 $profileImage3 = $request3->file('uploadfile3');
    $profileImageSaveAsName3 = time() . "cc" . "-profile." . $profileImage3->getClientOriginalExtension();

    
    $upload_path3 = 'uploads/form1/';
    $profile_image_url3 = $upload_path3 . $profileImageSaveAsName3;
    $success = $profileImage3->move($upload_path3, $profileImageSaveAsName3);
}


$request4 = request();
 if ($request4->hasFile('uploadfile4')) {
 $profileImage4 = $request4->file('uploadfile4');
    $profileImageSaveAsName4 = time() . "dd" . "-profile." . $profileImage4->getClientOriginalExtension();

    
    $upload_path4 = 'uploads/form1/';
    $profile_image_url4 = $upload_path4 . $profileImageSaveAsName4;
    $success = $profileImage4->move($upload_path4, $profileImageSaveAsName4);
}




        return tap(User::create([
            'name' => $input['name'],
            'usertype' => $input['usertype'],
            'firmtype4' => $input['firmtype4'],
            'Location' => $input['Location'],
            'firmName' => $input['firmName'],
            'comNum' => $input['comNum'],
            'litNote' => $input['litNote'],
            'linktocomp' => $input['linktocomp'],
            'sex' => $input['sex'],
            'BD' => $input['BD'],
            'idnumb' => $input['idnumb'],
            'study' => $input['study'],
            'workplace' => $input['workplace'],
            'whatworkbefore' => $input['whatworkbefore'],
            'Soicalmide' => $input['Soicalmide'],
            'kindofparti' => $input['kindofparti'],
            'whyparti1' => $input['whyparti1'],
            'prevparti2' => $input['prevparti2'],
            'whyparti' => $input['whyparti'],
            'smalword' => $input['smalword'],
            'partifile' => $profile_image_url,
            'videolink' => $input['videolink'],
            'resume' => $profile_image_url4,
            'previswork' => $profile_image_url3,
            'applybefore' => $input['applybefore'],
            'comprofile' => $profile_image_url4,
            'howyouknow' => $input['howyouknow'],
            'extrapdf' => $profile_image_url2,
            'fathername' => $input['fathername'],
            'surname' => $input['surname'],
            'phone' => $input['phone'],
            'instagram' => $input['instagram'],
            'twitter' => $input['twitter'],
            'linkedin' => $input['linkedin'],
            'email' => $input['email'],
            'password' => Hash::make($input['password']),
        ]), function (User $user) {
            $this->createTeam($user);
        });
    });
}

/**
 * Create a personal team for the user.
 *
 * @param  \App\Models\User  $user
 * @return void
 */
protected function createTeam(User $user)
{
    $user->ownedTeams()->save(Team::forceCreate([
        'user_id' => $user->id,
        'name' => explode(' ', $user->name, 2)[0]."'s Team",
        'personal_team' => true,
    ]));
}
}

我怎样才能使它可以为空?

我已更新问题以包含 controller 的完整代码

现在我面临着“未定义的变量:profile_image_url”

在我遵循答案后,我得到了这个错误

您可以使用hasFile检查

$request = request();
     if ($request->hasFile('uploadfile')) {
     $profileImage = $request->file('uploadfile');
        $profileImageSaveAsName = time() . "aa" . "-profile." . $profileImage->getClientOriginalExtension();
    
        
        $upload_path = 'uploads/form1/';
        $profile_image_url = $upload_path . $profileImageSaveAsName;
        $success = $profileImage->move($upload_path, $profileImageSaveAsName);
    }

参考:https://laravel.com/docs/8.x/requests#retrieving-uploaded-files

更新

根据您的代码,您需要通过 $request

return DB::transaction(function () use ($input) {

 if (\request()->hasFile('uploadfile')) {
 $profileImage = \request()->file('uploadfile');
    $profileImageSaveAsName = time() . "aa" . "-profile." . $profileImage->getClientOriginalExtension();

    
    $upload_path = 'uploads/form1/';
    $profile_image_url = $upload_path . $profileImageSaveAsName;
    $success = $profileImage->move($upload_path, $profileImageSaveAsName);
}



 if (\request()->hasFile('uploadfile2')) {
 $profileImage2 = \request()->file('uploadfile2');
    $profileImageSaveAsName2 = time() . "bb" . "-profile." . $profileImage2->getClientOriginalExtension();

    
    $upload_path2 = 'uploads/form1/';
    $profile_image_url2 = $upload_path2 . $profileImageSaveAsName2;
    $success = $profileImage2->move($upload_path2, $profileImageSaveAsName2);
}
    


 if (\request()->hasFile('uploadfile3')) {
 $profileImage3 = \request()->file('uploadfile3');
    $profileImageSaveAsName3 = time() . "cc" . "-profile." . $profileImage3->getClientOriginalExtension();

    
    $upload_path3 = 'uploads/form1/';
    $profile_image_url3 = $upload_path3 . $profileImageSaveAsName3;
    $success = $profileImage3->move($upload_path3, $profileImageSaveAsName3);
}



 if (\request()->hasFile('uploadfile4')) {
 $profileImage4 = \request()->file('uploadfile4');
    $profileImageSaveAsName4 = time() . "dd" . "-profile." . $profileImage4->getClientOriginalExtension();

    
    $upload_path4 = 'uploads/form1/';
    $profile_image_url4 = $upload_path4 . $profileImageSaveAsName4;
    $success = $profileImage4->move($upload_path4, $profileImageSaveAsName4);
}
$input = Request::all();
    $rules = array(
        'name' => 'required|string|max:255',
        'usertype' => 'required|string|max:255'
    );
    $validation = Validator::make($input, $rules, array());
    if ($validation->fails()) {
        $message = $validation->messages()->first();
        return Response()->json(ResponseManager::getError(null, 1, $message));
    }
    DB::beginTransaction();
    try {
        $input['uploadfile1'] = null;
        $input['uploadfile2'] = null;
        $input['uploadfile3'] = null;
        $input['uploadfile4'] = null;
        if (Request::hasFile('uploadfile')) {
            $input['uploadfile1'] = $this->upload_file($input['uploadfile'], 'uploads/form1');
        }
        if (Request::hasFile('uploadfile2')) {
            $input['uploadfile2'] = $this->upload_file($input['uploadfile2'], 'uploads/form1');
        }
        if (Request::hasFile('uploadfile3')) {
            $input['uploadfile3'] = $this->upload_file($input['uploadfile3'], 'uploads/form1');
        }
        if (Request::hasFile('uploadfile4')) {
            $input['uploadfile3'] = $this->upload_file($input['uploadfile4'], 'uploads/form1');
        }
        $result = User::create($input);
        DB::commit();
        $message = 'success';
        return Response()->json(ResponseManager::getResult(null, 10, $message));
    } catch (Exception $e) {
        DB::rollBack();
        $message = $e->getMessage();
        return Response()->json(ResponseManager::getError(null, 8, $message));
    }

简单制作一个通用的function用于上传文件。

public static function upload_file($image, $store_path) {
    $name = md5(uniqid(rand(), true)) . str_replace(' ', '-', $image->getClientOriginalName());
    $image->move(public_path('/' . $store_path), $name);
    return $store_path . '/' . $name;
}

我希望它对你有用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM