Laravel 5-使用参数命名路由

时间:2018-12-01 11:22:22

标签: laravel laravel-5

在我的 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'); 

它工作正常。

您能解释一下为什么会这样吗?谢谢

3 个答案:

答案 0 :(得分:0)

您拥有的是同一条路线被覆盖。为了使它们都起作用,您将必须在自定义参数之前添加一些内容:

/something/{name}

否则,假设stats是您的参数name的值

答案 1 :(得分:0)

Laravel路线转到最先匹配的路线,因此,如果您看到/stats

Route::get('/{name}', 'PublicController@index')->name('welcome');

对于$name,它变成变量PublicController@index

Check more article regarding this

答案 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 () {});