【问题标题】:Doctrine FIxtures and Symfony2 Request scopeDoctrine Fixtures 和 Symfony2 请求范围
【发布时间】:2013-05-18 21:41:34
【问题描述】:

我想为使用 Doctrine2 和 Symfony 2.2 的项目创建文章固定装置。

文章的创建方式如下:

它们不直接链接到图像,而是包含图像名称。例如,在保存文章之前,我的ArticleManager 会解析文章文本、查找图片名称、在数据库中搜索这些图片并将图片标记部分替换为真实图片路径。

This is article content
typed in form
and it contains an
![Image description](Here is My Awesome Image Name)

然后当提交表单并调用ArticleManager->save($article)时,文章管理器通过真实文件WEB路径更改图像标记:

This is article content
typed in form
![Image description](/path/to/my_awesome_image.png)

问题ArticleManager 依赖 Assetic assets helper 服务来构建完整的网络图像路径,并且该服务位于 request 范围内。另一方面,Doctrine fixtures 是从 CLI 运行的,因此他们无法访问该服务,这使我在加载文章夹具时无法获取图像路径。

谁能建议我解决这个问题的最不hackish的方法?

【问题讨论】:

  • 您在尝试使用资产时收到什么异常消息?
  • 你把这些照片存放在哪里?在公共文件夹中?
  • @piotrekkr 我得到`[Symfony\Component\DependencyInjection\Exception\InactiveScopeException] 您无法创建非活动范围(“请求”)的服务(“piflex_website.article.manager”)。`
  • @cheesemacfly 是的,我将它们存储在web/configurable/path 文件夹下。你的目标是什么?有没有办法在没有 $request 的情况下找出网络路径?请注意,网站可以驻留在子目录中,所以我不能只使用像“/configurable/path/image.png”这样的绝对路径。

标签: php symfony doctrine-orm assetic


【解决方案1】:

好的,感谢@cheesemacfly 的评论,我挖掘了一下并意识到由于我的图像存储在公共文件夹中,我根本不需要使用资产!

我没有使用它来创建图像 URL,而是将 router 服务注入我的 ArticleManager 并以这种方式生成 URL:

$baseRoute = $this->router->getContext()->getBaseUrl();

$appFiles = array('/app.php', '/app_dev.php');
$baseRoute = str_replace($appFiles, '', $baseRoute);

$imageDocumentRoute = $baseRoute . '/' . $imageDocument->getWebPath();

imageDocument->getWebPath() 返回附加到保存图像的子文件夹的图像名称。例如。 subweb/path/imagename.png.

【讨论】:

  • 这就是我的目标:)
猜你喜欢
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 2015-02-05
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多