使用路由传递参数 Laravel 5.8

4

我有两个路由

Route::get('/fasilitas/{fasilitas_id}/{any}','Fasilitas_controller@detail_fasilitas');
Route::get('/fasilitas/get_kategori/{kf_id}','Fasilitas_controller@get_kategori');

但是当我访问第二个路由时,它总是获取第一个路由,为什么?如何解决?感谢你的帮助。

1
你尝试过改变路由的顺序吗? - brombeer
尝试通过更改路由顺序来解决问题。 - PHP Ninja
4个回答

1
当访问/fasilitas/get_kategori时,您将触发第一个路由,其中get_kategori{fasilitas_id}
更改您的路由顺序,以便首先触发/fasilitas/get_kategori
Route::get('/fasilitas/get_kategori/{kf_id}','Fasilitas_controller@get_kategori');
Route::get('/fasilitas/{fasilitas_id}/{any}','Fasilitas_controller@detail_fasilitas');

1
您可以使用路由实例上的where方法来约束路由参数的格式。 where方法接受参数名称和定义参数约束的正则表达式:
Route::get('/fasilitas/{fasilitas_id}/{any}','Fasilitas_controller@detail_fasilitas')->where(['fasilitas_id' => '[0-9]+', 'any' => '[0-9]+']);
Route::get('/fasilitas/get_kategori/{kf_id}','Fasilitas_controller@get_kategori')->where('kf_id' => '[0-9]+');

了解更多信息,请参阅正则表达式约束

另一种方法是通过定义名称路由来传递它。

Route::get('/fasilitas/{fasilitas_id}/{any}','Fasilitas_controller@detail_fasilitas')->name('fasilitas.example1');

  <a href="{{ route('fasilitas.example1',['fasilitas_id'=>1,'any'=>2]) }}">

  Route::get('/fasilitas/get_kategori/{kf_id}','Fasilitas_controller@get_kategori')->name('fasilitas.example2');

  <a href="{{ route('fasilitas.example2',['kf_id'=>1]) }}">

检查另一种方式是否适用于这种路线。 - Dilip Hirapara

0

第一条路线的第二个片段是通配符,这意味着它可以是任何内容。

当在浏览器中调用第二条路线时,第二个片段(/get_kategori/)会通过第一条路线的通配符。

改变路线顺序可能会解决问题。但最好的做法是更改路线名称。例如:

Route::get('/fasilitas/something_else/{fasilitas_id}/{any}','Fasilitas_controller@detail_fasilitas');
Route::get('/fasilitas/get_kategori/{kf_id}','Fasilitas_controller@get_kategori');

感谢您的解决方案,但第一条路由是必须的,我不能改变它。 - Ahmad Hilman

0

尝试使用名称。这样会更有效率。
设施!
也许您想要写的是facilities。 不过,我根据您的方法进行编写。

Route::get('/fasilitas/{fasilitas_id}/{any}','Fasilitas_controller@detail_fasilitas')->name('detail.fasilitas');
Route::get('/fasilitas/get_kategori/{kf_id}','Fasilitas_controller@get_kategori')->name('get.kategori');

如何在前台调用两个参数和单个参数? 请看下面。

有关详细信息,请参阅fasilitas。

<a href="{{ route('detail.fasilitas',$fasilitas_id,$any) }}">Detail Fasilitas</a>

对于单个参数:get.kategori

<a href="{{ route('get.kategori',$kf_id) }}">Get Kategori</a>

试一下。
让我知道它是否有效。
享受编程的乐趣。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接