【问题标题】:Laravel route not matching patternLaravel 路由不匹配模式
【发布时间】:2017-05-06 23:47:19
【问题描述】:

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

Route::get('transaction/{id}', ['uses' => 'PaynlTransactionController@show'])->name('transaction.show');
Route::get('transaction/{txId}', ['uses' => 'PaynlTransactionController@showByTxId'])->name('transaction.showByTxId');

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

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 模式却不行?

【问题讨论】:

  • @WiktorStribiżew 谢谢,我试过但没有运气。它看起来好多了:-)

标签: php laravel pattern-matching laravel-5.3


【解决方案1】:

因为两个网址都是/transaction/{value},所以它会得到最后一个。

如果您将/transaction/{txId} 更改为/transaction/tx/{txId},路线将一目了然。

路由只能获取一个,因此当您将前缀(此时 /transaction)分配给两个 url 时,它不起作用。

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

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))$');

希望这行得通!

【讨论】:

  • 那应该没关系吧?我分别使用正则表达式 [0-9]+[A-Za-z]+users/{id}users/{username} 做同样的事情,这很有效。
  • 我同意,但让我们试试吧。如果它的作品很好;)@pbond Btw,pay.nl 是 een goede betalingsprovider ;)
  • 尝试了您的建议,但没有运气:我已将正则表达式调整为不再匹配 TX 部分,并将 web.php 中的 TX 前置到 {txId},但这并不不幸的是,也不行。
  • 和以前一样,NotFoundHttpException in RouteCollection.php line 161:。如果有帮助,我可以在原始问题中添加堆栈跟踪。
  • 已经知道了,显然我不应该在模式的开头和结尾包含/
【解决方案2】:

在路上

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 时不应包含此内容。因此以下工作:

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))$'); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2018-10-04
    • 1970-01-01
    • 2020-04-05
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多