首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel路径不匹配模式

Laravel路径不匹配模式
EN

Stack Overflow用户
提问于 2016-12-21 14:08:32
回答 2查看 1.6K关注 0票数 2

在我的Laravel routes/web.php文件中,我定义了以下两条路由:

代码语言:javascript
运行
复制
Route::get('transaction/{id}', ['uses' => 'PaynlTransactionController@show'])->name('transaction.show');
Route::get('transaction/{txId}', ['uses' => 'PaynlTransactionController@showByTxId'])->name('transaction.showByTxId');

在我的RouteServicesProvider中,我定义了以下两种模式:

代码语言:javascript
运行
复制
Route::pattern('id', '[0-9]+');
Route::pattern('txId', '/^(TX(1[0-9]\d|[2-9]\d\d)-(1[0-9]\d\d\d\d|[2-9]\d\d\d\d\d))$/');

每当我进入transaction/<id>时,只要id是一个整数,路由就能正常工作。但是,例如,当我转到transaction/TX874-152268时,它不匹配任何路由,并且接收到NotFoundHttpException in RouteCollection.php错误。

我已经验证了txId正则表达式,它给出了一个完全匹配的结果:https://regex101.com/r/kDZR4L/1

我的问题是:为什么只有我的id模式才能正常工作,而我的txId模式却不能正常工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-21 14:25:17

在路线上

代码语言:javascript
运行
复制
Route::pattern('txId', '/^(TX(1[0-9]\d|[2-9]\d\d)-(1[0-9]\d\d\d\d|[2-9]\d\d\d\d\d))$/'); 

我在字符串的开头和结尾都包含了正斜杠。在将模式传递给Route::pattern时不应该包括这一点。因此,以下工作:

代码语言:javascript
运行
复制
Route::pattern('txId', '^(TX(1[0-9]\d|[2-9]\d\d)-(1[0-9]\d\d\d\d|[2-9]\d\d\d\d\d))$'); 
票数 1
EN

Stack Overflow用户

发布于 2016-12-21 14:11:05

因为urls都是/transaction/{value},所以它将得到最后一个。

如果您将/transaction/{txId}更改为/transaction/tx/{txId},那么路线将是明确的。

路由只能得到一个,所以当您将前缀(此时为/transaction)分配给这两个urls时,它都无法工作。

您还可以使用/transaction/TX{txId},在控制器中,您可以在txId变量之前通过txId

代码语言:javascript
运行
复制
public function showByTxId($txId) {
    $txid = "TX".$txid;
}

编辑:

删除/,添加开始。Route::pattern('txId', '^(TX(1[0-9]\d|[2-9]\d\d)-(1[0-9]\d\d\d\d|[2-9]\d\d\d\d\d))$');

希望这行得通!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41264712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档