Ответы пользователя по тегу Yii
  • PHP/Yii2 как правильно обрабатывать исключения?

    @Zohei Автор вопроса
    Почему Exception перехватывает Unknown Property Exception, но не ловит, скажем, деление на 0?? А в ErrorException с точности наоборот?

    это все частично от невнимательности:
    catch \Exception прекрасно перехватывает исключения, я же пытался ловить исключения классом \yii\base\Exception =(
    Ответ написан
    1 комментарий
  • Почему в Yii2 нельзя использовать CamelCase в названии action?

    @Zohei
    Это было сделано ради сео.
    Однако, самому пришлось напрячься при переносе проекта с yii1 на yii2.
    Нагуглить решения не вышло, поэтому выкладываю свой быстрый костыль.
    Я просто в нужном мне контроллере переопределил метод createAction добавив в регулярку верхний регистр:
    public function createAction($id)
        {
            if ($id === '') {
                $id = $this->defaultAction;
            }
            $actionMap = $this->actions();
            if (isset($actionMap[$id])) {
                return Yii::createObject($actionMap[$id], [$id, $this]);
            } elseif (preg_match('/^[a-zA-Z0-9\\-_]+$/', $id) && strpos($id, '--') === false && trim($id, '-') === $id) {
                $methodName = 'action' . str_replace(' ', '', ucwords(implode(' ', explode('-', $id))));
                if (method_exists($this, $methodName)) {
                    $method = new \ReflectionMethod($this, $methodName);
                    if ($method->isPublic() && $method->getName() === $methodName) {
                        return new \yii\base\InlineAction($id, $this, $methodName);
                    }
                }
            }
            return null;
        }

    Оригинальный метод по ссылке https://github.com/yiisoft/yii2/blob/master/framew...

    Благо у меня CamelCase был в некритичных для сео местах типа апи или личный кабинет, поэтому на возможные проблемы с сео пофиг.
    Ответ написан
    Комментировать
  • Yii2 GridView и PJAX. Как настроить?

    @Zohei
    добавьте вашим ссылкам атрибут data-pjax, а колонкам измените format на raw
    Ответ написан
    Комментировать
  • Yii2: Как сделать кастомные фильтры для ListView/GridView?

    @Zohei
    use yii\widgets\Pjax;
    use yii\widgets\PjaxAsset;
    PjaxAsset::register($this);
    
    $this->registerJs(<<<JS
    $(document).on('change', '#provider', function(e) {
        $.pjax({
            timeout: 4000,
            url: $('#filter-form').attr('action'),
            container: '#list-view',
            fragment: '#list-view',
            data: {provider: this.options[this.selectedIndex].value},
       });
    });
    JS
    , yii\web\View::POS_END);
    
    <?=Html::beginForm(Url::current(), 'GET', ['id'=>'filter-form']);?>
         <?=Html::activeDropDownList($model, 'provider', Provider::items(), ['id'=>'provider']); ?>
    <?=Html::endForm(); ?>
    
    <?php \yii\widgets\Pjax::begin(); ?>
    <?= \yii\widgets\ListView::widget([.....]) ?>
    <?php \yii\widgets\Pjax::end(); ?>
    Ответ написан
    3 комментария
  • Как поставить yii 2.0.1 через composer?

    @Zohei Автор вопроса
    проблема решилась путем удалением из composer.json этих строк, которые были скопированы с yii2-app-basic и все поставилось!
    "name": "yiisoft/yii2",
        "description": "Yii PHP Framework Version 2",
        "keywords": ["yii2", "framework"],
        "homepage": "http://www.yiiframework.com/",
        "type": "library",
        "license": "BSD-3-Clause",
        "support": {
            "issues": "https://github.com/yiisoft/yii2/issues?state=open",
            "forum": "http://www.yiiframework.com/forum/",
            "wiki": "http://www.yiiframework.com/wiki/",
            "irc": "irc://irc.freenode.net/yii",
            "source": "https://github.com/yiisoft/yii2"
        },
        "minimum-stability": "stable",
    Ответ написан
    Комментировать
  • Distinct размеров товара. Как реализовать на yii?

    @Zohei
    select size from products group by size
    либо так
    $criteria = new CDbCriteria;
    $criteria->select = ['id',size'];
    $criteria->group = 'size';
    $sizes = Products::model()->findAll($criteria);
    Ответ написан
    Комментировать
  • Как в Yii2 менять версию assets после релиза?

    @Zohei
    Тоже интересно как это делается при помощи менеджера ресурсов. Сам всегда использовал следующий трюк: указываю номер версии в пути к файлу, например, css/main.css?v=1.3
    или js/main.js?v=2.29
    Ответ написан
    Комментировать
  • Работа с часовыми поясами в Yii, если в базе MySQL даты и время хранятся в формате DATETIME?

    @Zohei
    $date= new DateTime($YOUR_DATE, new DateTimeZone('Europe/Samara'));
    echo $date->format('Y-m-d H:i:s');
    В yii, насколько помню, такой функции не представлено. Напишите свой хелпер или расширьте CFormatter
    Ответ написан
    Комментировать
  • Yii2 PJax почему страница все равно перезагружается?

    @Zohei
    нужно указать 'format'=>'raw',
    www.yiiframework.com/doc-2.0/yii-grid-datacolumn.h...
    [
                'class'=>'yii\grid\DataColumn',
                'attribute'=>'name',
                'format'=>'raw',
                'value'=>function ($model, $key, $index, $column) {
                    return a($model->name, ['update','id'=>$model->name], ['data-pjax'=>0]);
                },
                'contentOptions'=>[
                    'class'=>'edit-link',
                ],
            ],
    Ответ написан
    Комментировать
  • Yii2 как добраться до bakend с помощью nginx?

    @Zohei
    Уперся в туже стену! Получилось в итоге решить проблему? =)
    .....Спустя час.... Проблема решилась безумно просто и не через нжинкс... достаточно было отключить кеширование веб страниц в фаербаге и не ломать голову конфигами...
    Вот минимальная рабочая конфигурация:
    server {
        listen       80;
        server_name  example.ru;
        root         /home/example/data/www/example.ru;
        index        index.html index.php;
        charset      utf-8;
    
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
    
        location /admin {
             try_files $uri $uri/ /admin.php?$args;
        }
    
        location ~ \.php$ {
            root   /home/example/data/www/example.ru;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /home/example/data/www/example.ru$fastcgi_script_name;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include        fastcgi_params;
            fastcgi_param  PATH_INFO $fastcgi_path_info;
        }
    }


    Осталось добавить редиректы с www и слэшей на конце и радоваться.
    Ответ написан
    1 комментарий