web-dev-qa-db-fra.com

L'argument 1 transmis doit être une instance de App \ Request, instance de Illuminate \ Http \ Request given

J'ai créé une méthode dans mon modèle d'utilisateur pour télécharger une affiche (avec intervention) pour l'utilisateur:

/**
* Store user's poster.
*/
public static function storePoster(Request $request) 
{
    if($request->hasFile('posterUpload')){

        $poster = $request->file('posterUpload');

        $filename = time() . '.'. $poster->getClientOriginalExtension();

        Image::make($poster)->resize(356,265)->save(public_path('/uploads/posters/'.$filename));

        $check = Setting_user::where([
                ['user_id', '=' ,Auth::user()->id],
                ['setting_id','=', 2],
        ])->first();

        if(!$check)
        {
            $setting = new Setting_user();
            $setting->user_id = Auth::user()->id;
            $setting->setting_id = 2;
            $setting->value = $filename;
            $setting->save();
            return back();
        }

        $check->value = $filename;
        $check->update();
        return back();

    }

}

Dans mon UserController, j'ai une autre méthode qui appelle la méthode statique créée dans le modèle User:

/**
* Store user's poster.
*/
public function poster(Request $request) 
{
     User::storePoster($request);

}

Voici ma route:

Route::post('/user-profile/store/poster', 'UserController@poster');

Et voici l'erreur que j'obtiens lorsque je navigue vers "/ user-profile/store/poster":

Argument 1 passed to App\User::storePoster() must be an instance of App\Request, instance of Illuminate\Http\Request given, called in C:\xampp\htdocs\laravel\laravel-paper-dashboard\app\Http\Controllers\UserController.php on line 29 and defined

Bien que si je déplace toute la logique du modèle et que je la mette dans mon UserController, cela fonctionne bien. Une idée pourquoi?

Merci d'avance.

4
Marco

Vous devez utiliser la même classe de demande dans le contrôleur et le modèle, donc dans votre modèle utilisateur, ajoutez use Illuminate\Http\Request en haut de la classe pour lui indiquer la classe Request à utiliser.

30
Khalid Dabjan