有人可以解释一下吗?
我的意思是symfony如何知道这个网址/blogs/blog-title
= /blogs/{title}
它是如何解析routing.yml
中的网址并发现blog-title
是网址的动态参数!!
答案 0 :(得分:2)
这确实需要几步。我写了一些示例代码,只是解释了一下。 不是功能代码。
首先要将路径分解为片段:
data = [{"thisFieldname":"item-company- 1","thisFieldHTML":"\n\t\t\t\t\t<div class=\"new-company-field field-item\">\n\t\t\t\t\t\t<div class=\"fake-data\">\n\t\t\t\t\t\t\tCompany\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t<div class=\"ui-resizable-handle ui-resizable-e\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-s\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\" style=\"z-index: 90; display: block;\"></div>","dataFieldName":"item-company-1","locationIndex":"0","locationLeft":"427.891px","locationTop":"88.5625px","itemWidth":"100px","itemHeight":"34px","fieldRole":"","fieldDefault":"","fieldTooltip":"","fieldValidationRule":"","fieldValidationCharSet":"","fieldValidationDateFormat":"","fieldDisplayFormat":"","fieldValidationCountry":"","fieldValidationMaxLen":"","fieldValidationMinVal":"","fieldValidationMaxVal":"","fieldValidationRegExp":"","fieldValidationFormula":"","fieldValidationErrMsg":"","valid":"","condition-field":"","condition-type":"","condition-value-select":"","fontName":"","fontSize":"","fontAlign":"","fieldColorPicker":"","fieldRequired":"false","fieldReadOnly":"false","fieldMasked":"false","fieldMultiline":"false"}];
data = JSON.parse(JSON.stringify([{"thisFieldname":"item-company- 1","thisFieldHTML":"\n\t\t\t\t\t<div class=\"new-company-field field-item\">\n\t\t\t\t\t\t<div class=\"fake-data\">\n\t\t\t\t\t\t\tCompany\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t<div class=\"ui-resizable-handle ui-resizable-e\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-s\" style=\"z-index: 90; display: block;\"></div><div class=\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\" style=\"z-index: 90; display: block;\"></div>","dataFieldName":"item-company-1","locationIndex":"0","locationLeft":"427.891px","locationTop":"88.5625px","itemWidth":"100px","itemHeight":"34px","fieldRole":"","fieldDefault":"","fieldTooltip":"","fieldValidationRule":"","fieldValidationCharSet":"","fieldValidationDateFormat":"","fieldDisplayFormat":"","fieldValidationCountry":"","fieldValidationMaxLen":"","fieldValidationMinVal":"","fieldValidationMaxVal":"","fieldValidationRegExp":"","fieldValidationFormula":"","fieldValidationErrMsg":"","valid":"","condition-field":"","condition-type":"","condition-value-select":"","fontName":"","fontSize":"","fontAlign":"","fieldColorPicker":"","fieldRequired":"false","fieldReadOnly":"false","fieldMasked":"false","fieldMultiline":"false"}]));
$ _SERVER超全局附带的REQUEST_URI也是如此:
$route = '/blogs/{title}';
$routeArray = explode('/', $route);
现在我们必须按元素比较两个数组的元素:
$requestArray = explode('/', $_SERVER['REQUEST_URI']);
如果'blogs'以'{'开头,或者'blogs'与'blogs'相同,首次运行for循环进行比较。
如果'{title}'以'{'开头,或者'{title}'与'blog-title'相同,for循环的第二次运行会进行比较。
除此之外,Symfony路由器还会检查REQUEST_METHOD是否有效。例如GET,POST,PUT,DELETE。
答案 1 :(得分:0)
Hi Slimen我希望我的回答能帮到你:
执行此任务的是路由器组件。
当您尝试访问应用程序的网页时:
内核要求路由器组件解析routing.yml文件。因此,路由器将尝试将当前URL与routing.yml中定义的路由匹配。
当路由器匹配routing.yml中的路由定义时,他将尝试查找此路由的参数(...要执行的控制器以及要执行的控制器的参数(如newsId或userId等参数)等))。
当路由器解析了routing.yml中的路由定义时,他会将收集的信息提供给内核。
现在内核知道要执行哪个控制器以及给该控制器提供哪些参数。