我對 Laravel 站點的表單有問題,當我通過站點發送表單時,它顯示錯誤,使用 devTools 注意到這是 Post 方法的錯誤 500,但無論如何發送表單。
Laravel 日志檔案中出現以下錯誤
[2021-12-15 11:27:49] production.ERROR:缺少 [Route: contato] [URI: {lang}/contato] 所需的引數。{"exception":"[object] (Illuminate\Routing\Exceptions\UrlGenerationException(code: 0): Missing required parameters for [Route: contato] [URI: {lang}/contato]. at /home/corstonecom/public_html/供應商/laravel/framework/src/Illuminate/Routing/Exceptions/UrlGenerationException.php:17)
在表單中查看它是這樣的:
<form id="frm-contato" class="site-form" action="{{ route('contato-enviar', app()->getLocale()) }}" method="post">
在路由檔案 web.php 中,它是這樣的:
Route::view('/contato', 'fale-conosco')->name('contato');
Route::post('/contato', 'HomeController@enviarContato')->name('contato-enviar');
在控制器中它是這樣的:
public function enviarContato(EnviaContatoRequest $request)
{
$inputs = $request->all();
$inputs['localidade'] = $inputs['cidade'] . '/' . $inputs['uf'];
$contato = Contatos::create($inputs);
Lead::fastSave([
'name' => $inputs['nome'],
'email' => $inputs['email'],
]);
Mail::send(new FaleConosco($contato));
Session::flash('contato_enviado', 'sucesso');
return redirect()->route('contato');
}
我哪里出錯了?
uj5u.com熱心網友回復:
在控制器方法中執行重定向lang時呼叫route方法時需要傳遞引數,因為路由contato需要lang引數:
return redirect()->route('contato', ['lang' => app()->getLocale()]);
最好養成使用引數關聯陣列作為超過 1 個引數的習慣,并且它們需要在關聯陣列中以便 URL 生成器匹配它們。
如果您不想不斷地將此app()->getLocale()值傳遞給 URL 助手,您可以為該lang引數設定一個默認值,它將為您添加。您可以使用中間件來執行此操作。為引數設定默認值的功能示例:
public function handle($request, $next)
{
\URL::defaults([
'lang' => app()->getLocale(),
]);
return $next($request);
}
現在您不必lang在生成 URL 時傳遞引數,因為它設定了默認值。
如果您已經有一個處理語言環境的“語言環境”中間件,您可以將其添加到其中。
uj5u.com熱心網友回復:
當你向路由傳遞引數時,你應該將它作為一個帶鍵的陣列傳遞,這樣 Laravel 就知道引數是什么。在這種情況下,你會做
<form id="frm-contato" class="site-form" action="{{ route('contato-enviar', ['lang' => app()->getLocale()]) }}" method="post">
請參閱https://laravel.com/docs/8.x/routing#genating-urls-to-named-routes
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/381828.html
