Laravel8路由问题解决方法

作者: 温新

分类: 【Laravel】

阅读: 7678

时间: 2020-10-09 16:11:46

关于Laravel8路由问题的变动,不知道你是否有不习惯,反正我是不习惯。Laravel8中的路由按照我们之前的习惯来写,你会惊奇的发现,报错了。会产生一种摸不着头脑的感觉。

按照官方推荐的写法来编码自然是不会报错的,但是,如果还是按照Laravel8之前的写法来编码就有问题了。那么如何解决问题?

先来写写官方推荐的写法:

官方推荐写法

routes/web.php

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 121, 198)"><?</span><span style="box-sizing: border-box;color: rgb(1, 162, 82)">php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">use</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">Illuminate\Support\Facades\Route</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(205, 171, 83)"># 引入控制器文件</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">use</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">App\Http\Controllers\IndexController</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(205, 171, 83)"># 路由文件</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(1, 162, 82)">Route</span>::<span style="box-sizing: border-box;color: rgb(1, 162, 82)">get</span>(<span style="box-sizing: border-box;color: rgb(242, 176, 29)">'/'</span> , [<span style="box-sizing: border-box;color: rgb(1, 162, 82)">IndexController</span>::<span style="box-sizing: border-box;color: rgb(219, 45, 32)">class</span> , <span style="box-sizing: border-box;color: rgb(242, 176, 29)">'index'</span>]);</span>

IndexController 控制器文件

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 121, 198)"><?</span><span style="box-sizing: border-box;color: rgb(1, 162, 82)">php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">namespace</span> <span style="box-sizing: border-box;color: rgb(226, 40, 127)">App\Http\Controllers</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">use</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">Illuminate\Http\Request</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">class</span> <span style="box-sizing: border-box;color: rgb(226, 40, 127)">IndexController</span> <span style="box-sizing: border-box;color: rgb(219, 45, 32)">extends</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">Controller</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">{</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(219, 45, 32)">public</span> <span style="box-sizing: border-box;color: rgb(219, 45, 32)">function</span> <span style="box-sizing: border-box;color: rgb(226, 40, 127)">index</span>() {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(219, 45, 32)">return</span> <span style="box-sizing: border-box;color: rgb(242, 176, 29)">'hello IndexController'</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    </span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(219, 45, 32)">public</span> <span style="box-sizing: border-box;color: rgb(219, 45, 32)">function</span> <span style="box-sizing: border-box;color: rgb(226, 40, 127)">test</span>() {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(219, 45, 32)">return</span> <span style="box-sizing: border-box;color: rgb(242, 176, 29)">'test'</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>

这是IndexController所对应的路由及其文件。如果现在有个文章控制PostController文件,那么就需要再路由文件中引入这个控制器,然后再定义相关的路由。要是有N多个控制器文件,那么就需要在web.php文件中引入N多个控制器,给人感觉就已经不简洁了。

web.php

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 121, 198)"><?</span><span style="box-sizing: border-box;color: rgb(1, 162, 82)">php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">use</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">App\Http\Controllers\PostController</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">use</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">App\Http\Controllers\TagController</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(1, 162, 82)">Route</span>::<span style="box-sizing: border-box;color: rgb(1, 162, 82)">get</span>(<span style="box-sizing: border-box;color: rgb(242, 176, 29)">'post/lst'</span> , [<span style="box-sizing: border-box;color: rgb(1, 162, 82)">PostController</span>::<span style="box-sizing: border-box;color: rgb(219, 45, 32)">class</span> , <span style="box-sizing: border-box;color: rgb(242, 176, 29)">'index'</span>]);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(1, 162, 82)">Route</span>::<span style="box-sizing: border-box;color: rgb(1, 162, 82)">get</span>(<span style="box-sizing: border-box;color: rgb(242, 176, 29)">'tag/lst'</span> , [<span style="box-sizing: border-box;color: rgb(1, 162, 82)">TagController</span>::<span style="box-sizing: border-box;color: rgb(219, 45, 32)">class</span> , <span style="box-sizing: border-box;color: rgb(242, 176, 29)">'index'</span>]);</span>

下面就是按照以前的写法的解决方法

Laravel8之前的写法

第一步:打开 App\Providers\RouteServiceProvider.php文件

第二步:添加属性

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 121, 198)"><?</span><span style="box-sizing: border-box;color: rgb(1, 162, 82)">php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">namespace</span> <span style="box-sizing: border-box;color: rgb(226, 40, 127)">App\Providers</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">use</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">Illuminate\Cache\RateLimiting\Limit</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">use</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">Illuminate\Foundation\Support\Providers\RouteServiceProvider</span> <span style="box-sizing: border-box;color: rgb(219, 45, 32)">as</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">ServiceProvider</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">use</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">Illuminate\Http\Request</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">use</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">Illuminate\Support\Facades\RateLimiter</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">use</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">Illuminate\Support\Facades\Route</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">class</span> <span style="box-sizing: border-box;color: rgb(226, 40, 127)">RouteServiceProvider</span> <span style="box-sizing: border-box;color: rgb(219, 45, 32)">extends</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">ServiceProvider</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">{</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(205, 171, 83)"># 添加该属性就可以按照之前习惯的写法编码了</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(219, 45, 32)">protected</span> <span style="box-sizing: border-box;color: rgb(1, 160, 228)">$namespace</span> <span style="box-sizing: border-box;color: rgb(255, 121, 198)">=</span> <span style="box-sizing: border-box;color: rgb(242, 176, 29)">"App\Http\Controllers"</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> ...</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>

第三步:实测

web.php

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(255, 121, 198)"><?</span><span style="box-sizing: border-box;color: rgb(1, 162, 82)">php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(219, 45, 32)">use</span> <span style="box-sizing: border-box;color: rgb(1, 162, 82)">Illuminate\Support\Facades\Route</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(1, 162, 82)">Route</span>::<span style="box-sizing: border-box;color: rgb(1, 162, 82)">get</span>(<span style="box-sizing: border-box;color: rgb(242, 176, 29)">'test'</span> , <span style="box-sizing: border-box;color: rgb(242, 176, 29)">'IndexController@index'</span>);</span>

我是小白,期待和优秀的你一起同行!

小白

2020年10月10日

请登录后再评论