Ответы пользователя по тегу Yii
  • Как использовать интернационализацию в config Yii2?

    @DimkaI Автор вопроса
    Системный адинистратор, разработчик ПО
    Благодаря предложению Дмитрий сделал следующее:
    в корне проекта в каталоге /widgets создал файл ILinkPager.php:
    <?php
    namespace app\widgets;
    
    use Yii;
    use Yii\helpers\Html;
    use Yii\widgets\LinkPager;
    
    class ILinkPager extends yii\widgets\LinkPager
    {
        public function __construct() {
            $this->firstPageLabel = Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-fast-backward', 'title' => Yii::t('app', 'First page'), ]);
            $this->prevPageLabel  = Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-backward', 'title' => Yii::t('app', 'Previous page'), ]);
            $this->nextPageLabel  = Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-forward', 'title' => Yii::t('app', 'Next page'), ]);
            $this->lastPageLabel  = Html::tag('span', '', [ 'class' => 'glyphicon glyphicon-fast-forward', 'title' => Yii::t('app', 'Last page'), ]);
        }
    }


    в файле конфигурации /config/web.php переопределил контейнер:
    $config = [
        ...
        'container' => [
            'definitions' => [
                'yii\grid\GridView' => [
                    'pager' => [
                        'class' => 'app\widgets\ILinkPager',
                    ],
                ],
            ],
        ],
       ...
    ];


    В результате на всех страницах у пагинатора стала корректно работать интернационализация.
    Ответ написан
  • Почему не находится запись в базе данных при проведении теста?

    @DimkaI Автор вопроса
    Системный адинистратор, разработчик ПО
    Эх, видимо мой вопрос не такой уж и простой.
    Удивительно, но следующие строки показывают, что запись в базе данных появилась:
    $count = count(Types::find()->where([ 'name' => $validName ])->all());
    $this->assertGreaterThan(0, $count);
    $this->assertEquals(1, $count);

    То есть найдена одна запись. А следующая команда её не находит:
    $this->tester->seeInDatabase('types', [ 'name' => $validName ]);

    Такое впечатление, что взаимодействие происходит с разными слепками базы данных.
    И, действительно, код из теста:
    $this->tester->haveInDatabase('types', [ 'name' => $validName ]);

    после выполнения теста, в рабочую базу добавляет запись, чего тесты в принципе делать не должны.

    Вопрос остаётся открытым, как правильно написать конфиг, чтобы результат теста искался в слепке базы для тестов, а не в реальной?
    Ответ написан
    Комментировать
  • Как в Yii2 DataProvider по ID узнать номер страницы в пагинаторе?

    @DimkaI Автор вопроса
    Системный адинистратор, разработчик ПО
    В общем получилось не очень оптимальное решение, но оно работает:
    public function actionIndex()
        {
            $searchModel = new ItemsSearch();
            if (isset(Yii::$app->request->queryParams['id'])) {
                $id = Yii::$app->request->queryParams['id'];
                $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
                $dataProvider->query->select(Items::tableName() . '.id');
                $pageSize = $dataProvider->pagination->pageSize;
                $dataProvider->pagination = FALSE;
                $rows = $dataProvider->getModels();
                $page = 0;
                foreach ($rows as $key => $val) {
                    if ($id == $val->id) {
                        $page = ceil(($key + 1) / $pageSize);
                        break;
                    }
                }
                return $this->redirect(['index', 'page' => $page]);
            }
            $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
    
            return $this->render('index', [
                'searchModel' => $searchModel,
                'dataProvider' => $dataProvider,
            ]);
        }


    Возможно кому-то понадобится в будущем.
    Ответ написан
    Комментировать
  • Как убрать повторения имени?

    @DimkaI
    Системный адинистратор, разработчик ПО
    $label='';
    foreach ($values as $index => $value):
         if ($label != $value->valuesAttribute->name) {
               $label = $value->valuesAttribute->name;
              ?>
              <div class="disabled"><?=$value->valuesAttribute->name?></div>
              <?php
         }
         ....
    Ответ написан
  • Как интегрировать 1с и yii2?

    @DimkaI
    Системный адинистратор, разработчик ПО
    Собственно обмен выгрузками это единственный способ взаимодействия с 1С.
    Даже в битриксе происходит обмен подобным образом. Хоть и по расписанию в 1С.
    Ответ написан