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

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


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

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

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

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

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

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

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

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

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

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


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