【问题标题】:Custom url handler returning 404 when still being handled by correct action自定义 url 处理程序在仍由正确操作处理时返回 404
【发布时间】:2018-08-15 00:43:59
【问题描述】:

我有一个动作 details 正在处理 URL:

something/details/Location/6

这很好用。不过,我想在最后添加更多细节,主要是为了 SEO。

我的 routes.yml 中有:

---
Name: mysiteroutes
---
Director:
  rules:
    'something//$Action/$Location/$OtherID': 'SomeController'

在我的控制器中:

private static $url_handlers = array(
    'something//$Action/$Location/$OtherID' => 'handleAction'
);

如果我转到上面的 URL,它可以工作,但是如果我转到 something/details/Location/6/test,它会返回 404,即使该操作仍在加载并返回自身并返回 renderWith()

我怎样才能让它工作? ID后面的细节我也不关心。

【问题讨论】:

    标签: php routing silverstripe


    【解决方案1】:

    我觉得你最后可以多加一个参数

    ---
    Name: mysiteroutes
    ---
    Director:
      rules:
        'something': 'SomeController'
    

    和你的控制器

    private static $allowed_actions = array('details');
    private static $url_handlers = array(
        'details/$Location/$OtherID/$otherParam' => 'details'
    );
    public function details() {
        $this->getRequest()->param('otherParam');
        /* more processing goes here */
    }
    

    更多信息 https://docs.silverstripe.org/en/3/developer_guides/controllers/routing/

    【讨论】:

    • 我试过这个,但没有骰子。我也在使用 SS 3。
    • 因为您的模式有超过 2 个参数。我尝试编辑我的答案。你可以试试这个
    • 这看起来很狡猾,但确实有效。并不是说我需要它可扩展的 atm,但如果您想要“进一步详细信息”操作,只需将其添加到 url 处理程序中就足够了?
    猜你喜欢
    • 2011-01-19
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2015-06-13
    • 2014-05-19
    • 2012-12-03
    相关资源
    最近更新 更多