php - Symfony2 中生成的 URL 的用例?

标签 php symfony url-routing

我拥有纯 PHP 和 Drupal 背景,最近正在学习 Symfony2 框架。目前我在本书的路由章节中。这可能是一个简单的问题。

有哪些现实世界的用例可以说明人们为什么要在 Symfony 应用程序中生成 URL?我理解代码,但在确定其实际应用时遇到了一些麻烦。 p>

我指的是 this section你需要复习一下吗?

一如既往,谢谢!

附言Symfony 很棒。 :)

最佳答案

基本上,只要您需要链接到应用程序中的任何地方,您都需要生成一个 URL。

假设您有一个应用程序需要管理一些用户。这意味着您可能会有像 /user/create/user/edit/(user id)/user/remove/(user id) 这样的 URL

无论何时显示编辑用户的链接,您都需要知道在哪个 URL 上可以找到允许您编辑用户的页面。所以你需要链接到/user/edit/(user id)。一种解决方案是将其作为固定链接,这样您就可以在代码中编写

<a href="/user/edit/<?= $currentUser->getId() ?>">edit this user</a>

但是如果你想改变这个 URL scheme 怎么办?比方说有人对“用户”这个词不满意,毕竟这个系统管理的人不仅仅是用户,他们其实是“人”的!所以现在您需要更改所有包含“用户”的 URL。您的应用程序中可能有很多地方您必须对这些 URL 进行硬编码,现在您需要查找并更改所有这些 URL。呃。

但不要害怕,因为 Symfony 路由可以拯救!

我们可以简单地让 Symfony 路由器为我们生成它们,而不是对这些 URL 进行硬编码。这意味着我们首先需要告诉 Symfony 我们有哪些路由,例如通过将以下 YAML 代码添加到我们的路由配置文件中:

user_edit:
  path:     /user/edit/{userId}
  defaults: { _controller: AppBundle:User:edit }
  requirements:
      userId:  \d+

这会告诉我们的应用程序“好吧,每当有人请求一个看起来像 /user/edit/{userId} 的页面时,您需要调用 editAction 方法我们在 AppBundle 命名空间中的 UserController 类,你需要将 userId 作为参数传递。哦,你也应该只调用 Controller ,如果userId 是至少包含一个数字的有效整数。"

这就是 Symfony 知道如何将 URL 映射到 Controller 的方式。但随之而来的好处是,我们也可以将此信息用于相反的方式。

通常,在我们的应用程序中,我们并不真正关心我们想要执行的特定操作的 URL 是什么样子。我们所知道的是,当单击某个链接时,浏览器应该跳转到允许我编辑用户的页面。由于我们刚刚定义了一条将我们带到那里的路线,我们可以让 Symfony 生成正确的 URL 来实现这一点。

因此在您看来,您现在可以丢弃之前的硬编码 URL,并将其替换为 Symfony 路由器生成的路由:

<a href="<?= $view['router']->generate('user_edit', ["userId" => $currentUser->getId()]) ?>">edit this user</a>

现在,每当您需要更改 URL 的实际外观时,您需要做的就是编辑路由配置,而不是大量单独的 View 。

关于php - Symfony2 中生成的 URL 的用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28126698/

相关文章:

php - 如何访问与另一表相关的一列 Laravel 5.1

php - 如何统计年龄等于一定数量的人数?

php - 查询检查单词是否存在 php MySQL?例如 : games like scrabble

forms - Symfony 表单设置数据库中非映射字段的值

c# - 通过 Web API 中的 ModelBinding 将 JavaScript 对象反序列化为 Dictionary<string, string>

javascript - 在没有 authguard 的情况下禁用 Angular 7 中的 url 更改导航或直接页面访问?

php - 将列拆分为单独的变量

php - 如何检查未登录用户是否具有角色?

php - 覆盖持久性 :loadAll in EntityRepository

ruby-on-rails-4 - Rails 4 不会改变 post 方法来打补丁