带有可选参数和 ajax 调用的 Laravel 路由

Posted

技术标签:

【中文标题】带有可选参数和 ajax 调用的 Laravel 路由【英文标题】:Laravel routes with optional parameters and ajax call 【发布时间】:2015-02-07 21:35:16 【问题描述】:

我正在处理用户注册页面,但遇到了以下问题。我对新注册(id 将为空)和修改(id 将被传递)使用相同的视图。

此外,我对视图进行了 ajax 调用以填充城市。

这些是我的路线。

Route::get('UserRegistration/uid?', 'UserRegistrationController@Page_Load');
Route::get('UserRegistration/getCityByID', 'UserRegistrationController@getCityByID');

public function Page_Load($uid = null) 
//code

这是我的 ajax 网址:

URL::route('UserRegistration/getStateByID')

当进行 ajax 调用时(http://example.com/UserRegistration/getStateByID?id=1),它调用第一个路由而不是第二个。但是,如果我删除第一条路由中的可选参数 (uid?),一切都会完美运行。

任何意见将不胜感激。

【问题讨论】:

Routes + RESTful 关键字必须是唯一的,我认为。例如,如果 -- 我知道你会尽一切努力避免这种情况 -- uid=getCityByID,会发生什么? 在定义路线时绝不应该出现这种歧义。在像您这样的情况下,可能会切换路线的顺序,因为第二个更具体比第一个。 谢谢@PeterKA。尽管我有逻辑将它们过滤掉,但我在路由中没有注意它。 【参考方案1】:

通配符应始终排在最后:

Route::get('UserRegistration/getCityByID', 'UserRegistrationController@getCityByID');
Route::get('UserRegistration/uid?', 'UserRegistrationController@Page_Load');
echo URL::to('UserRegistration/getStateByID');

【讨论】:

非常感谢。我刚刚忽略了通配符的性质。这样就解决了问题。

以上是关于带有可选参数和 ajax 调用的 Laravel 路由的主要内容,如果未能解决你的问题,请参考以下文章

使用 PyObject_CallMethod 调用带有可选参数的函数

通过反射调用带有可选参数的方法

Laravel (5) - 使用可选参数路由到控制器

在 Ajax 调用中传递完整 URL 作为参数 - Laravel 5.1 路由

原来 laravel 路由 参数可以为可选。。。 很灵活

从 C++ 调用带有可选参数的 Fortran 子例程