Appel à une fonction membre getClientOriginalExtension() sur un non-objet, même avec 'fichier' => true
Je reçois un Appel d'une fonction membre getClientOriginalExtension() sur un non-objet", même si j'ai pris des conseils que j'ai trouvé pour l'éliminer, y compris l'ajout de 'fichiers' => true pour ma {{ Form::open }}.
Une idée de ce que l'étape je suis arriver de mal?
MODIFIER voici mon routage
Route::resource('/contractors', 'ContractorController');
Route::controller('/contractors', 'ContractorController');
Route::post('/contractors/portfolio/{$id}', 'ContractorController@post_Portfolio');
Voici mon 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/');
}
}
Et voici mon avis:
<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') }}
Vous devez vous connecter pour publier un commentaire.
Je viens de la mise en œuvre de dropzone avec Laravel, et j'ai couru à travers une semblable question - je pense que le problème peut être que filesToUpload est en fait un tableau, tandis que l'Entrée::hasFile renvoie true, vous serez en mesure d'effectuer $fichier->move() ou $fichier->getClientOriginalExtension() sur les éléments à l'intérieur de cette matrice.
Donc, si vous avez essayé de fournir un indice:
Le reste devrait fonctionner. Je sais que c'est un vieux thread, mais il est venu en bonne place quand j'ai été sur google et j'ai pensé que cela pourrait aider quelqu'un avec le même problème.
Vous devez vérifier si le fichier a été réellement envoyé avant d'essayer de faire des activités avec elle. Je suppose que l'erreur que vous obtenez est la plupart du temps quand vous n'avez PAS à télécharger le fichier, mais toujours essayer d'effectuer des opérations. Mise à jour de votre code comme suit:
Plus d'informations sur la manipulation de fichiers dans laravel documentation: http://laravel.com/docs/requests#files
Input::file('filesToUpload')
alors que vous avez$file
.Route::resource('/contractors', 'ContractorController');
comme qui définit le contrôleur de la Débrouillardise et les limites des actions.