Laravel/Blade中外部HTTPS链接跳转失效问题排查
问题解决步骤
核心问题分析
- 变量解析失效:视图代码里
url('//$post->url')将$post->url放在单引号内,Blade模板不会解析单引号包裹的变量,直接把字符串$post->url传入url()函数,导致生成错误的转义地址。 - 集合未遍历:控制器通过
get()返回的是Eloquent集合(多个Post实例),而非单个模型,视图里直接调用$post->url无法正确获取数据,必须遍历集合中的每个元素。
修正后的代码
控制器(可选优化变量名,语义更清晰)
public function index() { $posts = Post::with('categories', 'images')->limit(3)->orderBy('id', 'desc')->get(); return view('blog.homepage', compact('posts')); }
Blade视图
@foreach($posts as $post) <a href="{{ $post->url }}" target="_blank">{{ $post->title }}</a> @endforeach
补充说明
数据库中存储的已经是完整的HTTPS外部链接,不需要使用url()函数(该函数主要用于生成当前站点的内部路由链接),直接输出$post->url就能实现正确跳转。如果强行用url()函数,反而会拼接当前站点域名,导致链接失效。
内容的提问来源于stack exchange,提问作者Itamar Campos
相关产品推荐
相关产品推荐

