Ответы пользователя по тегу Yii
  • Yii 2. Как поменять url backend и frontend?

    nepster-web
    @nepster-web

    Options +FollowSymlinks
    RewriteEngine On

    # deal with admin first
    RewriteCond %{REQUEST_URI} ^/(admin)
    RewriteRule ^admin/assets/(.*)$ backend/web/assets/$1 [L]
    RewriteRule ^admin/css/(.*)$ backend/web/css/$1 [L]

    RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css)/
    RewriteCond %{REQUEST_URI} ^/(admin)
    RewriteRule ^.*$ backend/web/index.php [L]

    RewriteCond %{REQUEST_URI} ^/(assets|css)
    RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L]
    RewriteRule ^css/(.*)$ frontend/web/css/$1 [L]

    RewriteCond %{REQUEST_URI} !^/(frontend|backend)/web/(assets|css)/
    RewriteCond %{REQUEST_URI} !index.php
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ frontend/web/index.php
    Ответ написан
    3 комментария
  • Как прикрутить вложенные реляции одним запросом Yii?

    nepster-web
    @nepster-web Автор вопроса
    В таблице игр добавил еще 1 реляцию: waiting
    public function relations()
        {
            return array(
                //'rule'    => array(self::HAS_MANY, 'GamesRuleModel',   '', 'on'=>'t.game_id=rule.game_id'),
                'proposal' => array(self::HAS_MANY, 'GameProposalModel', '', 'on'=>'t.game_id=proposal.game_id'),
                'waiting' => array(self::HAS_MANY, 'GameWaitingModel', '', 'on'=>'proposal.proposal_id=waiting.proposal_id'),
            );
        }


    Такая вещь не работает:
    $criteria->with = array(
                 'proposal' => array('joinType'=>'LEFT OUTER JOIN'),
                 'waiting.proposal',
            );


    Теперь делаем запрос:
    $game_id = 1;
              
            $criteria = new CDbCriteria;
            
            $criteria->select    = 't.game_id, t.game_name, t.alter_name';
            $criteria->condition = "t.game_id=:game_id AND proposal.status=-1";
            $criteria->params    = array(':game_id'=>$game_id);
            $criteria->together = true;
        
            $criteria->with = array(
                 'proposal' => array('joinType'=>'LEFT OUTER JOIN'),
                 'waiting',
            );
            
        
            $data = GamesModel::model()->find($criteria);
            
    
            echo '<pre>';
            print_r($data);
            echo '</pre>';


    [b]Всплывает объект:[/b]

    GamesModel Object
    (
        [_new:CActiveRecord:private] => 
        [_attributes:CActiveRecord:private] => Array
            (
                [game_id] => 1
                [game_name] => Клабор (Деберц)
                [alter_name] => deberc
            )
    
        [_related:CActiveRecord:private] => Array
            (
                [proposal] => Array
                    (
                        [0] => GameProposalModel Object
                            (
                                [user_rules] => 
                                [waiting_rules] => 
                                [_new:CActiveRecord:private] => 
                                [_attributes:CActiveRecord:private] => Array
                                    (
                                        [proposal_id] => 114
                                        [game_id] => 1
                                        [user_id] => 234
                                        [date] => 2014-01-13 17:10:28
                                        [status] => -1
                                        [rules] => [{"rule_id":"1","param":"30"},{"rule_id":"2","param":"0"},{"rule_id":"3","param":"4"},{"rule_id":"4","param":"301"},{"rule_id":"5","param":"0"}]
                                        [hash] => 61fe96c3d7291c7c04c6fcb71b8b49de
                                        [count_player] => 4
                                    )
    
                                [_related:CActiveRecord:private] => Array
                                    (
                                    )
    
                                [_c:CActiveRecord:private] => 
                                [_pk:CActiveRecord:private] => 114
                                [_alias:CActiveRecord:private] => t
                                [_errors:CModel:private] => Array
                                    (
                                    )
    
                                [_validators:CModel:private] => 
                                [_scenario:CModel:private] => update
                                [_e:CComponent:private] => 
                                [_m:CComponent:private] => 
                            )
    
                        [1] => GameProposalModel Object
                            (
                                [user_rules] => 
                                [waiting_rules] => 
                                [_new:CActiveRecord:private] => 
                                [_attributes:CActiveRecord:private] => Array
                                    (
                                        [proposal_id] => 113
                                        [game_id] => 1
                                        [user_id] => 500
                                        [date] => 2014-01-13 17:07:26
                                        [status] => -1
                                        [rules] => [{"rule_id":"1","param":"60"},{"rule_id":"2","param":"1"},{"rule_id":"3","param":"4"},{"rule_id":"4","param":"501"},{"rule_id":"5","param":"0"}]
                                        [hash] => 750da4a838006f676f0e0808ded1ac74
                                        [count_player] => 4
                                    )
    
                                [_related:CActiveRecord:private] => Array
                                    (
                                    )
    
                                [_c:CActiveRecord:private] => 
                                [_pk:CActiveRecord:private] => 113
                                [_alias:CActiveRecord:private] => t
                                [_errors:CModel:private] => Array
                                    (
                                    )
    
                                [_validators:CModel:private] => 
                                [_scenario:CModel:private] => update
                                [_e:CComponent:private] => 
                                [_m:CComponent:private] => 
                            )
    
                        [2] => GameProposalModel Object
                            (
                                [user_rules] => 
                                [waiting_rules] => 
                                [_new:CActiveRecord:private] => 
                                [_attributes:CActiveRecord:private] => Array
                                    (
                                        [proposal_id] => 112
                                        [game_id] => 1
                                        [user_id] => 234
                                        [date] => 2014-01-13 08:03:36
                                        [status] => -1
                                        [rules] => [{"rule_id":"1","param":"30"},{"rule_id":"2","param":"0"},{"rule_id":"3","param":"2"},{"rule_id":"4","param":"301"},{"rule_id":"5","param":"0"}]
                                        [hash] => b0105dc5a8908f82cb858987ea0cac50
                                        [count_player] => 2
                                    )
    
                                [_related:CActiveRecord:private] => Array
                                    (
                                    )
    
                                [_c:CActiveRecord:private] => 
                                [_pk:CActiveRecord:private] => 112
                                [_alias:CActiveRecord:private] => t
                                [_errors:CModel:private] => Array
                                    (
                                    )
    
                                [_validators:CModel:private] => 
                                [_scenario:CModel:private] => update
                                [_e:CComponent:private] => 
                                [_m:CComponent:private] => 
                            )
    
                    )
    
                [waiting] => Array
                    (
                        [0] => GameWaitingModel Object
                            (
                                [_new:CActiveRecord:private] => 
                                [_attributes:CActiveRecord:private] => Array
                                    (
                                        [waiting_id] => 182
                                        [proposal_id] => 114
                                        [user_id] => 234
                                        [sort] => 0
                                        [root] => 1
                                        [hash] => 61f7b277d2cb69b7af12bc0ab90dd814
                                    )
    
                                [_related:CActiveRecord:private] => Array
                                    (
                                    )
    
                                [_c:CActiveRecord:private] => 
                                [_pk:CActiveRecord:private] => 182
                                [_alias:CActiveRecord:private] => t
                                [_errors:CModel:private] => Array
                                    (
                                    )
    
                                [_validators:CModel:private] => 
                                [_scenario:CModel:private] => update
                                [_e:CComponent:private] => 
                                [_m:CComponent:private] => 
                            )
    
                        [1] => GameWaitingModel Object
                            (
                                [_new:CActiveRecord:private] => 
                                [_attributes:CActiveRecord:private] => Array
                                    (
                                        [waiting_id] => 183
                                        [proposal_id] => 113
                                        [user_id] => 231
                                        [sort] => 0
                                        [root] => 1
                                        [hash] => 61f7b277d2cb69b7af12bc0ab90dd814
                                    )
    
                                [_related:CActiveRecord:private] => Array
                                    (
                                    )
    
                                [_c:CActiveRecord:private] => 
                                [_pk:CActiveRecord:private] => 183
                                [_alias:CActiveRecord:private] => t
                                [_errors:CModel:private] => Array
                                    (
                                    )
    
                                [_validators:CModel:private] => 
                                [_scenario:CModel:private] => update
                                [_e:CComponent:private] => 
                                [_m:CComponent:private] => 
                            )
    
                        [2] => GameWaitingModel Object
                            (
                                [_new:CActiveRecord:private] => 
                                [_attributes:CActiveRecord:private] => Array
                                    (
                                        [waiting_id] => 184
                                        [proposal_id] => 112
                                        [user_id] => 232
                                        [sort] => 0
                                        [root] => 1
                                        [hash] => 61f7b277d2cb69b7af12bc0ab90dd814
                                    )
    
                                [_related:CActiveRecord:private] => Array
                                    (
                                    )
    
                                [_c:CActiveRecord:private] => 
                                [_pk:CActiveRecord:private] => 184
                                [_alias:CActiveRecord:private] => t
                                [_errors:CModel:private] => Array
                                    (
                                    )
    
                                [_validators:CModel:private] => 
                                [_scenario:CModel:private] => update
                                [_e:CComponent:private] => 
                                [_m:CComponent:private] => 
                            )
    
                    )
    
            )
    
        [_c:CActiveRecord:private] => 
        [_pk:CActiveRecord:private] => 1
        [_alias:CActiveRecord:private] => t
        [_errors:CModel:private] => Array
            (
            )
    
        [_validators:CModel:private] => 
        [_scenario:CModel:private] => update
        [_e:CComponent:private] => 
        [_m:CComponent:private] => 
    )


    Теперь разбираемся, что тут у нас:

    1) Данные об игре, в данном случае для теста я достал 3 параметра. ID и названия
    2) Заявки на игру proposals
    3) Пользователи которые ожидают игры waiting

    Значит как это все дело выглядит на практике:
    У нас есть сервер евент, который делает запрос на такой вот объект:
    Получив объект яваскрипт рисует таблицу заявок по данным proposals и waiting
    А так же по данным game обновляет статистику игру (к примеру сколько было сыграно игр за день, кол-во игроков онлайн и тп.)

    Теперь моменты:
    - если нет не одного ожидающего (нет записей waiting), все хорошо, объект приходит waiting пустой. Такого быть конечно не может, но на тесте проверяю.
    - дальше, к примеру к этим трем заявкам присоединились еще игроки, заявки получили другой статус (-1 в ожидании, 1 идет игра, 0 игра закончена, -2 игра не состоялась) и как бы заявок нет.
    делается запрос к серверу, и если заявок нет то возвращается пустота. В данном случае я яваскриптом отрисую таблицу, с надписью нет заявок. А вот как обновить статистические данные игры, если пришла пустота?

    Тоесть задача сделать так, что если нет proposal, приходит просто объект game

    По сути я это реализовывал по уровню школы:
    // транзакция 
    
    $data['game'] = .... findByPK($game_id);
    
    if($data['game'])
    {
            $data['proposal'] = ... findByAttibutes(array(...)) ;
            $data['waiting']  = ... findByAttibutes(array(...));
    }
    
    $transaction->commit();
    Ответ написан
    Комментировать
  • Как прикрутить вложенные реляции одним запросом Yii?

    nepster-web
    @nepster-web Автор вопроса
    CDbCommand не удалось исполнить SQL-запрос
    Ответ написан
    Комментировать
  • Yii CDbCriteria и выборка данных?

    nepster-web
    @nepster-web Автор вопроса
    тут момент опять таки, откуда мы знаем, что в $key попадет существующее в колонке базы значение ?
    Ответ написан
    Комментировать
  • Каптча в Yii без модели?

    nepster-web
    @nepster-web Автор вопроса
    там был момент не в том, что я проверяю ее без модели, мне в поле которое создает инпут не нужно было передавать модель, а в контроллере (за ранее не известном) я просто должен получить сам пост с капчей.

    Зачем это нужно было:
    Для апи окон подтверждения. К примеру если я хочу сделать какуе-то операцию с финансами. Например пользователь покупает что-то на сайте, ему нужно показать пользовательское соглашение и каптчу. При этот в виде у меня модель которая просто достает на экран список услуг и ничего не валидирует. А подтверждение кидает пользователя совсем на другой контроллер, который работает совершенно с другими моделями. Я же не буду в модуля тянуть модель другого модуля и только ради каптчи.

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

    Теперь каптча находится всегда в 1 экшине, и этот js код я вынес себе в js файл, где могу наконец управлять сменой кода. Все вышло очень хорошо без всяких гамалаев.

    Ваш Вариант попробую рассмотреть, спасибо!
    Ответ написан
    Комментировать
  • Каптча в Yii без модели?

    nepster-web
    @nepster-web Автор вопроса
    А что делать с отсутствием вот этого:

    <script type="text/javascript">
    /*<![CDATA[*/
    jQuery(function($) {
    
    jQuery(document).on('click', '#yw0', function(){
        jQuery.ajax({
            url: "\/my\/path\/captcha?refresh=1",
            dataType: 'json',
            cache: false,
            success: function(data) {
                jQuery('#yw0').attr('src', data['url']);
                jQuery('body').data('captcha.hash', [data['hash1'], data['hash2']]);
            }
        });
        return false;
    });
    
    });
    /*]]>*/
    </script>
    Ответ написан
    Комментировать