powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Yii. Подмена Yii::app()->user
10 сообщений из 10, страница 1 из 1
Yii. Подмена Yii::app()->user
    #38299039
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.

Возник такой вопрос, нужно в Yii автоматизировать часть процессов. То есть, при вызове одного action, если в определённый момент выполнились некоторые условия, надо вызвать другой action с определёнными условиями, среди них:
1. Подмена POST данных
2. Подмена Yii::app()->user

Как понимаете, с первым проблем нету... А вот со вторым... при попытке подменить user - получаю ошибку, что данное свойство только для чтения.
Возможно я не правильный путь выбрал? Или если данную задумку можно довести до конца, прошу помочь с этим.

Сам код компонента, который читает из базы данные по запуску action и запускает его.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
<?php 
class CAutomatization extends CComponent{
  public static function fireEvent($eventName, $params){
    $ev = Automatization::model()->findByPk($eventName);
    Yii::import("{$ev->alias}.{$ev->controller}", true);
    $controller= new $ev->controller("automatization_{$ev->controller}");
    $controller->init();
    $action=$ev->action;
    $controller->beforeAction($action);
    $post = $_POST;
    $prePost = $ev->post!='' ? CJSON::decode($ev->post) : array();
    $_POST = array_merge($prePost, $params);
    $user = Yii::app()->user;
    switch($ev->user){
      case 'current': 
        Yii::app()->user=Yii::app()->user; 
        break;
      case 'system':
        $u = new User();
        $u->setAttributes(
            array(
                'name'  => 'name',
                'email' => 'mail@email.ru',
                'phone' => '8 (800) xxx-xx-xx' 
            ), 
            true
        );
        Yii::app()->user=$u; //тут ошибка
        break;
    }
    ob_start();
    $controller->$action();
    $res = ob_end_clean();
    Yii::app()->user = $user; //тут тоже ошибка по идее
    $_POST = $post;
  }
}
?>



Заранее благодарен за любые подсказки и помощь
...
Рейтинг: 0 / 0
Yii. Подмена Yii::app()->user
    #38299097
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переписывайте класс компонента Yii::app()->user
...
Рейтинг: 0 / 0
Yii. Подмена Yii::app()->user
    #38299098
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только это извращенство какое-то
...
Рейтинг: 0 / 0
Yii. Подмена Yii::app()->user
    #38299099
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только я вот не понимаю, зачем вам переназначать
Код: php
1.
Yii::app()->user=$u; //тут ошибка


?
...
Рейтинг: 0 / 0
Yii. Подмена Yii::app()->user
    #38299109
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и вообще, Yii::app()->user - Это инстанс CWebUser , а вы туда экземпляр унаследованный от CActiveRecord пихаете не понятно зачем даже.
...
Рейтинг: 0 / 0
Yii. Подмена Yii::app()->user
    #38299128
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettДа и вообще, Yii::app()->user - Это инстанс CWebUser , а вы туда экземпляр унаследованный от CActiveRecord пихаете не понятно зачем даже.

Я же говорю, возможно не прав в выборе метода решения вопроса. Основная задача состоит в том, что бы запустить один экшен из другого, но для запускаемого должен быть определён свой пользователь и свои пост данные.

А по поводу подмены user вообще ничего подобного в инэте не нашёл, потому и начал изобретать... соответственно не удивительно что с грубыми ошибками, так как yii знаю поверхностно...

Прошу совета, как это сделать вообще можно. Подскажите, очень надо... по хорошему мне завтра с процессом автоматизации закончить надо, а у меня только половина работы сделана (и та как видите не работает полноценно) :)

P.S. Изначально не знал, что с перезаписью юзера возникнут проблемы... Было 2 выхода: внедрять в уже готовый код кучу разных дописываний, или же создать компонент подобный тому, что я показал. Второе казалось легче, вот я и решил по этому пути пойти.
...
Рейтинг: 0 / 0
Yii. Подмена Yii::app()->user
    #38299138
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вынесите из контролера код, который вы хотите применять, в отдельный метод и вызывайте его с необходимыми параметрами (данными), подменять данные в посте и подменять юзера подобным образом - очень говнокодно.
...
Рейтинг: 0 / 0
Yii. Подмена Yii::app()->user
    #38299139
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettДа и вообще, Yii::app()->user - Это инстанс CWebUser , а вы туда экземпляр унаследованный от CActiveRecord пихаете не понятно зачем даже.

УРА! Спасибо... Ваше сообщение было очень информативным. Посмотрел описание класса CWebUser, а там написано, что если для свойства данного класса был определён метод __set, то оно может быть установлено... удалил все попытки подменить пользователя и начал просто подменять нужные данные (те, которые нужны будут использоваться в данных экшенах).

Большое спасибо.

Кстати, если есть идеи, как сделать лучше и более правильно, напишите пожалуйста, так как это делается сейчас, что бы быстро (до завтра). В идеале хотелось бы переписать так, как должно быть.
...
Рейтинг: 0 / 0
Yii. Подмена Yii::app()->user
    #38299145
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выше написал уже)
...
Рейтинг: 0 / 0
Yii. Подмена Yii::app()->user
    #38299160
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettвыше написал уже)

Ладно... учитывая объём, кода получится не меньше. Тогда буду просто нужные участки переопределять (в перспективе получится лучше, так как в ином случае надо будет правильно отслеживать статистику событий, а это гемор).

Спасибо за совет. Думаю тему можно закрыть.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Yii. Подмена Yii::app()->user
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]