Blade模板字符串中Config::get请求未传正确值,URL生成异常求助
解决Blade模板中密码重置URL生成错误的问题
你这段代码的核心问题是把Blade模板语法和原生PHP的字符串拼接逻辑搞混了,导致生成的URL包含了多余的代码片段。咱们一步步来修复:
错误原因分析
你原来的代码里,在{{ url(" . Config::get(custom.url) . ")}}中使用了.来拼接字符串——这是原生PHP里拼接字符串的写法,但Blade的{{ }}标签内部是直接解析PHP表达式的,不需要这种拼接方式。再加上Config::get()的参数没加引号,最终导致Blade错误地把这些拼接符号和未解析的配置项代码当成了URL的一部分,生成了奇怪的地址。
修复方案
方案一:直接修正url()函数的用法
把代码改成下面这样,在url()函数内部正确拼接基础URL、重置路径和token,同时给配置项参数加上引号:
<tr> <td>Please <a href="{{ url(Config::get('custom.url') . '/password/' . $token) }}">Click here</a> to reset your password:</td> </tr>
这里的关键点:
Config::get('custom.url')必须给配置项名称加单引号/双引号,否则PHP会把custom.url当成常量解析- 在
url()函数内部用.拼接各个部分,Blade会直接解析整个表达式生成正确的URL
方案二:推荐用命名路由生成URL(更优雅)
如果你的Laravel项目里给密码重置路由设置了名称(比如在routes/web.php里定义了Route::get('/password/{token}', ...)->name('password.reset')),那用route()函数生成URL会更稳妥,不需要手动拼接:
<tr> <td>Please <a href="{{ route('password.reset', ['token' => $token]) }}">Click here</a> to reset your password:</td> </tr>
这种方式的好处是,后续如果修改域名或者路由路径,不需要手动修改模板里的URL,Laravel会自动根据路由名称和参数生成正确地址,减少维护成本。
内容的提问来源于stack exchange,提问作者Viru45
相关产品推荐
相关产品推荐

