Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Symfony конфигурация бандла через DI Service
jetistyum  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 2611
Пользователь №: 5568
На форуме: 9 лет, 1 месяц, 9 дней
Карма: 30




Только начал разбираться с Symfony, до этого опыта не имел.
Пытаюсь передать в бандл - конфигурацию параметр из вызова метода сервиса, но получаю ошибку

Symfony Version: 2.8

ServiceNotFoundException in
CheckExceptionOnInvalidReferenceBehaviorPass.php line 58:
The service "twig" has a dependency on a non-existent service
"=service('app.service.myservice').gethellostring()".


Пример:

services.yml:

...
app.service.myService:
class: AppBundle\Service\MyService
...


config.yml:

...
twig:
globals:
helloString: "@=service('app.service.MyService').getHelloString()"
...


Если таким же образом пытаюсь передавать параметр в конфигурацию другого сервиса, все работает.
подскажите как решить данную проблему.
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 2047
Пользователь №: 38654
На форуме: 3 года, 7 месяцев, 15 дней
Карма: 47





...
twig:
globals:
helloString: "@=service('app.service.MyService').getHelloString()"
...

Такое считается нормально практикой для этого компонента или ты придумал сам такой подход?


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог | SetCMS
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
jetistyum  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 2611
Пользователь №: 5568
На форуме: 9 лет, 1 месяц, 9 дней
Карма: 30




Я пока понятия не имею как это "должно быть".
Гипотетически я нашел возможность конфигурации других сервисов таким образом, как я показал выше -там все работает. Но когда пытаюсь сделать так же для бандлов, вылетает ошибка. Предполагаю что бандлы оно конфигурирует прежде, чем сервисы. И на момент конфигурации бандла twig этого сервиса еще не существует.

Более конкретно что мне нужно: В конфиг нек-рых бандлов передать параметры которые я получу из API в рантайме.

С Symfony знаком "без году неделю", возможно пошел по неверному пути.

PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11976
Пользователь №: 23195
На форуме: 7 лет, 24 дня
Карма: 436

Трезвый :
7 лет, 11 месяцев, 24 дня


Цитата (jetistyum @ 18.07.2017 - 17:33)
В конфиг нек-рых бандлов передать параметры которые я получу из API в рантайме.

По идее, это можно сделать в кастомном compiler pass'е (https://symfony.com/doc/current/service_container/compiler_passes.html):

namespace AppBundle;

use AppBundle\DependencyInjection\Compiler\MyCompilerPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;

class AppBundle extends Bundle
{
public function build(ContainerBuilder $container)
{
parent::build($container);
$container->addCompilerPass(new MyCompilerPass());
}
}


namespace AppBundle\DependencyInjection\Compiler;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;

class MyCompilerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$container->prependExtensionConfig('twig', [
'globals' => [
'bar' => $container->get('app.foo_service')->getBar(),
],
]);

}
}


Но в случае с конкретно твигом это не прокатывает, т.к. шаблоны, видимо, компилируются до компиляции контейнера:

Цитата
Variable "bar" does not exist.
...
<div>{{ dump(bar) }}</div>


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11976
Пользователь №: 23195
На форуме: 7 лет, 24 дня
Карма: 436

Трезвый :
7 лет, 11 месяцев, 24 дня


Через extension у меня получилось добавить глобал:

namespace AppBundle\DependencyInjection;

use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

class AppExtension extends Extension implements PrependExtensionInterface
{
public function load(array $configs, ContainerBuilder $container)
{

}


public function prepend(ContainerBuilder $container)
{
$container->prependExtensionConfig('twig', [
'globals' => [
'bar' => $container->get('app.foo_service')->getBar(),
],
]);

}

}


В общем, кури мануал https://symfony.com/doc/2.8/components/depe...ompilation.html :)


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11976
Пользователь №: 23195
На форуме: 7 лет, 24 дня
Карма: 436

Трезвый :
7 лет, 11 месяцев, 24 дня


Ах, да, и еще. Бочка дегтя: по умолчанию конфиг после компиляции кэшируется tongue.gif


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
jetistyum  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 2611
Пользователь №: 5568
На форуме: 9 лет, 1 месяц, 9 дней
Карма: 30




Пока плююсь и не могу понять почему тут все таким образом реализуется .. smile.gif (В Symfony)
Откуда эта любовь к темплейтным движкам....
Почему нельзя сконфигурировтаь бандл налету.....
Одни вопросы.
Спасибо за подсказку, буду пытаться понять что к чему. Покурю доки.
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 2047
Пользователь №: 38654
На форуме: 3 года, 7 месяцев, 15 дней
Карма: 47




jetistyum, потому что слишком много сервисного кода и мета-данных, если не использовать кэши и прегенирацию шаблонов, то производительность пробивает дно.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог | SetCMS
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
jetistyum  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 2611
Пользователь №: 5568
На форуме: 9 лет, 1 месяц, 9 дней
Карма: 30




Цитата (chee @ 19.07.2017 - 10:58)
jetistyum, потому что слишком много сервисного кода и мета-данных, если не использовать кэши и прегенирацию шаблонов, то производительность пробивает дно.


Для меня это не ответ на вопрос, зачем создавать еще один (шаблонный) язык программирования чтобы потом его транслировать в php файл, на язык, который ты уже знаешь, и который был разработан когда-то, как язык шаблонов smile.gif
Тоесть почему бы не писать шаблоны на native-php, как в Yii например. Без прослойки в виде twig

Гембель от twig я получил, а плюсов не вижу
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 2047
Пользователь №: 38654
На форуме: 3 года, 7 месяцев, 15 дней
Карма: 47




jetistyum, воу воу, охлади траханье. Ты можешь использовать php шаблоны, http://symfony.com/doc/current/templating/PHP.html.


--------------------
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации

Мой блог | SetCMS
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11976
Пользователь №: 23195
На форуме: 7 лет, 24 дня
Карма: 436

Трезвый :
7 лет, 11 месяцев, 24 дня


jetistyum
никто не заставляет тебя использовать twig


--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
jetistyum  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 2611
Пользователь №: 5568
На форуме: 9 лет, 1 месяц, 9 дней
Карма: 30




Да, да, понимаю, что не заставлят smile.gif но "так исторически сложилось" что конфиги через yml (который парсится в php-массивы ) и темплейты через twig, которые транслируются в native-php массивы.
Я так и вижу как кто-то стоял и решал, а давайте запилим конфигурацию для нашего фреймворка. Как мы будем это делать? может сделаем инклюд файлика с описанием ассоциативного массива? Нее, не серьезно! Сделаем конфигурацию на YML, заставим юзеров учить еще один язык разметки, напишем транслятор YML в php.
Та же фигня похоже была и с языком шаблонов smile.gif

Да, да, знаю что не заставляют, но судя по всему все так учатся, поэтому мой код в наследие получил все шаблоны на twig-е и конфиги на Yaml.

user posted image

PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Oyeme  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Reality is wrong. Dreams are for real
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1731
Пользователь №: 16955
На форуме: 8 лет, 5 месяцев, 22 дня
Карма: 96




Цитата
Я так и вижу как кто-то стоял и решал, а давайте запилим конфигурацию для нашего фреймворка. Как мы будем это делать? может сделаем инклюд файлика с описанием ассоциативного массива? Нее, не серьезно! Сделаем конфигурацию на YML, заставим юзеров учить еще один язык разметки, напишем транслятор YML в php.
Та же фигня похоже была и с языком шаблонов


Тебя никто не заставляет вообше что-то учить. Можешь этого не делать.
wink.gif


--------------------
Programming: Private lessons via skype £45/h

Частные уроки в Лондоне / удаленно по skype.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
jetistyum  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 2611
Пользователь №: 5568
На форуме: 9 лет, 1 месяц, 9 дней
Карма: 30




Цитата (Oyeme @ 21.07.2017 - 13:02)


Тебя никто не заставляет вообше что-то учить. Можешь этого не делать.
wink.gif

Спасибо чувак, это очень важный комментарий! smile.gif
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса