首页 > 解决方案 > 如何使用 Laravel 存储图像?

问题描述

从我的表单中,我尝试为用户的个人资料保存图像,我真的不明白为什么会收到以下验证错误。

形式

在表格中我指出以下内容:(enctype,类型文件的输入)

<div class="row">  
    
    {!! Form::open(['route' => 'admin.users.store', 'method' => 'POST', 'enctype'=>'multipart/form-data']) !!}
   
    {{ csrf_field() }}
    <div class="col-md-4">
        <div class="box box-primary">
            <div class="box-header with-border">
                <h3 class="box-title">Perfil</h3>                
            </div>
            <div class="box-body">
                
                <div class="form-group">
                    {!! Form::label('status_id', 'Estado') !!}
                    {!! Form::select('status_id', $status, null, ['class' => 'form-control select2', 'id' => 'status_id', 'style' => 'width:100%;']) !!}
                </div>
                <div class="form-group">                 
                    <label for="user_photo">Imagen de Perfil</label>
                    <input type="file" id="user_photo" name="user_photo">
                </div>                
            </div>
        </div>       
    </div>
    {!! Form::close() !!}  
</div>

在我的控制器中的store 方法中,我尝试将图像与其他用户字段一起存储,如下所示:

public function store(Request $request)
    {
                //  Transacciones
                DB::beginTransaction();

                 // Validar el formulario
                 $data = $request->validate([
                    'name'      => 'required|string|max:255',
                    'email'     => 'required|string|email|max:255|unique:users',     
                    'user_photo' => 'required|file',                          
                ]);
                
                // Generar una contraseña
                $data['password'] = str_random(8);
             
                // Creamos el usuario 
                dd($request->all());  
                if (request()->hasFile('user_photo')) {
                    $file = request()->file('user_photo')->store('public');                  
                    $user = new User;   
                    $user->name         = $request->get('name');
                    $user->surname      = $request->get('surname');
                    $user->nickname     = $request->get('nickname');
                    $user->email        = $request->get('email');        
                    $user->password     = $request->get('password');
                    $user->gender       = $request->get('gender');  
                    $user->address      = $request->get('address');
                    $user->postcode     = $request->get('postcode');  
                    $user->city         = $request->get('city');
                    $user->province     = $request->get('province');
                    $user->phone        = $request->get('phone');   
                    $user->user_photo   = $file;
                    $user->save();
                    
                // Enviamos el email
                UserWasCreated::dispatch($user, $data['password']);
              
                }else{
                     return 'no se recibio nada';
                }
    }

在我的完整表单中,完成用户个人资料并选择图像的必要字段,如果我单击创建按钮,如您所见,当我已经选择图像时,它会引发必填字段验证错误。 如果我评论 user: photo 作为必填字段,请跳过方法 esle: nothing was received

如果它们已修复,请使用 ** dd ($ request-> all ()); ** 我的方法,这就是结果。

array:15 [
  "_token" => "gRxLpp5fSjPo8aE0XhKCPYJzAlUuqoV6hjhxkvv7"
  "name" => "aa"
  "surname" => null
  "gender" => null
  "email" => "ale@gmail.com"
  "nickname" => null
  "birthdate" => null
  "password" => null
  "password_confirmation" => null
  "status_id" => "1"
  "phone" => null
  "address" => null
  "postcode" => null
  "city" => null
  "province" => null
]

缺少 user_photo 字段。

我不明白发生了什么?. 我需要有人帮我解决几天前我正在处理的这个问题 从我的存储库克隆的项目是否与它有关?它不会发生,因为我的 store 方法不起作用。

标签: phphtmllaravellaravel-blade

解决方案


推荐阅读