Laravel函数的参数太少

时间:2020-02-22 19:42:34

标签: php laravel laravel-routing

我有一个简单的应用程序,可以使用Laravel生成一些代码,现在我正尝试将唯一ID传递给带有URL的控制器。

此方法应接收ID:

 public function code($code_id)
 {
     $settings = Setting::find($code_id);

     return view('pages.settings.code', compact('settings'));
 }

这是我传递ID的视图文件:

<a href="{{ route('settings.code', $settings->code_id) }}">
    {{ __('Generate Code') }}
</a>

当我检查URL时,我得到:

http://127.0.0.1:8001/settings/code?K1zMXRZG4

这是我的路线:

Route::get('settings/code', [
    'as' => 'settings.code', 
    'uses' => 'SettingController@code'
]);

Route::resource('settings', "SettingController");

但是出现以下错误:

Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_RECOVERABLE_ERROR)
Too few arguments to function App\Http\Controllers\SettingController::code(), 0 passed and exactly 1 expected

我的代码有什么问题?

1 个答案:

答案 0 :(得分:4)

您需要定义路由中应传递给方法的所有参数:

Route::get('/settings/code/{code_id}', 'MyController@code')
    ->name('settings.code');

这会将$code_id传递到控制器中的code()方法。

如果您未在路由中定义参数,则它将作为参数传递给Request对象-像所有查询字符串一样,您需要在控制器中像这样获取它:

$code_id = $request->query('code_id');