Laravel 5.6中如何创建有效的相对链接?
解决Laravel 5.6中视图链接无法跳转的问题
嘿,刚上手Laravel的时候确实容易卡在这里——你现在的问题核心是没搞懂Laravel的路由机制:你不能直接通过URL访问resources/views里的blade文件,所有请求都必须经过路由转发,这是Laravel MVC架构的核心规则之一!
为什么你之前的写法都无效?
你尝试的那些链接之所以返回404,原因很简单:
/sample1、/samples/sample1:这些URL没有对应的路由规则,Laravel不知道该把请求转发到哪个视图{{ url('/samples/sample1') }}:这个只是生成了URL字符串,但本质还是没有路由匹配它- 直接访问
http://site.test/views/pages/samples/sample1:resources目录是受保护的,服务器不允许直接访问,Laravel的所有请求都必须经过public/index.php入口,所以这个路径本身就不合法
正确的解决步骤
1. 先配置路由(关键!)
打开项目根目录下的routes/web.php,这是Laravel处理前端网页路由的文件。你需要给每个sample页面添加路由规则:
方法一:单个配置路由(适合少量页面)
// 给sample1配置路由 Route::get('/samples/sample1', function () { // view()函数用点分隔目录路径,对应resources/views/pages/samples/sample1.blade.php return view('pages.samples.sample1'); })->name('samples.sample1'); // 给路由命名,方便后续生成链接 // 同理,给sample2到sample10添加类似的路由 Route::get('/samples/sample2', function () { return view('pages.samples.sample2'); })->name('samples.sample2'); // ... 重复到sample10
方法二:用路由参数批量处理(适合多个同类型页面)
如果有10个sample页面,写10个重复路由太麻烦,可以用路由参数来批量匹配:
Route::get('/samples/{sample}', function ($sample) { // 先验证参数是否是1-10的数字,避免非法请求 if (!in_array($sample, range(1, 10))) { abort(404); // 返回404页面 } // 动态拼接视图路径 return view("pages.samples.sample{$sample}"); })->name('samples.show'); // 给路由命名
2. 在视图中生成正确的链接
现在路由配置好了,就可以在主链接页面里生成有效的跳转链接了:
如果用单个命名路由:
<a href="{{ route('samples.sample1') }}">Sample 1</a> <a href="{{ route('samples.sample2') }}">Sample 2</a> <!-- ... 直到sample10 -->
如果用批量路由参数:
<a href="{{ route('samples.show', ['sample' => 1]) }}">Sample 1</a> <a href="{{ route('samples.show', ['sample' => 2]) }}">Sample 2</a> <!-- ... 直到sample10 -->
额外小提示
- 推荐用
route()助手函数生成链接,而不是硬写URL:如果后续需要修改路由的URL路径,只要修改routes/web.php里的规则,所有用route()生成的链接都会自动更新,不用一个个改视图里的链接 - 如果你的项目后续页面越来越多,建议用控制器来替代闭包路由,比如创建
PagesController,在里面写处理sample页面的方法,让代码更规范易维护
内容的提问来源于stack exchange,提问作者tvwxyz
相关产品推荐
相关产品推荐

