• Как десилиризовать объект?

    pro-dev
    @pro-dev Автор вопроса
    Антон Шаманов, смущает, но мне строка приходит уже с unserialize, поэтому применение вашей функции дает двойной десериализатор
  • Как десилиризовать объект?

    pro-dev
    @pro-dev Автор вопроса
    Я так пробовал https://ideone.com/yg5INq
    Пишет ошибку
    PHP Warning: unserialize() expects parameter 1 to be string, object given in /home/3g9zap/prog.php on line 5
  • Как использовать notifier?

    pro-dev
    @pro-dev Автор вопроса
    BoShurik, блин, жаль) но все равно спасибо. Я вот тоже не использовал, но многие отправки каналов и подписчики вынуждают обратить внимание на этот компонент) Он многофункциональный. Поэтому думаю как лучше его использовать)
  • Как использовать notifier?

    pro-dev
    @pro-dev Автор вопроса
    BoShurik, понял. Значит я мыслил правильно. Меня запутала одна вещь:
    1. Это то, что здесь нет Управление подписчиками из базы, из-за этого я что-то затупил)
    2. Это то, что в компоненте идёт наследование от базового Notification. И в документации для email используется он, а для остальных SmsMessege. И тут я запутался потому, что увидел там EmailMessage. И я не понял почему тогда используют не его, а Notification для отправки писем...)
  • Как использовать notifier?

    pro-dev
    @pro-dev Автор вопроса
    BoShurik, понял) а по остальному можете прокомментировать? По самому notifier?
  • Как использовать notifier?

    pro-dev
    @pro-dev Автор вопроса
    Daria Motorina, подхватывает он через канал отправки. Вот от сюда. Подскажите слак канал?
  • Как использовать notifier?

    pro-dev
    @pro-dev Автор вопроса
    Daria Motorina, смотрите. Сейчас попробую объяснить на коде))

    1. Создаем событие «Пользователь зарегистрирован»
    class UserRegistered extends Event
    {
        public const NAME = 'user.registered';
    
        protected $user;
    
        public function __construct(User $user)
        {
            $this-> user = $user;
        }
    
        public function getUser()
        {
            return $this->user;
        }
    }

    2. Отправляем его в диспетчер событий
    use Symfony\Component\EventDispatcher\EventDispatcher;
    
    $dispatcher = new EventDispatcher();
    
    $user = new User();
    $event = new UserRegistered($user);
    
    $dispatcher->dispatch($event, UserRegistered::NAME);


    Здесь всё понятно и просто. Но дальше....

    3. Создаем NotificationMessage
    class NotificationMessage
    {
        private $content;
        private $type;
        private $subject;
    
        public function __construct(string $type, $subject, string $content)
        {
            $this->type = $type;
            $this->content = $content;
            $this->subject = $subject;
        }
    
        public function getType(): string
        {
            return $this->type;
        }
    
        public function getSubject(): string
        {
            return $this->subject;
        }
    
        public function getContent(): string
        {
            return $this->content;
        }
    }


    Или нужно по каждому каналу свой Message? В библиотеке https://github.com/symfony/notifier они отдельно есть. И тут я не понял как лучше...
    4. Создаем подписчика события «Пользователь зарегистрирован»

    class NotificationSubscriber implements EventSubscriberInterface
    {
        private $twig;
        private $bus;
    
        public function __construct(Environment $twig, MessageBusInterface $bus)
        {
            $this->twig = $twig;
            $this->bus = $bus;
        }
    
        public static function getSubscribedEvents()
        {
            return [
                UserRegistered::NAME => 'onNotification',
            ];
        }
    
        public function onNotification(UserRegistered $event)
        {
            $notification = new NotificationMessage(
                UserRegistered::NAME,
                sprintf('Пользователь %s зарегистрирован', $event->getUser()->getName()),
                $this->twig->render('notification/user-created.twig')//Шаблон User Created
            );
    
            $this->bus->dispatch($notification);
        }
    }


    И вот теперь
    Создаем NotificationHandler
    use App\Model\Notification\Entity\Subscriber\SubscriberRepository;
    use App\Model\Notification\Entity\Subscriber\Subscriber;
    use Symfony\Component\Notifier\Notification\Notification;
    use Symfony\Component\Notifier\NotifierInterface;
    use Symfony\Component\Notifier\Recipient\Recipient;
    use Twig\Environment;
    
    class NotificationHandler implements MessageHandlerInterface
    {
        private $subscribers;
        private $notifier;
        private $texter;
    
        public function __construct(SubscriberRepository $subscribers, NotifierInterface $notifier, TexterInterface $texter)
        {
            $this->subscribers = $subscribers;
            $this->notifier = $notifier;
            $this->texter = $texter;
        }
    
        public function __invoke(NotificationMessage $message)
        {
            /** @var Subscriber[] $subscribers */
            $subscribers = $this->subscribers->getAllActiveForType($message->getType());
    
            foreach ($subscribers as $subscriber) {
                foreach ($subscriber->getChannels() as $channel) {
                    if ($channel->isForChannel('email')) {
                        $notification = (new Notification($message->getSubject()))
                            ->content('You got a new invoice for 15 EUR.');
    
                        // The receiver of the Notification
                        $recipient = new Recipient(
                            $subscriber->getEmail(),
                            $subscriber->getPhone()
                        );
    
                        // Send the notification to the recipient
                        $this->notifier->send($notification, $recipient);
                    }
    
                    if ($channel->isForChannel('sms')) {
                        $sms = new SmsMessage(
                            $subscriber->getPhone(),
                            $message->getContent()
                        );
    
                        $this->texter->send($sms);
                    }
    
                    if ($channel->isForChannel('service')) {
                        $service = new ServiceMessage(
                            $recipient,
                            $message->getSubject(),
                            $message->getContent()
                        );
    
                        $this->servicer->send($service);
    
                    }
                }
            }
        }
    }


    Всё ли верно? Либо я что-то не так понял?))) У меня по большей степени вопрос к NotificationHandler. Не думаю, что он верно сделан. Нужно ли мне делать свой NotificationMessage. Может быть использовать просто от Symfony Notifier?
  • Как использовать notifier?

    pro-dev
    @pro-dev Автор вопроса
    Спасибо за ответ!)
    1.1 Здесь вы имеете ввиду Event Dispatcher?
    1.2 Правильно ли с понял, что в каждом обработчике события мы создаём уведомление и в базу и в шину через Messenger?

    В целом я примерно так и представлял, только что-то не складывается у меня в голове немного все) Если вы делали у вас есть Symfony пример для этой реализации? Вы использовали Symfony компоненты или Laravel? Я что-то не очень могу допереть как это сделать. Вроде просто и в документации примеры есть. Но у меня ещё добавляется база. И тут всё в моей голове ломается(
  • Почему ругается Undefined offset: 18145?

    pro-dev
    @pro-dev Автор вопроса
    Gennady S, понятнее, но накладнее)))
  • Почему ругается Undefined offset: 18145?

    pro-dev
    @pro-dev Автор вопроса
    $companyStatistics = [];
    if (!isset($companyStatistics[123]['company_views'][123])) {
        $companyStatistics[123]['company_views'][123] = 0;
    }
    $companyStatistics[123]['company_views'][123]++;
  • Почему ругается Undefined offset: 18145?

    pro-dev
    @pro-dev Автор вопроса
    Я и сам запутался)) Что-то не пойму как теперь выйти из ситуации. Код писал давно, на версии php5.6 работало, а на php7.4 стало выдавать ошибку
  • Как исправить ошибку в mysql бекап?

    pro-dev
    @pro-dev Автор вопроса
    Лентюй, да. Уже видел) Спасибо!
  • Как исправить ошибку в mysql бекап?

    pro-dev
    @pro-dev Автор вопроса
    Лентюй, то есть нужны права
    GRANT ALL PRIVILEGES ON *.* TO 'admin_root'@'localhost' WITH GRANT OPTION
    ?
  • Как исправить ошибку в mysql бекап?

    pro-dev
    @pro-dev Автор вопроса
    Spartak (Web-StyleStudio), нет тут не в этом проблема)) Именно права. Раньше работало. Сейчас нет
  • Как исправить ошибку в mysql бекап?

    pro-dev
    @pro-dev Автор вопроса
    Spartak (Web-StyleStudio), Разве "GRANT ALL PRIVILEGES" не достаточно иметь?
  • Как исправить ошибку в mysql бекап?

    pro-dev
    @pro-dev Автор вопроса
    Александр,
    mysql> show grants for admin_root@localhost;
    +-------------------------------------------------------------------------------------+
    | Grants for admin_root@localhost                                                     |
    +-------------------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'admin_root'@'localhost'                                      |
    | GRANT ALL PRIVILEGES ON `main_data`.* TO 'admin_root'@'localhost' WITH GRANT OPTION |
    +-------------------------------------------------------------------------------------+
    2 rows in set (0.00 sec)
  • Как исправить ошибку в mysql бекап?

    pro-dev
    @pro-dev Автор вопроса
    twobomb, да, но они вроде бы есть. У меня один пользователь admin_root. Пытался дать права, но получаю опять ошибку
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin_root'@'localhost';
    ERROR 1045 (28000): Access denied for user 'admin_root'@'localhost' (using password: YES)
  • Какие могут быть альтернативы OpenVPN?

    pro-dev
    @pro-dev Автор вопроса
    paran0id, хорошо. А вообще есть ли какие-то альтернативы хорошие? Или OpenVPN является самым лучшим решением?
  • Какие могут быть альтернативы OpenVPN?

    pro-dev
    @pro-dev Автор вопроса
    а обновление самого OpenVPN может как-то сломать доступ? Просто сейчас боюсь что-то трогать и обновлять. Пропадет доступ и будет проблема.