在我的 web.php 文件中,我创建了两条路线:
Route::get('/{name}', 'PublicController@index')->name('welcome');
Route::get('stats', function () { return route('welcome', 'enrique'); });
我的控制器如下:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PublicController extends Controller
{
public function index($name)
{
return view('welcome');
}
}
我已经在本地计算机上设置了一个虚拟主机,该主机为 http://blog.test
当我在浏览器中调用http://blog.test/stats时,它会显示我主页的内容。但是,当我以这种方式在web.php文件中重新组织第二条路由时
Route::get('stats', function () { return route('welcome', 'enrique'); });
Route::get('/{name}', 'PublicController@index')->name('welcome');
它工作正常。
您能解释一下为什么会这样吗?谢谢
答案 0 :(得分:0)
您拥有的是同一条路线被覆盖。为了使它们都起作用,您将必须在自定义参数之前添加一些内容:
/something/{name}
否则,假设stats
是您的参数name
的值
答案 1 :(得分:0)
Laravel路线转到最先匹配的路线,因此,如果您看到/stats
Route::get('/{name}', 'PublicController@index')->name('welcome');
对于$name
,它变成变量PublicController@index
答案 2 :(得分:0)
之所以发生这种情况是因为,当您在/
之后添加{parameter}时,此后定义的所有路由都被视为该类型的
Route::get('/{name}', 'PublicController@index')->name('welcome');
// below routes not work
Route::get('stats', function () {});
Route::get('test', function () { });
Route::get('hello', function () {});
如果您创建如下所示的新路线,也会发生同样的事情:
Route::get('post/{slug}', function () {});
// this get routes are also not work
Route::get('post/show', function () {});
Route::get('post/preview', function () {});
因此,好的做法是始终在 最后
Route::get('post/show', function () {});
Route::get('post/preview', function () {});
Route::get('post/{slug}', function () {});