跨应用程序链接
syob娱乐下载mfony项目由一个或多个应用程序组成。应用程序只共享模型类。但是,即使symfony文档对这个ob娱乐下载主题非常清楚,许欧宝官网下载app多开发人员希望共享的不仅仅是模型。最受欢迎的特性是能够从后端应用程序创建到前端应用程序的链接。设想一个CMS后端,您希望用户编辑一篇文章,然后在前端链接到相应的文章。
在syob娱乐下载mfony 1.0中,这几乎是不可能的(您需要在后端硬编码前端路由规则)。在syob娱乐下载mfony 1.1中,这是可能的,但有点乏味,容易出错,因此没有正式的文档。
从symfoob娱乐下载ny 1.2开始,有一种非常简单的方法可以做到这一点,这要感谢我们对配置处理程序的工作方式所做的一个小修改。除了解析配置文件并将结果数组转换为PHP缓存之外,一些配置处理程序类现在还可以“评估”配置以直接使用(自动加载、数据库和路由配置处理程序采用这种新行为)。
例如,如果你想将一个包含YAML格式路由定义的文件转换为它们对应的路由对象,你可以像下面这样做:
美元配置=新sfRoutingConfigHandler();美元的路线=美元配置->评估(数组(“/道路/ / routing.yml”));
如果执行上面的代码片段,则美元的路线
数组将被一个路由对象数组填充,相当于YAML文件中的路由定义。的生成()
方法将一个YAML文件名数组作为第一个参数,并合并文件的内容。
多亏了框架解耦和sfPatternRouting: setRoutes ()
方法,你可以很容易地从任何PHP脚本创建一个前端路由对象:
美元的路由=新sfPatternRouting(新sfEventDispatcher());美元的路由->setRoutes(美元的路线);
现在生成url就像调用路由对象一样简单生成()
方法:
美元的路由->生成(“主页”);美元的路由->生成(“文章”,数组(“id”= >$ id));
的生成()
方法的第一个参数是路由名,第二个参数是参数数组。
让我们使用这些知识来简化从后端应用程序创建前端url的过程。
在backendConfiguration
类,添加以下代码:
/ /应用程序/后端/配置/ backendConfiguration.class.php类backendConfiguration扩展sfApplicationConfiguration{受保护的frontendRouting美元=零;公共函数generateFrontendUrl(美元的名字,美元的参数=数组()){返回“http://frontend.example.com”.这个美元->getFrontendRouting()->生成(美元的名字,美元的参数);}公共函数getFrontendRouting(){如果(!这个美元->frontendRouting){这个美元->frontendRouting=新sfPatternRouting(新sfEventDispatcher());美元配置=新sfRoutingConfigHandler();美元的路线=美元配置->评估(数组(sfConfig::得到(“sf_apps_dir”).' /前端/ config / routing.yml '));这个美元->frontendRouting->setRoutes(美元的路线);}返回这个美元->frontendRouting;}/ /……}
注意
generateFrontendUrl ()
方法总是生成绝对url,原因很明显。这是唯一需要硬编码的信息,因为symfony没有这方面的知识,也无法猜测。ob娱乐下载
有了这些代码,现在就可以从后端任何位置生成前端URL了。下面是一个例子,如何将用户从后端操作重定向到前端:
这个美元->重定向(这个美元->getContext()->getConfiguration()->generateFrontendUrl(“你好”,数组(“名字”= >“酒吧”)));
你也可以为模板创建一个小的帮助器:
函数link_to_frontend(美元的名字,美元的参数){返回sfProjectConfiguration::getActive()->generateFrontendUrl(美元的名字,美元的参数);}
这就是全部!
如果您有许多应用程序,那么重构上面的代码为任何其他应用程序生成URL或从其他应用程序生成URL是相当容易的。
本文中描述的技术在symfony内部用于ob娱乐下载
应用:路线
任务。
评论
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
以一种不同的方式,因为它使用了context对象,我猜,成本会更高一些。
致命错误:类“sfConfiguration”在/path/to/apps/backend/lib/helper/BackendHelper.php第5行中找不到
私有函数getAppRouting($app)
{
如果(!key_exists (app, appRouting美元))
{
$this->$appRouting[$app] = new sfPatternRouting(new sfEventDispatcher());
$config = new sfRoutingConfigHandler();
路线=美元配置- >评估(数组(sfConfig:: (' sf_apps_dir ') ' / '。应用。美元/ config / routing.yml));
美元$ this - > appRouting[$应用]- > setRoutes($路线);
}
返回$ this - > appRouting美元(美元的应用);
}
在我的项目中似乎没有。我们必须在url中添加脚本名称吗?
也许您可以在sfProjectConfiguration上集成必要的代码,以便在默认情况下为所有应用程序获取路由。