【问题标题】:Symfony - ID and User-Friendly RoutesSymfony - ID 和用户友好的路由
【发布时间】:2018-08-29 14:21:22
【问题描述】:

用例:

  • 我的数据既有 ID 又有 ROUTE
  • 我有一个链接列表和一个使用 ID 的路由器,因此,如果标题或路由发生变化,链接将始终指向相同的内容。
  • 我希望当用户出于可用性和 SEO 目的访问页面时,在 URL 中而不是在 ID 中显示 ROUTE。

目前,我正在为此使用重定向,但我怀疑这是处理它的正确方法。

public function show($slug)
{
  $list = array(
    // blog data goes in here
  };
  // when we go to the blog post page, we loop through the blog post data
  foreach ($list as $post) {
    // if the slug from our url is equal to the ID
    if ($slug == $post['id']){
      // redirect to the user-friendly route instead
      $route = '/blog/' . $post['route'];
      return $this->redirect($route);
    }
    // if this is the user-friendly, route, then render the page
    if ($slug == $post['route']) {
        $title = $post['title'];
        $content = $post['content'];
    }
  }
  // hello/show.html.twig is the twig template I'm currently using to render single pages
  return $this->render('hello/show.html.twig', [
    'title' => $title,
    'content' => $content,
  ]);
}   

这在技术上可行,但我真的不认为这是实际正确的方法。在链接点击和页面渲染之间的某个地方,是否有更好的方法可以为同一视图使用两条路线并优先处理一条路线而不是另一条路线?

【问题讨论】:

    标签: symfony redirect routing


    【解决方案1】:

    如果你使用 Symfony,只需在 routing.yml 文件中输入你的路由。 任何控制器动作都必须有一个渲染,目前您不使用框架。

    在文档中阅读有关此内容的更多信息。相反,您可以在动作中调用动作。

    https://symfony.com/doc/current/components/routing.html#load-routes-from-a-file

    【讨论】:

    • 是的。我确实为此使用了路由文件。我只是不确定使用什么方法让它选择一个而不是另一个。 # config/routes.yaml blog_list: 路径: /blog 控制器: App\Controller\BlogController::list blog_show: 路径: /blog/{slug} 控制器: App\Controller\BlogController::show
    【解决方案2】:

    只需在您的存储库中创建一个名为“findOneByIdOrSlug”的方法并构建一个查询,将来自 URI 的值传递给带有 or 的 where 子句。确保将结果限制为一个并正确处理异常。

    然后,从控制器调用该方法就可以了。

    无法提供代码,因为我现在正在使用手机。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多