草庐IT

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

coder 2024-04-13 原文

我拥有纯 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 - Symfony2 中生成的 URL 的用例?的更多相关文章

  1. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  2. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

    从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

  3. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  4. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  5. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

    我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

  6. ruby - Rack:如何将 URL 存储为变量? - 2

    我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

  7. ruby-on-rails - Rails - 使用/自定义 URL : '/dashboard' 指定根路径 - 2

    如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b

  8. ruby-on-rails - 使用 Dragonfly 从 URL 分配图像 - 2

    我正在使用Dragonfly在Rails3.1应用程序上处理图像。我正在努力通过url将图像分配给模型。我有一个很好的表格:{:multipart=>true}do|f|%>RemovePicture?Dragonfly的文档指出:Dragonfly提供了一个直接从url分配的访问器:@album.cover_image_url='http://some.url/file.jpg'但是当我在控制台中尝试时:=>#ruby-1.9.2-p290>picture.image_url="http://i.imgur.com/QQiMz.jpg"=>"http://i.imgur.com/QQ

  9. ruby - 在 ruby​​ 中生成一个进程,捕获 stdout,stderr,获取退出状态 - 2

    我想从ruby​​rake脚本运行一个可执行文件,比如foo.exe我希望将foo.exe的STDOUT和STDERR输出直接写入我正在运行rake任务的控制台.当进程完成时,我想将退出代码捕获到一个变量中。我如何实现这一目标?我一直在玩backticks、process.spawn、system但我无法获得我想要的所有行为,只有部分更新:我在Windows上,在标准命令提示符下,而不是cygwin 最佳答案 system获取您想要的STDOUT行为。它还返回true作为零退出代码,这可能很有用。$?填充了有关最后一次system调

  10. ruby 正则表达式 : replace double slashes in URL - 2

    除了协议(protocol)定义中的斜杠('http[s]://'、'ftp://'等)之外,我想替换URL中的所有多个斜杠。我该怎么做?此代码无一异常(exception)地替换:url.gsub(/\/\/+/,'/') 最佳答案 您只需排除任何以:开头的匹配项url.gsub(/([^:])\/\//,'\1/') 关于ruby正则表达式:replacedoubleslashesinURL,我们在StackOverflow上找到一个类似的问题: http

随机推荐