【问题标题】:Silverstripe 3.4 - Routing is returning page not foundSilverstripe 3.4 - 路由返回页面未找到
【发布时间】:2016-09-27 13:52:32
【问题描述】:

我正在尝试获取 URL 中的最后一个 slug 以传递给我的控制器以用作过滤器的参数。不幸的是,我总是收到一个找不到页面的错误。

示例网址:/sectors/category/energy

Routes.yml:

---
Name: mysiteroutes
After: framework/routes#coreroutes
---
Director:
  rules:
    'sectors': 'BlogPostsPage_Controller'

我的控制器:

class BlogPostsPage_Controller extends Page_Controller {

private static $url_handlers = array(
    '$ID' => 'News',
);

private static $allowed_actions = array('News');

public function News(SS_HTTPRequest $request)
{
   $news = BlogPost::get()
        ->filter(array(
        'Categories.URLSegment' => '',
        'Tags.Title' => 'News'
        ))
        ;
    return $this->render();
    }
}

进行调试表明 ID 是能量,但仅此而已。

我错过了什么吗?

谢谢

【问题讨论】:

  • ?flush了吗? github.com/NightJar/ssrigging-slug 也是一个不错的模块,您可以将其用于此功能。
  • 我认为你不需要framework/routes#coreroutes,相当肯定你只需要#coreroutes

标签: controller routing silverstripe


【解决方案1】:

您没有定义您提供的 URL 中的 Category 部分。 SilverStripe 现在正在寻找一条适合 Category/Energy 的路线,但它无法找到 - 因为它尚未定义。

所以如果Category 是一个变量,您可以像这样在$url_handlers 中定义它

BlogPostsPage_Controller

private static $url_handlers = array(
    '$Category/$ID' => 'News',
);

如果它不是变量,您可以像这样在routes.yml 中设置它

routes.yml

'sectors/category': 'BlogPostsPage_Controller'

无论哪种方式,您都应该更改两个文件之一以使其正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-18
    • 2018-06-26
    • 1970-01-01
    • 2018-10-07
    • 2012-05-11
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多