缺少[Route:utente.show] [URI:registrazione / {utente}]所需的参数

时间:2018-08-21 14:47:51

标签: php laravel

hi,我在视图/etc/hosts内创建了一个表单,其中包含字段create_registrazione.blade.php'email',当我按下'password'按钮时,它应该带我到用户页面, (显然,数据库中存在电子邮件,密码和用户名),但是当我按下'accedi'按钮时, 我收到此错误:

'accedi'

代码下方:

路线:

Missing required parameters for [Route: utente.show] [URI: registrazione/{utente}]. (View: C:\xampp\htdocs\boxe\resources\views\registrazione\create_registrazione.blade.php)

控制器:

Route::get('/registrazione','RegistrazioniController@create')->name('registrazione.create');

Route::post('/registrazione/store','RegistrazioniController@store')->name('registrazione.store');

Route::get('/registrazione/{utente}','RegistrazioniController@show')->name('utente.show');

查看:

public function create(tabella_utenti $utente)
{

    return view('registrazione.create_registrazione',compact('utente'));
}

//2(salvataggio dati nel DB)
public function store(tabella_utenti $utente)
{
    $this->validate (request(),[
        'email' => 'required',
        'password' => 'required',
        'NomeUtente' => 'required'
    ]);
    $utente=tabella_utenti::create(request(['email','password','NomeUtente']));
    //richiamo l'id dell'utente
    $utenteId=$utente->id;
    return redirect(route('utente.show',compact('utenteId')));

}

public function show(tabella_utenti $utente)
{
    return redirect(route('utente.show',compact('utente')));
}

2 个答案:

答案 0 :(得分:1)

您应该这样做

return redirect(route('utente.show',['utente'=>$utenteId]));

代替您现在正在做的事情:

return redirect(route('utente.show',compact('utenteId')));

如果您使用的是laravel 5.5+,那么最好只使用此功能:

// $utenteId=$utente->id;
return redirect(route('utente.show',compact('utente')));

编辑:

这个问题比关于路由模型绑定的问题还要重要。

解决方案:

  1. 将变量从utente重命名为user,这样应该可以。

    Route::get('/registrazione/{user}','RegistrazioniController@show')->name('utente.show');
    
  2. 在您的控制器中,您可以这样做:

    public function show(tabella_utenti $utente)
    {
         $utente = tabella_utenti::find($utente); //Since $utente is just the user id here
         return redirect(route('utente.show',compact('utente')));
    }
    
  3. 第三种方法是创建自定义路由模型绑定。

    在RouteServiceProvider.php中,您可以添加以下内容:

    public function boot()
    {
        parent::boot();
    
        Route::model( 'utente', tabella_utenti::class);
    }
    

有关更多信息,请检查route model binding

答案 1 :(得分:1)

您的重定向中存在错误。请查看Routing official documentation,以获取更多见解。您必须从以下位置更改代码

return redirect(route('utente.show',compact('utenteId')));

收件人:

return redirect()->route('utente.show',['utente' => $utenteId]);

使其起作用。因为您的路线/registrazione/{utente}想要'utente'作为参数,但是compact函数将返回类似['utenteId' => 1]的数组,这就是抛出Missing required parameters错误的原因