2013-05-18 4 views
0

Я хочу создать артефакты статей для моего проекта, который использует Doctrine2 и Symfony 2.2.Доктрины и Symfony2 Область запроса

Вот как создаются изделия:

Они не ссылаются на изображения непосредственно, но вместо этого они содержат имена изображений. Прежде чем сохранить статью, мой 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 Способ решения этой проблемы?

+0

Какое сообщение об исключении вы получаете при попытке использовать assetic? – piotrekkr

+1

Где вы храните эти фотографии? В общей папке? – cheesemacfly

+0

@piotrekkr Я получаю '[Symfony \ Component \ DependencyInjection \ Exception \ InactiveScopeException] Вы не можете создать службу (« piflex_website.article.manager ») неактивной области (« запрос »).' –

ответ

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.

+0

Вот к чему я стремился :) – cheesemacfly