• Как правильно делать события в Yii2?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    В вашем случае нет той части, которая подписана на событие. Вы его возбуждаете, но его никто не слушает.

    Вот ваш пример, только через глобальные события:
    class MessageSendEvent extends Event
    {
        const EVENT_MESSAGE_SEND = 'message-send-event';
    
        /**
         * @var string
         */
        public $message;
    
        /**
         * ...
         */
        public function send ()
        {
            echo $this->message;
        }
    }

    Теперь подписываемся и "слушаем" событие:
    # Вешаем обработчик события
    Yii::$app->on( MessageSendEvent::EVENT_MESSAGE_SEND, function ( MessageSendEvent $event ) {
        $event->send();
    } );

    И в нужный момент возбуждаем его:
    # Инициируем событие
    Yii::$app->trigger(
        MessageSendEvent::EVENT_MESSAGE_SEND,
        new MessageSendEvent( [
            'message' => 'Сообщение!'
        ] )
    );


    Но блин, у вас тут такой оверхед, что подобный пример нет смысла использовать. Проще вызвать самому ->send() и все, без всяких там событий.

    UPD: Объект Event, он по сути является носителем данных. Сам он НЕ должен выполнять работу. Он лишь должен доставить нужные данные воркеру, а воркер содержит всю логику.
    Ответ написан
    6 комментариев
  • Yii Chtml::tag, из за происходит вывод несуществующего символа?

    ivankomolin
    @ivankomolin
    При вызове метода tag() третьим параметром передается содержимое тега, если же нужен одиночный тег, то можно передать false.

    Т.к. вы передаете true, то это значение автоматически преобразуется в 1 и печатается как содержимое тега
    ------------------------------------------------------------------------------------------------------------------------
    Этот код:
    CHtml::tag('i', array('class'=>'glyphicon glyphicon-user'), false)

    Сформирует это:
    <i class="glyphicon glyphicon-user" />
    ------------------------------------------------------------------------------------------------------------------------
    Этот код:
    CHtml::tag('i', array('class'=>'glyphicon glyphicon-user'), '');

    Сформирует это:
    <i class="glyphicon glyphicon-user"></i>
    ------------------------------------------------------------------------------------------------------------------------
    Ответ написан
    3 комментария