Супер глобальная переменная

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
izac
Сообщения: 60
Зарегистрирован: 2012.11.15, 15:43

Супер глобальная переменная

Сообщение izac »

У меня есть 2 контроллера у 1 есть модель и вьюшка у второго нет ,1 контроллер (инфо персонажа ),2 загрузка файлов
так вот из персонажа вызываеться виджет загрузки
в виджете загрузки такой код

Код: Выделить всё

  if(isset($_POST['myPicture'])){
    $myPicture=CUploadedFile::getInstanceByName('myPicture');
    //var_dump($myPicture);
    if(!$myPicture->saveAs('tmp_file'))
        throw new CHttpException(500);
        echo 1;
       copy('tmp_file','protected/uploads/1');
       unlink('tmp_file');
      //throw new CHttpException(500);

    Yii::app()->end();
    
  
} 
вот всёбы хорошо да вот мне както нужно передавать юзера чтобы вставить в имя файла
в контролере персонажа есть такой метод как Yii::app()->user->model->customerid он и выдаёт то злаполучное id если его вывадить по ссылке контролера загрузки он выводиться но при уплоуде нет
есть идеи как это сделать ?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Супер глобальная переменная

Сообщение slavcodev »

"Супер глобальная" - это как? Глобальная - доступна везде, а супер глобальная - видна везде и еще везде везде?
Жду Yii 3!
izac
Сообщения: 60
Зарегистрирован: 2012.11.15, 15:43

Re: Супер глобальная переменная

Сообщение izac »

да как в пхп например $_POST
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: Супер глобальная переменная

Сообщение kosenka »

izac писал(а):У меня есть 2 контроллера у 1 есть модель и вьюшка у второго нет ,1 контроллер (инфо персонажа ),2 загрузка файлов
так вот из персонажа вызываеться виджет загрузки
в виджете загрузки такой код

Код: Выделить всё

  if(isset($_POST['myPicture'])){
    $myPicture=CUploadedFile::getInstanceByName('myPicture');
    //var_dump($myPicture);
    if(!$myPicture->saveAs('tmp_file'))
        throw new CHttpException(500);
        echo 1;
       copy('tmp_file','protected/uploads/1');
       unlink('tmp_file');
      //throw new CHttpException(500);

    Yii::app()->end();
    
  
}
вот всёбы хорошо да вот мне както нужно передавать юзера чтобы вставить в имя файла
в контролере персонажа есть такой метод как Yii::app()->user->model->customerid он и выдаёт то злаполучное id если его вывадить по ссылке контролера загрузки он выводиться но при уплоуде нет
есть идеи как это сделать ?
Можно так:
Yii::app()->params['СУПЕРЕЕ_И_ГЛОБАЛЬНЕЕ_НЕТ']=Yii::app()->user->model->customerid;

А потом Yii::app()->params['СУПЕРЕЕ_И_ГЛОБАЛЬНЕЕ_НЕТ'] использовать там, где надо.
izac
Сообщения: 60
Зарегистрирован: 2012.11.15, 15:43

Re: Супер глобальная переменная

Сообщение izac »

нулл выдаёт пробывал )
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: Супер глобальная переменная

Сообщение kosenka »

izac писал(а):нулл выдаёт пробывал )
кто выдает?
izac
Сообщения: 60
Зарегистрирован: 2012.11.15, 15:43

Re: Супер глобальная переменная

Сообщение izac »

минутку может и так у меня сервер упал ((
ну а вобше я в 1 контролере ввёл
Yii::app()->params['id']=Yii::app()->user->model->customerid;
в другом
$id=Yii::app()->params['id'];
var_dump($id);
вот и NULL выдавало ну сейчас точно не скажу , как только проверю отпишу
Аватара пользователя
kosenka
Сообщения: 677
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: Супер глобальная переменная

Сообщение kosenka »

izac писал(а):минутку может и так у меня сервер упал ((
ну а вобше я в 1 контролере ввёл
Yii::app()->params['id']=Yii::app()->user->model->customerid;
в другом
$id=Yii::app()->params['id'];
var_dump($id);
вот и NULL выдавало ну сейчас точно не скажу
значит в Yii::app()->user->model->customerid был NULL
Аватара пользователя
radamir
Сообщения: 142
Зарегистрирован: 2009.08.10, 08:02
Откуда: Новосибирск

Re: Супер глобальная переменная

Сообщение radamir »

Изменения в Yii::app()->params в одном запросе, не отразятся в другом. Тут либо надо использовать связку Yii::app()->setGlobalState()/Yii::app()->getGlobalState(), либо менять архитектуру.
Кстати а почему во втором запросе не обратиться напрямую к Yii::app()->user->model->customerid ?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Супер глобальная переменная

Сообщение slavcodev »

izac писал(а):Yii::app()->params['id']=Yii::app()->user->model->customerid;
ну вообще-то Yii::app()->user уже глобальный если он нулл, значит сессия не поднимается, используем flash загрузчик?
Жду Yii 3!
izac
Сообщения: 60
Зарегистрирован: 2012.11.15, 15:43

Re: Супер глобальная переменная

Сообщение izac »

да загрузчик то флэш но сохранения не флешовое а

Код: Выделить всё

 if(!$myPicture->saveAs('tmp_file')) 
izac
Сообщения: 60
Зарегистрирован: 2012.11.15, 15:43

Re: Супер глобальная переменная

Сообщение izac »

он не нул если его вызывать но если $id=Yii::app()->user...тд var_dump($id) и зайти на контролер то всё норм если загрузчиком то пустой
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Супер глобальная переменная

Сообщение slavcodev »

загрузчик flash посылает новый запрос, flash не может передавать куки, точнее передает куки IE, следовательно когда flash делает запрос, то этот запрос делается от не авторизованного пользователя и Yii::app()->user->model = null

меняй структуру приложения
Жду Yii 3!
izac
Сообщения: 60
Зарегистрирован: 2012.11.15, 15:43

Re: Супер глобальная переменная

Сообщение izac »

а с 1 контролера в другой не как не передать ?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Супер глобальная переменная

Сообщение slavcodev »

izac писал(а):а с 1 контролера в другой не как не передать ?
можно передать sessionID через $_POST/$_GET
https://github.com/yiiext/forgery-session-filter
Жду Yii 3!
izac
Сообщения: 60
Зарегистрирован: 2012.11.15, 15:43

Re: Супер глобальная переменная

Сообщение izac »

mc-bear писал(а):
izac писал(а):а с 1 контролера в другой не как не передать ?
можно передать sessionID через $_POST/$_GET
https://github.com/yiiext/forgery-session-filter
так минут ку я суть не могу уловить , этот фильтр должен помочь мне переташить ID сессию и я её добавлю при загрузки файла и тем самым кабе авторризуюсь буз логина и паса , ну это я примерно как я понял поправте если гдето не прав
izac
Сообщения: 60
Зарегистрирован: 2012.11.15, 15:43

Re: Супер глобальная переменная

Сообщение izac »

mc-bear писал(а):
izac писал(а):а с 1 контролера в другой не как не передать ?
можно передать sessionID через $_POST/$_GET
https://github.com/yiiext/forgery-session-filter
или нет эта штука позволяет востоновить старую сесию после уплоуда
есле просто она будет передаваться по средствам пост то уплоудер работать не будет тк нет исходов от него
просто у меня такой еод как в исходах есть он был в уплоудером

Код: Выделить всё

 function init(){
  if(isset($_POST['SESSION_ID'])){
    $session=Yii::app()->getSession();
    $session->close();
    $session->sessionID = $_POST['SESSION_ID'];
    $session->open();
  } 
Последний раз редактировалось izac 2012.11.21, 16:47, всего редактировалось 1 раз.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Супер глобальная переменная

Сообщение slavcodev »

сессия создается при авторизации по логину и паролю, её ИД хранится в куках
при вызове любого контроллера сессия восстанавливается по ИД кук
так происходит когда ты заходишь на страницу загрузки
но когда ты делаешь запрос flashом, кук нет, значит и сессия не восстанавливается
для этого предлагается послать этот ИД не куками а через $_POST
но тогда в контроллере аплауда файла нужно восстановить сессию не из кук а из POST
для этого фильтр, но посылать ID сессии ты должен флешом

параноики говорят что это не очень безопасно посылать ИД сессии через POST, можно этот хитрый фильтр установить только для определенного контроллера и действия, а можно убрать нафиг флеш-загрузчик
или забить на паранойю
Жду Yii 3!
izac
Сообщения: 60
Зарегистрирован: 2012.11.15, 15:43

Re: Супер глобальная переменная

Сообщение izac »

mc-bear писал(а):сессия создается при авторизации по логину и паролю, её ИД хранится в куках
при вызове любого контроллера сессия восстанавливается по ИД кук
так происходит когда ты заходишь на страницу загрузки
но когда ты делаешь запрос flashом, кук нет, значит и сессия не восстанавливается
для этого предлагается послать этот ИД не куками а через $_POST
но тогда в контроллере аплауда файла нужно восстановить сессию не из кук а из POST
для этого фильтр, но посылать ID сессии ты должен флешом

параноики говорят что это не очень безопасно посылать ИД сессии через POST, можно этот хитрый фильтр установить только для определенного контроллера и действия, а можно убрать нафиг флеш-загрузчик
или забить на паранойю
флеш какбы ставился для прогрессбара для загрузки ибо для стандартного я ненашол прогресс бара
исходников флеша нет но сним был данный код он я так понимаю и должен востонавливать сессию из куков

Код: Выделить всё

 function init(){
  if(isset($_POST['SESSION_ID'])){
    $session=Yii::app()->getSession();
    $session->close();
    $session->sessionID = $_POST['SESSION_ID'];
    $session->open();
  } 
если и тут не прав бей палкой :(
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Супер глобальная переменная

Сообщение slavcodev »

правильно понимаешь, этот код восстанавливает сессию по ИД которые передается в $_POST['SESSION_ID']
если этот код шел с флеш-загрузчик, можно предположить что загрузчик посылает этот самый ИД в $_POST['SESSION_ID']
Жду Yii 3!
Ответить