Laravel 11中POST请求参数丢失,控制器报错参数不足
Laravel 11 POST请求参数无法传入控制器问题
使用Laravel 11和PHP 8.3提交表单POST请求时,请求参数无法传入控制器,出现报错:
Too few arguments to function
App\Http\Controllers\SubscriberController::subscribe(), 0 passed in C:\xampp\htdocs[folder]\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php on line 46 and exactly 1 required
路由配置
Route::post('subscribe', [SubscriberController::class, 'subscribe']);
调试中的控制器代码
<?php namespace App\Http\Controllers; use App\Http\Requests\SubscriberRequest; use App\Repositories\SubscriberRepository; use Illuminate\Http\Request; class SubscriberController extends Controller { private $subscriberRepository; public function __construct(SubscriberRepository $subscriberRepository) { $this->subscriberRepository = new SubscriberRepository(); } public function subscribe($request){//)SubscriberRequest $request) { dd($request); $request->telno = $this->formatTelNo($request->telno); $subscriber = $this->subscriberRepository->newOrUpdate($request); return redirect()->back()->with('success', 'You have successfully subscribed for updates.'); } }
CSRF Token获取路由
Route::get('/token', function () { return csrf_token(); });
自定义SubscriberRequest代码
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class SubscriberRequest extends FormRequest { /** * Determine if the user is authorized to make this request. */ public function authorize(): bool { return true; } /** * Get the validation rules that apply to the request. * * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string> */ public function rules(): array { return [ 'first_name' => 'required', 'last_name' => 'required', 'email' => 'required|email', 'telno' => 'required|string|minlength:10|maxlength:20', ]; } }
更新后的控制器方法
public function subscribe(SubscriberRequest $request) { dump("Hello"); dd($request->validated()); $request->telno = $this->formatTelNo($request->telno); $subscriber = $this->subscriberRepository->newOrUpdate($request); return redirect()->back()->with('success', 'You have successfully subscribed for updates.'); }
测试情况
使用Postman测试时,参数仍未传入:
- 使用
SubscriberRequest类型提示时仅返回Token,无法获取请求参数 - 不使用类型提示时报参数错误
- 改用
Request类型提示后,仍无法正常获取请求数据
预期目标:能在调试中看到请求参数,以便完成数据插入、邮件发送等后续功能。
内容的提问来源于stack exchange,提问作者cvmflinchy
相关产品推荐
相关产品推荐

