Я делаю свои первые шаги в Laravel 5.8.Начиная с учебных пособий по Laracast, я использую стандартный проект приложения Laravel и аутентификацию пользователя из коробки, так что ничего особенного здесь нет.После того, как пользователь войдет в систему, он сможет получить доступ к панели управления и изменить часть своей собственной пользовательской информации, которая хранится в таблице Users в MySQL.
Все отлично работает, за исключением загрузки файла через переменную mediator_cert
.При проверке, добавил ли пользователь файл для загрузки (т. Е. mediator_cert
не должен быть нулевым), я получаю ошибку Call to undefined method konsens24\User::hasFile()
, т.е. кажется, что Laravel ожидает, что метод будет определен в файле user.php, которыйтам не содержится (я был бы удивлен, если бы он был явно включен там?).
Я просмотрел различные описания проблем в Интернете, особенно с точки зрения того, что включать с помощью команды «use», но, к сожалению, безрезультатно.
Файл User.php:
<?php
namespace konsens24;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
protected $fillable = [
'first_name', 'last_name','name', 'email', 'password', 'street', 'postal', 'city', 'state', 'country', 'phone', 'mediator', 'mediator_cert'
];
protected $hidden = [
'password', 'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
public function projects()
{
return $this->hasMany(Project::class, 'owner_id');
}
}
Файл ProfileController.php:
<?php
namespace konsens24\Http\Controllers;
use Illuminate\Http\Request;
use konsens24\User;
class ProfileController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function show(User $user)
{
$user = auth()->user();
return view('profile.edit', compact('user'));
}
public function update(User $user)
{
abort_if($user->id !== auth()->id(), 403);
//Handle File Upload
if($user->hasFile('mediator_cert')){
//Get filename with the extension
$filenameWithExt = $user->file('mediator_cert')->getClientOriginalName();
//Get just filename
$filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
//Get just ext
$extension = $user->file('mediator_cert')->guessClientExtension();
//FileName to store
$fileNameToStore = $filename.'_'.time().'.'.$extension;
//Upload Image
$path = $user->file('mediator_cert')->storeAs('public/certs/', $fileNameToStore);
}
$user->update($this->validateUser());
return view('profile.edit', compact('user'));
}
protected function validateUser()
{
return request()->validate([
'street' => ['required', 'min:3', 'max:30'],
'postal' => ['required', 'min:3', 'max:7'],
'city' => ['required', 'min:3', 'max:30'],
'state' => ['max:30'],
'country' => ['required', 'min:1', 'max:30'],
'phone' => ['required', 'min:9', 'max:30'],
'mediator' => ['boolean'],
'mediator_cert' => ['nullable']
]);
}
}
Файл edit.blade.php:
@extends('layouts.app')
@section('content')
<h1 class="title">Profile Settings</h1>
<p>Please complete your profile by adding the following information:</p>
<form method="post" action="/profile/{{ $user->id }}" enctype="multipart/form-data">
@method('PATCH')
@csrf
...
<div class="field">
<label class="label" for="mediator_cert">Certification (upload as PDF, Word Document DOCX, or JPG)</label>
<div class="control">
<input type="file" name="mediator_cert">
</div>
</div>
<br>
<div class="field">
<div class="control">
<button type="submit" class="button">Update Profile</button>
</div>
</div>
@include('errors')
</form>
@endsection
Ожидаемый результат должен заключаться в том, что метод hasFile () может быть выполнен,Большое спасибо за помощь в этом!