Laravel 5.5 Blade视图中如何在URL::to中使用控制器变量
解决Laravel Blade中URL::to方法嵌入变量的语法错误问题
你遇到的问题核心是在Blade的{{ }}模板标签内部错误嵌套了另一个{{ }}——因为当你写{{ ... }}时,里面已经是PHP执行环境了,不需要再用模板标签包裹变量,直接使用PHP变量语法即可。
错误原因分析
你之前的写法:
<button type="button" class="btn btn-default backurl" data-href="{{URL::to('codo/{{$p_id}}/84')}}"> Go </button>
Blade编译时,会把内部的{{$p_id}}当成字符串的一部分处理,导致生成的PHP代码语法混乱(就像你看到的编译后代码里'codo/{{$p_id); ?>/84'这种错误结构),最终触发语法解析错误。
正确的写法有三种,任选其一即可:
1. 字符串拼接(最直观的PHP写法)
直接在URL::to()内部用.拼接字符串和变量:
<button type="button" class="btn btn-default backurl" data-href="{{ URL::to('codo/' . $p_id . '/' . $u_id) }}"> Go </button>
2. 双引号变量解析
利用PHP双引号会自动解析变量的特性,简化写法:
<button type="button" class="btn btn-default backurl" data-href="{{ URL::to("codo/$p_id/$u_id") }}"> Go </button>
(注意这里内部用双引号,外部Blade标签用双引号也没问题,因为Blade会正确处理嵌套引号)
3. 使用url()辅助函数(更简洁)
Laravel提供了更短的url()辅助函数,和URL::to()功能完全一致,写法更清爽:
<button type="button" class="btn btn-default backurl" data-href="{{ url("codo/$p_id/$u_id") }}"> Go </button>
额外推荐:使用命名路由(更优雅)
如果你的路由定义了名称(比如Route::get('codo/{p_id}/{u_id}', 'YourController@method')->name('codo.detail');),推荐用route()函数生成URL,这样后续路由路径变更时,不需要修改视图代码:
<button type="button" class="btn btn-default backurl" data-href="{{ route('codo.detail', [$p_id, $u_id]) }}"> Go </button>
内容的提问来源于stack exchange,提问作者robspin
相关产品推荐
相关产品推荐

