За последние 24 часа нас посетили 38887 программистов и 8146 роботов. Сейчас ищет 1691 программист ...

Где собирать сервис?

Тема в разделе "PHP для новичков", создана пользователем Вероломство, 18 авг 2023.

  1. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    Я собираю в контейнере

    PHP:
    1. return function (Container $container) {
    2.     $container->set(PDO::class, function () use ($container) {
    3.         return new PDO(
    4.             $container->get('database')['dsn'],
    5.             $container->get('database')['username'],
    6.             $container->get('database')['password'],
    7.             $container->get('database')['options']
    8.         );
    9.     });
    10. };
    Потом в промежуточном передаю

    PHP:
    1. class DatabaseMiddleware implements MiddlewareInterface
    2. {
    3.     public function __invoke(Request $request, App $app): Response
    4.     {
    5.         Connection::setPDO($app->getContainer()->get(PDO::class));
    6.  
    7.         return $app($request);
    8.     }
    9. }
    10.  
    11. class Connection
    12. {
    13.     private static $callback;
    14.     private static $PDO;
    15.  
    16.     public static function getPDO(): PDO
    17.     {
    18.         return self::$PDO ?? self::$PDO = call_user_func(self::$callback);
    19.     }
    20.  
    21.     public static function setPDO(PDO $PDO): void
    22.     {
    23.         self::$callback = function () use ($PDO) {
    24.             return $PDO;
    25.         };
    26.     }
    27. }
    Так может быть сразу при сборке передать или собирать в промежуточном и передать?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    А нафиг такой connection сдался? Контейнер самописный, автовайрить не умеет?
     
    Вероломство нравится это.
  3. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    626
    Симпатии:
    24
    @mkramer там обёртка ActiveRecord на статике :)

    автовайрить умеет, но мне чтобы её автовайрить, то нужно на динамику переписывать, а при динамике там бред получится: я автовайрю модель (получаю УЖЕ ЭКЗЕМПЛЯР ТАБЛИЦЫ), присваиваю её свойству, а от свойства использую методы для работы с БД присваивая их результаты переменным, мне так неудобно, на статике я просто делаю User::findOne(1)

    поэтому у меня коннект статикой прилетает, я в контейнер PDO собираю на случай вдруг запилю что другое, пока что так