Задать вопрос
  • Как правильно передать скалярные параметры в сервис (проект Symfony)?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    > плюс, указание классов сервисов через параметры - так уже лет 10 никто не пишет, пользы от этого нет

    Года 4 или 5 назад на работе только так и юзали, поэтому по старой памяти и использовал. Понял, поправлю спасибо!

    ---

    > Если делаете бандлы, то автовайринг по-хорошему использовать не надо. Все сервисы надо объявлять ручками

    Правильно ли я понял, что этот блок
    _defaults:
        autowire: true
        autoconfigure: true
        public: false


    Убрать или указать везде false? И про автоваринг, у меня по коду есть базовый (абстрактный класс) для экшенов
    <?php
    
    namespace Bundles\CurrencyConverterBundle\Action;
    
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Contracts\Service\Attribute\Required;
    use Symfony\Contracts\Translation\TranslatorInterface;
    
    abstract class BaseAction extends AbstractController
    {
        protected TranslatorInterface $translator;
    
        #[Required]
        public function setTranslator(TranslatorInterface $translator): void
        {
            $this->translator = $translator;
        }
    
        protected function trans(
            string $id,
            array $parameters = [],
            string $domain = 'CurrencyConverterBundle',
            string $locale = null
        ): string {
            return $this->translator->trans(
                id: $id,
                parameters: $parameters,
                domain: $domain,
                locale: $locale
            );
        }
    }


    Так лучше тоже не делать? Опять таки данный пример я сделал по памяти, как делал ранее. Но вы высказали, что так лучше не делать. Или автоваринг стандартных сервисов symfony Допускается?
    Написано
  • Как правильно передать скалярные параметры в сервис (проект Symfony)?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    BoShurik, не стал выносить в отдельный вопрос. Относится к текущему, не сталкивались с такой ошибкой

    Cannot autowire service "currency_converter_bundle.action.add": argument "$currencyApiService" of method "Bundles\CurrencyConverterBundle\Action\AddAction::__construct()" references class "Bundles\CurrencyConverterBundle\Service\CurrencyApiService" but no such service exists. You should maybe alias this class to the existing "currency_converter_bundle.service.currency_api" service.


    Вынес бандл в отдельную директорию bundles/CurrencyConverterBundle, прописал новое пространство имен в composer.json

    И не могу понять суть претензии symfony :) он с одной стороны видит сервис, а с другой нет. Я решение нашел, но хотелось бы понять.

    Нерабочий вариант (когда появляется ошибка)
    parameters:
      currency_converter_bundle.translation_domain: CurrencyConverterBundle
      # Class actions:
      currency_converter_bundle.action.dashboard.class: Bundles\CurrencyConverterBundle\Action\DashboardAction
      currency_converter_bundle.action.list.class: Bundles\CurrencyConverterBundle\Action\ListAction
      currency_converter_bundle.action.add.class: Bundles\CurrencyConverterBundle\Action\AddAction
      currency_converter_bundle.action.edit.class: Bundles\CurrencyConverterBundle\Action\EditAction
      currency_converter_bundle.action.convert.class: Bundles\CurrencyConverterBundle\Action\ConvertAction
      # Class services:
      currency_converter_bundle.service.currency_api.class: Bundles\CurrencyConverterBundle\Service\CurrencyApiService
    
    services:
      _defaults:
        autowire: true
        autoconfigure: true
        public: false
    
      # Actions
      currency_converter_bundle.action.dashboard:
        class: '%currency_converter_bundle.action.dashboard.class%'
      currency_converter_bundle.action.list:
        class: '%currency_converter_bundle.action.list.class%'
      currency_converter_bundle.action.add:
        class: '%currency_converter_bundle.action.add.class%'
      currency_converter_bundle.action.edit:
        class: '%currency_converter_bundle.action.edit.class%'
      currency_converter_bundle.action.convert:
        class: '%currency_converter_bundle.action.convert.class%'
    
      # Services
      currency_converter_bundle.service.currency_api:
        class: '%currency_converter_bundle.service.currency_api.class%'
        arguments:
          - '@http_client'
          - '@logger'
          - '%currency_converter.api_key%'
          - '%currency_converter.api_url%'


    Рабочий вариант (когда появляется ошибка)
    parameters:
      currency_converter_bundle.translation_domain: CurrencyConverterBundle
      # Class actions:
      currency_converter_bundle.action.dashboard.class: Bundles\CurrencyConverterBundle\Action\DashboardAction
      currency_converter_bundle.action.list.class: Bundles\CurrencyConverterBundle\Action\ListAction
      currency_converter_bundle.action.add.class: Bundles\CurrencyConverterBundle\Action\AddAction
      currency_converter_bundle.action.edit.class: Bundles\CurrencyConverterBundle\Action\EditAction
      currency_converter_bundle.action.convert.class: Bundles\CurrencyConverterBundle\Action\ConvertAction
    
    services:
      _defaults:
        autowire: true
        autoconfigure: true
        public: false
    
      # Actions
      currency_converter_bundle.action.dashboard:
        class: '%currency_converter_bundle.action.dashboard.class%'
      currency_converter_bundle.action.list:
        class: '%currency_converter_bundle.action.list.class%'
      currency_converter_bundle.action.add:
        class: '%currency_converter_bundle.action.add.class%'
      currency_converter_bundle.action.edit:
        class: '%currency_converter_bundle.action.edit.class%'
      currency_converter_bundle.action.convert:
        class: '%currency_converter_bundle.action.convert.class%'
    
      # Services
      Bundles\CurrencyConverterBundle\Service\CurrencyApiService:
        arguments:
          - '@http_client'
          - '@logger'
          - '%currency_converter.api_key%'
          - '%currency_converter.api_url%'


    Я не помню работал ли я с alis в принципе, соответственно не могу понять что от меня symfony хочет. Не подскажите как нерабочий вариант сделать рабочим? :)
    Написано
  • Как правильно передать скалярные параметры в сервис (проект Symfony)?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    BoShurik, офигень! Вы волшебник :)) точно, я как-то даже не подумал о процессе формирования контейнера и что такая фот фигня может произойти о_О

    Исключил из автоварианга бандл и все завелось. И можно у вас ещё один вопрос по теме спросить. Если нужно собрать функционал и максимально его изолировать от приложения и нет желания/возможности оформлять его в отдельный composer пакет - получается лушче его из src/ вынести и разместить рядом (например в директории models, bundles)? Как вы вы поступили?

    P.S. продублируйте ответом последний свой пост, я его помечу решением - очень помогли!
    Написано
  • Как правильно передать скалярные параметры в сервис (проект Symfony)?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    BoShurik, изначально делал делал бандл с прицелом на то, что в проекте будут объявлены две переменные в .env. Они будут переданы в бандл из config/packages/test.yaml
    test:
      a: 'aaa'
      b: 'bbb'


    Но словив подобную ошибку я стал уменьшать функционал бандла, что бы уменьшить пути её возможного возникновения. И никак не удавалось.

    На текущий момент бандл просто подключен

    config/bundles.php
    <?php
    
    return [
        # System Bundles:
        // ...
        # Custom Bundles:
        App\TestBundle\TestBundle::class => ['all' => true],
    ];


    config/routes.yaml
    # ...
    
    test_bundle:
        resource: '@TestBundle/Resources/config/routes.yaml'
        type: yaml


    В src/TestBundle/Resources/config/routes.yaml объявлен один маршрут
    test_action:
      path: /test
      controller: src/TestBundle/Action/TestAction
      methods: [ GET ]


    Все, больше функционала нет. Причем если инжектировать сервисы вроде @http_client, @logger - проблем никаких нет, а вот с строками, массивами DI Не проходит.

    Причем эта ошибка возникает как при попытке перейти по /test, Так и если попробовать что-то сделат ьв консоли
    Написано
  • Как исправить ошибку при выполнении api:upgrade-resource (api-platform/core:^2.7)?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    tukreb, руками тоже пробовал. То есть поднять до 3 версии. После начал переписывать, помимо вышеперечисленных проблем, есть проблема с генерацией маршрутов. Вроде этой

    66a268f37fc96385924685.png

    Есть предположение, что в 3 версии нужно url указывать в атрибутах сущностей

    66a2695b85045924479361.png

    Но опять таки - четкого понимания нет, так как я впервые вижу настолько странный и нерабочий гайдлайн по миграции мажорных версий. Я по этой причине и тему создал, так как стал сомневаться, что все правильно делаю или может какой-то тайный смысл не уловил
    Написано
  • Как исправить ошибку при выполнении api:upgrade-resource (api-platform/core:^2.7)?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Виктор Кожухарь, tukreb пробовал - не работает, в частности есть проблемы с видоизменением collectionOperations и itemOperations - в третьей версии нет возможности в new GetCollections указать требуемые методы, а внутри этих методов доп опции (контекст, ролевку).

    Соответственно, код подобный этому - rector просто не понимает

    66a262535768e990250843.png

    Его я пробовал до моих попыток пройти миграцию согласно гайдлайну с официального сайта. А условно преобразовать @ApiResource() в #[ApiResource(...)] - можно или руками или тем же rector
    Написано
  • Как исправить ошибку при выполнении api:upgrade-resource (api-platform/core:^2.7)?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    tukreb, это сейчас шутка такая? в 3 версии используются атрибуты, во второй (до 2.7) аннотации. В 2.7 добавлена команда, которая по идеи должна конвертировать аннотации в атрибуты.

    Никакого профита в вашем предложение нет, проект просто ломается и все.
    Написано
  • Bitrix как создать компонент, к которому будет доступ по ссылке?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Максим Ткачев, vk я привел для примера. В этом компоненте должны обрабатываться все имеющиеся соц.сети (пока их 3, но в дальнейшем возможно и увеличится). Фактически функционал не будет ограничиваться отвязкой и привязкой, в дальнейшем возможно необходимо будет реализовать специфическую логику, а привязка и отвязка - это то, с чего я планировал начать...но как-то не "взлетает"

    По комплексному компоненту, насколько я смог понять из материала, который я прочитал - это компонент с дочерними (в нем) компонентами. Мне такой сложности не надо. Если отойти от кода и сказать своими сломами: "Мне нужно иметь простенький компонент (либо что-то аналогичное), без шаблона, который бы при переходе по определенным url (/network/link/?name=vk, /network/unlink/?name=ok, /network/update/?name=lider) производил те или иные действия".

    То есть простыми словами обработчик нужен, который можно поддерживать и при необходимости расширять. Из каких-то доп.требований у меня должен быть доступ к глобальному $USER (что бы понимать, что пользователь авторизован и с каким пользователем "работать"). И по возможности, насколько позволяют мне не глубокие знания, сильно не наговнокодить и маломальски придерживаться структуры битрикса.

    Поэтому и решил попросить помощи у людей с опытом.

    P.S. по поводу курса - спасибо, по мере сил буду изучать материал с самых основ.
    Написано
  • Bitrix как создать компонент, к которому будет доступ по ссылке?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Максим Ткачев, не спорю насчет изучения документации. Но есть определенная задача, которую уже надо решить и меня к сожалению особо не спрашивали знаю я битрикс или нет. Могли бы если не подсказать, но указать на справочный материал, который бы помог в решении данной проблемы?
    Написано
  • Как настроить блок AllowedIPs в wireguard на ОС: Fedora 40 или Ubuntu 24.04?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Вариант который вы предложили и этот вариант - эквивалентны или нет?
    Написано
  • Как настроить блок AllowedIPs в wireguard на ОС: Fedora 40 или Ubuntu 24.04?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    ValdikSS,

    * В таком виде не работало
    13.107.0.0/16,104.18.0.0/16,104.21.25.25/32,172.64.0.0/16,172.67.222.11/32,173.194.222.198/32

    * В таком виде стало работать
    13.107.0.0/16,104.18.0.0/16,104.21.25.25/32,172.64.0.0/16,172.67.222.11/32,173.194.222.198/32,8.8.8.8/32


    Больше я ничего не менял. Изменения в резолвере откатил на исходный.
    Написано
  • Как настроить блок AllowedIPs в wireguard на ОС: Fedora 40 или Ubuntu 24.04?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    сначала добавил, как вы сказали - все стало нормально. Но потом на редисе встретил вариант с добавлением , 8.8.8.8/32 в конец AllowedIPs и он тоже работает. То есть выглядит примерно так
    192.168.1.1/16, 192.168.1.1/24, 192.168.1.1/32, 8.8.8.8/32
    . Эти вариант эквивалентны?

    P.S. я так же разбираюсь с таблицей маршрутизацией (что бы туда добавлять нужные правила), но хотелось бы иметь запасной вариант.
    Написано
  • Как настроить блок AllowedIPs в wireguard на ОС: Fedora 40 или Ubuntu 24.04?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Дмитрий, мысль уловил, спасибо за совет. Попробую и отпишусь.
    Написано
  • Как настроить блок AllowedIPs в wireguard на ОС: Fedora 40 или Ubuntu 24.04?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Дмитрий, Поправьте, если я не правильно вас понял.
    Wireguar мне выдает провайдер, подключив услугу я имею конфиг приведенный выше (где нули), я не имею доступ к серверу. На клиенте я это и прописываю. В
    • Windows это приложение wireguard (импортирую конфигурацию) - все работает (и с нулями и со списком нужных мне ip)
    • Fedora 40 / Ubuntu 24.04 (почему я привожу версии, потому что с этих версий ненадо ставить никаких сервисов, импортировать конфиг можно через настройки) - там конфигурация с 0.0.0.0/0 - работает, если я меняю на нужный мне список ip - отваливается интернет
    Написано
  • Как настроить блок AllowedIPs в wireguard на ОС: Fedora 40 или Ubuntu 24.04?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    давайте я перефразирую. Мне нужно реализовать VPN только на нескольких сайтах. С добавлением в данную секцию нужных мне ip c маской в рамках ОС я решил свою проблему, сейчас пытаюсь решить её в рамках Linux и у меня не выходит.

    Давайте приведу пример:

    1. site1.com (192.168.01) + у него свои cdn где периодически меняется ip (последняя группа)
    2. site2.com (192.168.02) + у него свои cdn где периодически меняется ip (последняя группа)
    3. site3.com (192.168.03) + у него свои cdn где периодически меняется ip (последняя группа)

    Нужно, что бы VPN работало только на этих сайтах. Подскажите пожалуйста, как это реализовать?
    Написано
  • Как настроить блок AllowedIPs в wireguard на ОС: Fedora 40 или Ubuntu 24.04?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    IP я привел для примера. Вот перечень: 13.107.0.0/16, 104.18.0.0/16, 104.21.25.25/32, 172.64.0.0/16, 172.67.222.11/32, 173.194.222.198/32. По большей части здесь openai + его cdn.

    Меня смущает одно, почему на Windows проблем нет никаких, а на Linux дистрибутивах проблема имеется. Причем даже если я укажу 1 ip с произвольной маской: 13.107.0.0/{16,24,32} - не то что vpn нет, интернет отваливается. Все работает корректно только при 0.0.0.0/0
    Написано
  • Какой аналог itemOperations в api-platform 3 версии?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Тоже в документации встречал new GetCollection(), использовать не стал, так как не совсем понял, как объект коллекции затолкать:
    collectionOperations={
     *       "get"={
     *          "normalization_context"={"groups"="order:list"}
     *       },
     *       "post"={
     *          "security"="is_granted('ROLE_USER')",
     *          "normalization_context"={"groups"="order:list:write"}
     *       }
     *     },

    По сигнатуре не видно ничего напоминающего методы, имею ввиду get, post и т.д. Именно на этом моменте завис
    Написано
  • Ubuntu 22.04 постоянно вылезает "Software updates installed", как убрать?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Valdemar Smörman, не знал о таком приложение. После использование, количество обновлений уменьшилось до одного. Малость погуглил и нашел ещё команду отчистки флэтпак пакетов, которые не используются (flatpak remove --unused), после использования и его - уведомление больше не всплывает.

    Спасибо!
  • Ubuntu 22.04 постоянно вылезает "Software updates installed", как убрать?

    yaleksandr89
    @yaleksandr89 Автор вопроса
    Эту фразу перевел сразу и глушить уведомление не стал целенаправленно, возможно вы не поняли суть вопроса.

    Меня интересует причина возникновения и способы это исправить, так как на последнем скрине видно, что обновления, которые "якобы" устанавливаются при каждой загрузке в систему - дублируются и у меня есть стойкое ощущение, что такого быть не должно.