图片未上传时图片值应为空

问题描述 投票:0回答:1

员工控制器

<?php

namespace App\Http\Controllers;
use App\Talent\Employee\Requests\EmployeeCreateRequest;
use App\Talent\Employee\EmployeeManager;
use Illuminate\Http\Response;
use App\Talent\User\UserManager;
use App\Talent\Documents\DocumentManager;
use Illuminate\Support\Facades\Hash;



class EmployeeController extends Controller
{
    public function __construct(private EmployeeManager $employeeManager,private UserManager $userManager,private DocumentManager $documentManager)
    {

    }
    public function store(EmployeeCreateRequest $request){
        $validated = $request->validated();
        $userArray=[
            'name'=>$validated['first_name']." ".$validated['last_name'],
            'email'=>$validated['email'],
            'password'=>Hash::make("Introcept@123"),
            'role'=>'user'
         ];
             $userCreate=$this->userManager->store($userArray);
             return $this->employeeStore($validated,$userCreate,$request);
    }
    public function employeeStore($validated,$userCreate,$request){
        if($request->hasFile($validated['avatar']))
        {
        $validated['avatar']=$validated['avatar']->store('employeeimages','public');
        }
        else
        {
            $validated['avatar']='null';
        }
        $userId=$userCreate->id;
        $userIdArray=[
             'user_id'=>$userId,
             'status'=>'Active',
            ];
        $employeeArray=array_merge($validated,$userIdArray);
        $employeeCreate=$this->employeeManager->store($employeeArray);
        $employeeId=$employeeCreate->id;

            foreach($validated['documents'] as $document){
            $name=$document->getClientOriginalName();
            $type=$document->getClientMimeType();
            $path=$document->store('employeedocuments','public');
            $documentArray=[
                'employee_id'=>$employeeId,
                'original_name'=>$name,
                'type'=>$type,
                'path'=>$path,
            ];
            $documentCreate=$this->documentManager->store($documentArray);
            }
       
        return response([
            'userId'=>$userId,
            'employeeId'=>$employeeId,
            'message'=>'Personal detail added successfully',
        ],Response::HTTP_OK);
    }
}

Employee.php

    <?php
    
    namespace App\Talent\Employee\Model;
    use App\Talent\Documents\Model\Document;
    use Illuminate\Database\Eloquent\Factories\HasFactory;
    use Illuminate\Database\Eloquent\Model;
    
    class Employee extends Model
    {
        use HasFactory;
    
        protected $fillable = [
            'first_name',
            'last_name',
            'email',
            'contact_number',
            'date_of_birth',
            'current_address',
            'pan_number',
            'bank_account_number',
            'avatar',
            'status',
            'user_id',
        ];
        
**EmployeeRequest.php**

<?php

namespace App\Talent\Employee\Requests;

use Illuminate\Foundation\Http\FormRequest;

class EmployeeCreateRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, mixed>
     */
    public function rules()
    {
        return [
            'first_name'=>'required|string',
            'last_name'=>'required|string',
            'email'=>'required|email|unique:employees,email',
            'contact_number'=>'required|string',
            'date_of_birth'=>'required|date',
            'current_address'=>'required|string',
            'pan_number'=>'string|nullable',
            'bank_account_number'=>'string|nullable',
            'avatar' => 'nullable|image|mimes:jpg,jpeg,png',
            'documents'=>'required',
            'documents.*'=>'max:5000|mimes:pdf,png,jpg,jpeg',
        ];
    }
    public function messages()
    {
      return [
        'documents.max' => "Error uploading file:File too big.Max file size:5MB",
      ];
    }
}

员工迁移

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('employees', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained('users')->restrictOnDelete();
            $table->string('status');
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email')->unique();
            $table->string('contact_number');
            $table->date('date_of_birth');
            $table->string('current_address');
            $table->string('pan_number')->nullable();
            $table->string('bank_account_number')->nullable();
            $table->string('avatar')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('employees');
    }
};

我正在尝试创建一个 API,将员工的个人详细信息存储到数据库中。在这里,图像字段是可选的,因此我在迁移和验证请求中也将头像字段设为可为空。但是,当我尝试将详细信息保存到数据库而不上传图像时,它显示未定义的头像。我不知道这里发生了什么,任何帮助或建议将非常感激。谢谢。

php laravel api file-upload
1个回答
0
投票

您正在使用字符串值 null 而不是关键字 null。

© www.soinside.com 2019 - 2024. All rights reserved.