Rufen Sie an eine member-Funktion getClientOriginalExtension() on a non-object auch mit 'Datei' => true
Ich bin immer ein "Call auf eine Memberfunktion getClientOriginalExtension() on a non-object", obwohl ich getroffen haben, Ratschläge, die ich gefunden habe, um es zu beseitigen, einschließlich das hinzufügen von 'files' => true, um meine {{ Form::open }}.
Jede Idee, was Schritt bin ich immer falsch?
BEARBEITEN hier ist mein routing
Route::resource('/contractors', 'ContractorController');
Route::controller('/contractors', 'ContractorController');
Route::post('/contractors/portfolio/{$id}', 'ContractorController@post_Portfolio');
Hier ist mein controller:
public function post_Portfolio($id)
{
$contractor = Contractor::find($id);
$input = Input::all();
$rules = array(
'fileToUpload' => 'image|max:3000',
);
$validation = Validator::make($input, $rules);
if ($validation->fails())
{
return Response::make($validation->errors->first(), 400);
}
$file = Input::file('filesToUpload');
$destinationPath = 'uploads/portfolio';
$extension = $file->getClientOriginalExtension();
$filename = str_random(12).".{$extension}";
$upload_success = Input::file('filesToUpload')->move($destinationPath, $filename);
if( $upload_success ) {
//create a new portfolio and transfer the inputs to the db
$portfolio = new Portfolio;
$contractor = Contractor::find($id);
$portfolio->title = Input::get('title');
$portfolio->description = Input::get('projectDetails');
$portfolio->contractor_id = Input::get('contractor_id');
$portfolio->save();
$photo = new ContractorPhoto;
$photo->portfolio_id = $portfolio->id;
$photo->path = $destinationPath ."/". $filename;
$photo->save();
//redirect
Session::flash('message', 'Successfully updated profile!');
return Redirect::to('contractors/');
} else {
Session::flash('message', 'Houston we have a problem!');
return Redirect::to('contractors/');
}
}
Und hier ist meine Ansicht:
<div class="span8 bdb bdb-larger">
{{ Form::open(['url' => 'contractors/portfolio/{$id}','files' => true, 'method' => 'post', $contractor->id]) }}
<input type="hidden" name="contractor_id" value="{{$contractor->id}}">
<div class="row">
<div class="span6">
<label for="title">Project Name<span class="required">*</span></label>
<input type="text" name="title" id="title">
<input type="hidden" name="contractor_id" value="{{$contractor->id}}">
</div>
</div>
<div class="row">
<div class="span6">
<label for="projectDetails">Project Details <span class="required">*</span></label>
<textarea name="projectDetails" class="row-fluid" id="projectDetails"></textarea>
</div>
</div>
<div class="row">
<div class="span6">
<div>
<label for="filesToUpload">Cover Photo</label>
<input class="filestyle" type="file" name="filesToUpload[]" id="filesToUpload" multiple="multiple" />
<script>$(":file").filestyle({classInput: "input-small"});</script>
</div>
</div>
</div>
<div class="row">
<div class="span6">
<br />
<div>
<label for="photos">Additional Photos</label>
<input class="filestyle" type="file" name="filesToUpload[]" id="filesToUpload" multiple="multiple" />
<script>$(":file").filestyle({classInput: "input-small"});</script>
</div>
</div>
</div>
<div class="row">
<div class="span6">
<output id="filesInfo"></output>
</div>
</div>
<div class="row">
<div class="span6">
<br /><input type="submit" id="btn-porfolio" class="btn btn-primary btn-read-more" value="Submit">
</div>
</div>
</div>
{{form::close()}}
</div>
{{ HTML::script('assets/js/scripts/portfolio.js') }}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gerade die Umsetzung dropzone mit Laravel, und ich lief über eine ähnliche Frage - ich denke, das problem kann sein, dass filesToUpload ist eigentlich ein array, so, während Input::hasFile true zurück, können Sie nur ausführen $file->bewegen() oder $Datei->getClientOriginalExtension() auf Elemente innerhalb des Arrays.
Also, wenn Sie versucht, durch die Bereitstellung einer index:
Den rest sollte funktionieren. Ich weiß, dies ist ein Alter thread, aber es kam prominent, wenn ich war googeln und ich dachte, das könnte helfen, jemand mit dem gleichen problem.
Müssen Sie prüfen, ob die Datei tatsächlich hochgeladen, bevor Sie versuchen zu Operationen mit ihm. Ich denke, der Fehler, den Sie bekommen, ist meistens, wenn Sie NICHT die Datei hochzuladen, aber immer noch versuchen, um Vorgänge durchzuführen. Aktualisieren Sie Ihren code wie folgt:
Mehr info über Datei-handling in der laravel Dokumentation: http://laravel.com/docs/requests#files
Input::file('filesToUpload')
während Sie$file
.Route::resource('/contractors', 'ContractorController');
so definiert, dass ein controller wie Einfallsreich und Grenzen Aktionen.