Laravel控制器中如何正确使用自定义变量访问Request请求参数
问题原因
抛出*syntax error, unexpected '$i' (T_VARIABLE), expecting ')'*错误是PHP原生语法限制导致的:PHP无法直接解析$request->input_name_$i这种把变量直接拼接在对象属性名后的写法,解析器会把input_name_识别为完整属性名,碰到后面的$i就会触发语法报错。
正确实现方式
以下三种写法都能实现动态拼接参数名取值的需求,按推荐优先级排序:
- 优先使用Laravel Request内置的
input()方法,这是框架官方推荐的参数获取方式,容错性最高:
public function updateMethod(Request $request) { $i = 1; // 双引号内用大括号包裹变量是PHP的标准语法,会自动把$i替换为对应值拼接成完整参数名 dd($request->input("input_name_{$i}")); }
这种写法支持传入第二个参数作为默认值,比如$request->input("input_name_{$i}", ''),当请求中不存在对应参数时会直接返回设置的默认值,不会抛出属性不存在的异常。
- 如果要使用对象动态属性的写法,需要用花括号把完整的动态属性名整体包裹,明确告知PHP解析器这部分是需要计算的属性名:
public function updateMethod(Request $request) { $i = 1; dd($request->{"input_name_{$i}"}); }
- 也可以先把拼接完成的完整参数名存到单独变量中,再通过该变量访问对象属性:
public function updateMethod(Request $request) { $i = 1; $paramName = "input_name_{$i}"; dd($request->$paramName); }
内容的提问来源于stack exchange,提问作者Pouya Vaghefi
相关产品推荐
相关产品推荐

