As the error indicates, resume is null, which seems reasonable since I don't see it being set anywhere in this class.
Oct 18, 2022
15
Level 4
Error Call to a member function store() on null
am getting this error above I don't where it's coming from I have been using the same method for a long time with no problem.
or getting another error that resume is required even though it is added
Experiences.php
<?php
namespace App\Http\Livewire;
use Livewire\Component;
use App\Models\Skill;
use App\Models\Language;
use App\Models\Experience;
use App\Models\SelectOption;
use Illuminate\Http\Request;
use Livewire\WithFileUploads;
class Experiences extends Component
{
use WithFileUploads;
public $degree;
public $lesson_type = [];
public $resume;
public $language;
public $proficiency;
public $selectedSkills = [];
public $Selectedlanguage = [];
public $allLanguages = [];
protected function rules ()
{
return [
'position_title' => 'required|min:3',
'job_type' => 'required',
'resume' => 'required|file|mimes:png,jpg,pdf|max:5120',
'selectedSkills' => 'required|array|max:6',
];
}
public function mount()
{
$this->language = Language::where('language', 'English')->get();
$this->allLanguages = Language::all();
// $this->Selectedlanguage = [
// ['language_id' => '23', 'proficiency' => '']
// ];
}
public function addLanguage() {
$this->Selectedlanguage[] = ['language_id' => '', 'proficiency' => ''];
}
public function removeLanguage ($index) {
unset($this->Selectedlanguage[$index]);
$this->Selectedlanguage = array_values($this->Selectedlanguage);
}
public function render()
{
$this->skills = Skill::all();
$this->select = SelectOption::all();
return view('livewire.experiences', [
'skills' => $this->skills,
'select' => $this->select
]);
}
public function updated($field)
{
$this->validateOnly($field);
}
public function Experience (Request $request)
{
$this->validate();
$path = $this->resume->store('public/storage/Resumes');
$experts = Experience::create([
'degree' => $this->position_title,
'lesson_type' => $this->job_type,
'resume' => $path,
]);
$experts->skills()->attach($this->selectedSkills);
foreach($request->Selectedlanguage as $language) {
$experts->languages()->attach($language['language_id'], ['proficiency' => $language['proficiency']]);
}
return redirect()->back()->with('success', 'Your Post was posted Successful');
}
}
experience.blade.php
<div class="current-step">
<div class="form-group">
<label>Add your Degree.</label>
<input type="text" wire:model="degree" placeholder="Ex: Bachelor Degree" class="form-control @error('degree') is-invalid @enderror" required>
@error('degree')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="lesson_type">learning Day Session</label>
<div class="form-check">
<label class="form-check-label">
<input class="form-check-input" type="checkbox" wire:model="lesson_type" value="yes"> {{ __('Yes') }}
<span class="form-check-sign">
<span class="check"></span>
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label">
<input class="form-check-input" type="checkbox" wire:model="lesson_type" value="daily"> {{ __('No, only Daily Notes.') }}
<span class="form-check-sign">
<span class="check"></span>
</span>
</label>
</div>
<div class="form-check">
<label class="form-check-label">
<input class="form-check-input" type="checkbox" wire:model="lesson_type" value="switch"> {{ __('reading books') }}
<span class="form-check-sign">
<span class="check"></span>
</span>
</label>
</div>
@error('lesson_type')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="current-step">
<div class="row">
<div class="col-lg-12">
<div class="form-group">
<label>Add Your Skills</label>
<div wire:ignore class="bootstrap-tagsinput info-badge">
<select wire:model.defer="selectedSkills" class="form-control js-select2-multi" data-placeholder="Enter Skills here..." multiple>
@foreach($skills as $skill)
<option value="{{ $skill->id }}">{{ $skill->name }}</option>
@endforeach
</select>
</div>
@error('selectedSkills')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div class="language-table">
<label>which languages you speak.</label>
<p>do you speak any other languages?.</p>
<div class="table-responsive">
<table id="myTable" class="table">
<thead class=" text-primary">
<th>Languages</th>
<th>Proficiency</th>
<th>Options</th>
<th></th>
</thead>
<tbody>
@foreach($language as $lingo)
<tr>
<td>
<input type="text" name="Selectedlanguage" class="form-control" value="{{ $lingo->language }}" disabled>
</td>
<td>
<select wire:model="proficiency" class="form-control">
<option value="select">Select Level</option>
@foreach($select as $options)
<option value="{{ $options->proficiency }}">{{ $options->proficiency }}</option>
@endforeach
</select>
</td>
<td></td>
</tr>
@endforeach
@foreach($Selectedlanguage as $index => $languages)
<tr>
<td>
<select name="Selectedlanguage[{{ $index }}] [language_id]" wire:model="Selectedlanguage.{{ $index }}.language_id" class="form-control">
<option value="">Select Language</option>
@foreach($allLanguages as $language)
<option value="{{ $language->id }}">{{ $language->language }}</option>
@endforeach
</select>
</td>
<td>
<select wire:model="Selectedlanguage.{{$index}}.proficiency" name="Selectedlanguage[{{ $index }}] [proficiency]" class="form-control">
@foreach($select as $options)
<option value="{{ $options->proficiency }}">{{ $options->proficiency }}</option>
@endforeach
<option value="">Select Level</option>
</select>
</td>
<td>
<a href="#" wire:click.prevent="removeLanguage({{ $index }})"><i class="fa fa-trash fa-2x"></i></a>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="row">
<div class="col-lg-8">
<a href="#" wire:click.prevent="addLanguage">+ Add more</a>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div
wire:ignore
x-data
x-init="
FilePond.registerPlugin(FilePondPluginImagePreview);
FilePond.setOptions({
AllowMultiple: 'multiple' ? 'true' : 'false',
server: {
process: (fieldName, file, metadata, load, error, progress, abort, transfer, options) => {
@this.upload('resume', file, load, error, progress)
},
revert: (filename, load) => {
@this.removeUpload('resume', filename, load)
},
},
});
FilePond.create($refs.input);
"
>
<label>Upload Your Resume</label>
<input type="file" x-ref="input" wire:model="resume" multiple>
</div>
</div>
</div>
</div>
I think that's all
Please or to participate in this conversation.