Ответы пользователя по тегу Yii
  • Обновление записи по ajax в БД по клику id div блока, как реализовать?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    Для тех, кто искал! Этот метод называется .submit()
    <script type="text/javascript">
       $(document).ready(function () {
    	   $("#yellow").click(function() {
    		         $("#act form").submit();
    	   });
       });
    </script>


    Смысл заключается в том, что вы оборачиваете form в id (чтобы скрипт не реагировал на другие формы) и указываете на что должен реагировать скрипт при заполнении формы, можно использовать .change() или .bind() - если через input, и .click() - если хотите передать через span или div.
    Хочу заметить, что с этим заданием хорошо справляется Vue.js

    <div id="act">
            <form action="" method="post" data-ajax="post">
                 <input type="text" id="yellow" name="param">
                 <input type="submit" value="send">
            </form>
       </div>


    Подкрепите это всё ajax , скройте кнопку submit, и форма будет отправлять сразу, как только вы кликнули чекбокс, или выбрали селект, или указали цифру, для других решений лучше это не делать.
    Ответ написан
    Комментировать
  • Как вывести .jpg .png и т.д из папки отличной @web?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    ---
    То о чём вы говорите, называется пространством имён, настраивается в папке config
    Можете использовать adminLTE - там есть настройки, позволяющие выводить директорию, скрывая
    /frontend/web/ и бэкенд.
    https://github.com/almasaeed2010/AdminLTE
    Допустим, если вы в папке web создадите к примеру папку image
    Картинка будет в этом случае выводится так:
    /image/1.jpg
    Ответ написан
    Комментировать
  • Почему кнопка в yii2 отрабатывает только при втором клике?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    --
    Помоему проблема в двойных условиях, два if чудят. Я с подобной ситуацией сталкивался. Вам надо написать просто:
    public function actionCleartable() 
    {
       $ok = Yii::$app->request->post('submit');
       if(isset($ok)) {
          $uniqueUsersModel->clearTable();
          return $this->refresh();
       } else {
          return $this->render('cleartable');
       }
    }

    То есть, как в старые добрые девяностые, когда был php 4 ))) Мы писали, если введено имя кнопки submit, тогда происходит то или это, если не нажали, тогда ничего не происходит.
    Этот же подход к делу подойдёт, если не хочешь использовать ActiveForm

    <?= Html::beginForm(['order/update', 'id' => $id], 'post', ['enctype' => 'multipart/form-data']) ?>
    <?= Html::submitButton('Отправить', ['class' => 'submit', 'name' => 'submit']) ?>
    <?= Html::endForm() ?>


    Можно сделать таких форм в на одной странице хоть с десяток, а сработает та, у которой name соответствует правилам, прописанным в контроллере, я так форму поиска впихнул в верхнее меню без привязки каждой странице к конкретной модели, и ошибок никаких нет. Главное, если будешь впихивать input, посмотри пример здесь
    Ответ написан
    Комментировать
  • Cортировка sql по строгому порядку, как задать этот запрос в Yii2?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    У кого была похожая проблема, просто сделайте вот такой запрос в БД:
    Category::find()->orderBy('LENGTH(priority), priority')->all()
    Ответ написан
    Комментировать
  • Как поставить yii 2.0.1 через composer?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    Composer вам ясно сказал, посмотрите https://groups.google.com/d/topic/composer-dev/_g3... тут надо было в composer.json установить
    "minimum-stability": "stable",

    И ещё он сказал посмотреть getcomposer.org/doc/articles/troubleshooting.md
    для решения дальнейших общих проблем.
    Документация у сайта composer на английском, но вы можете перевести через google переводчик.
    Ошибка установки, возврат ./composer.json к исходному контенту.
    Что-то не правильно установили, или установили один композер по верх другого, никто ж не читает, что в openserver уже есть composer а потом:
    Installation failed, reverting ./composer.json to its original content.


    Я к тому, что вам пишут подсказки, читайте их, так я решил свои проблемы с composer
    Если не понимаете откуда ноги растут, лучше установите Yii2 с нуля, понятное дело что быстрее скопировать и вставить, но понимая свою ошибку, надо сначала вникнуть в то как всё устроено, так я научился устанавливать виджеты с github в ручную )) Так конечно лучше не делать.
    Ответ написан
    Комментировать
  • Class 'kartik\select2\Select2' not found?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    Очевидно, что вы переносили данный файловый менеджер вручную, что делать нельзя, особенно если абсолютно не понимать, как устроен Yii2, и фреймворк в целом.
    В папке \vendor\yiisoft\extensions.php
    Скорее всего забыли добавить:
    'kartik-v/yii2-krajee-base' => 
      array (
        'name' => 'kartik-v/yii2-krajee-base',
        'version' => '9999999-dev',
        'alias' => 
        array (
          '@kartik/base' => $vendorDir . '/kartik-v/yii2-krajee-base',
        ),
      ),
      'kartik-v/yii2-widget-select2' => 
      array (
        'name' => 'kartik-v/yii2-widget-select2',
        'version' => '9999999-dev',
        'alias' => 
        array (
          '@kartik/select2' => $vendorDir . '/kartik-v/yii2-widget-select2',
        ),
      ),
      'kartik-v/yii2-widget-alert' => 
      array (
        'name' => 'kartik-v/yii2-widget-alert',
        'version' => '9999999-dev',
        'alias' => 
        array (
          '@kartik/alert' => $vendorDir . '/kartik-v/yii2-widget-alert',
        ),
      ),

    И с 2amigos скорее всего будут проблемы. Проверьте наличие записей composer и папок с файлами в целом, правильно ли указаны узы.
    Ответ написан
    Комментировать
  • Как подключить магазин к Yandex.Маркет?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Я бы написал скрипт, который через цикл выводит все товары, запихал бы это всё в textarea, чтобы убедится, что код формируется правильно, потом просто методом записи в файл, составил код так, чтобы частные элементы заменялись POST данными, посланными через форму. Очевидно что Валерий не умеет записывать файл в файл, всё очень просто, почитайте мануал, как записывать файлы средствами php кода. Править код должен только один человек, владелец, чтобы доступа не было у посторонних лиц. Если настроить правильно, и привязать к cron, то можно обновлять данные раз в день, или кому как удобно, Если сделать ссылку на файл, то его можно просмотреть или скачать. Для меня эта задача выполнима.
    Ответ написан
    Комментировать
  • Как сделать каждому checkbox свой input в Yii2?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Используйте "checkboxTemplate" - он тут больше к месту:
    $checkboxTemplate = "<div class=\"checkbox\">\n{beginLabel}\n{input}\n{labelTitle}\n{endLabel}\n{error}\n{hint}\n</div>"


    <?= $form->field($model, 'email', $checkboxTemplate)->textInput();?>


    www.yiiframework.com/doc-2.0/yii-bootstrap-activef...
    Ответ написан
    Комментировать
  • Как указать класс для конкретного td в GridView Yii2?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Меня возможно сейчас возненавидят многие программисты, но мне надоело уже слышать о том что
    GridView - плохой и не гибкий. Ну во первых, он наследует от других виджетов, и если не полениться, то можно найти несколько, так вот, мой пример кода, не идеальный, исключительно, как один из видов решения, чтобы вы понимали, что из него можно выжать.
    Пишем функцию в модель News():
    ...
    <?php 
        public function sklonen($n,$s1,$s2,$s3, $b = false){
            $m = $n % 10; $j = $n % 100;
            if($b) {$n = '<b>'.$n.'</b>';}
            if($m==0 || $m>=5 || ($j>=10 && $j<=20)) {return $n.' '.$s3;}
            if($m>=2 && $m<=4) {return  $n.' '.$s2;}
            return $n.' '.$s1;
        }
    ...


    В контроллере:

    ...
        public function actionNews()
        {
            $searchModel = new NewsSearch();
            $dataProvider = $searchModel->search(Yii::$app->request->queryParams); // ищешь через LIKE
            return $this->render('news', [
                'searchModel' => $searchModel,
                'dataProvider' => $dataProvider,            
            ]);
        }
    ...


    В модели NewsSearch():

    ...
    $dataProvider = new ActiveDataProvider([
        'query' => News::find()->where(['visibility'=>1])->orderBy('date DESC'),
        'pagination' => [
            'pageSize' => 20, // говоришь системе мне нужно вывести 20 записей
        ],
    ]);
    ...


    Теперь во view:

    <?php
        use yii\helpers\Html;
        use yii\widgets\Pjax;
        use yii\grid\GridView;
        use budyaga_cust\users\models\News;
        $this->title = 'Новости';
        $this->params['breadcrumbs'][] = $this->title;
    ?>
    <?php Pjax::begin(); ?> 
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        //'filterModel' => $searchModel,
        'showHeader' => false, // вырезаем шапку таблицы
        'tableOptions' => [
            'class' => 'table' // можно задать свой, тут 100% ширина блока
        ], 
        'options' => ['tag' => 'div', 'class' => 'col-lg-12'], // оборачиваем в div с Bootstrap CSS
        'emptyTextOptions' => ['tag' => 'p', 'class' => 'text-center text-danger'],
        'emptyText' => 'По вашему запросу ничего не найдено',
        'summary' => '<br/><p class="text-center text-muted">Всего найдено '.News::sklonen( '{totalCount}', 'новость', 'новости', 'новостей').'</p>', // 127
        'layout' => '{summary}{items}',  // настраиваем внешний вид как нам надо
            'columns' => [
                //['class' => 'yii\grid\SerialColumn'], // нумерация строк может вообще не пригодится
                [
                    // 'attribute' => 'img', // если много атрибутов в контенте можно это не писать
                    'format' => 'raw',
                    'label' => '',
                    'content'=>function($data){
                        return '
                                <div class="row">
                                    <div class="col-md-3">
                                        '.Html::a(Html::img('/img/box/'.$data->img,
                                                [
                                                    'class' => 'thumbnail', 
                                                    'alt' => $data->header, 
                                                    'style' => 'width:100%;'
                                                ])
                                        ,'/new/'.$data->link).'                                
                                    </div>
                                    <div class="col-md-9 products">
                                    '.Html::a($data->header, '/new/'.$data->link).'
                                    '.Html::tag('p', $data->text).'
                                    '.Html::a('подробнее', '#',['class' =>'buttons pull-right']).'
                                    </div>
                                </div>
                            ';
                    }
                ],
            ], // может понадобится по дизайну, чтобы пагинация была в другом месте
        ]); ?>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,  
        'showHeader' => false,
        'showOnEmpty' => false,
        'summary' => 'страницы {page} из {pageCount}',
        'layout' => '<div class="page-nav td-pb-padding-side">{pager}<span class="pages">{summary}</span></div>', // формируем внешний вид пагинации
        'pager' => [
            'maxButtonCount' => 5, // максимум 5 кнопок
            'options' => ['id' => 'mypager', 'class' => 'pagination'], // прикручиваем свой id чтобы создать собственный дизайн не касаясь основного.
            'nextPageLabel' => '<i class="ionicons ion-arrow-right-c"></i>', // стрелочка в право
            'prevPageLabel' => '<i class="ionicons ion-arrow-left-c"></i>', // стрелочка влево
        ],  
    ]); ?> 
    <?php Pjax::end(); ?>

    ВСЁ ! Здесь показан рабочий код, настраивайте по вашему вкусу, возможно будет критика, но! Этот код имеет адаптивную вёрстку! То есть вы можете сделать из этого поиск по товарам и услугам, да по любому контенту, и он будет гибким для всех устройств, плюс ajax сделает это невероятно быстро и легко, словно вы нажимаете на табы. Наследованные виджеты я брал из коробки, ничего не выдумывал, материал собрал из документации.

    --
    Это был полный разбор виджета GridView
    Всем спасибо за внимание. Пока! )))
    Ответ написан
    Комментировать
  • Как сделать private chat между двумя пользователями на php, yii?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте, Николай.
    В этой ситуации действительно понадобятся сокеты, я реализовывал подобное на Yii2 через Ajax, используя два параметра, id - пользователя и его токен, токен у каждого пользователя индивидуальный, поэтому с его помощью можно создавать много разных парных диалогов, а потом по этому токену находить диалоги, и выводить на странице. В случае уникальных айдишников и токенов нет риска, что перепутаются миллионы других диалогов, да и с помощью токена можно сортировать переписку так, чтобы последнее сообщение было внизу, и через javascript скролить окно всё время вниз, чтобы пользователь видел что ему написали, без прокрутки вручную.
    Мой метод может быть и костыльный, для кого-то, но я сам его придумал так, до сох пор работает и не подводит. Пробуйте, успехов вам.
    Ответ написан
    Комментировать
  • Как в Yii2 организовать вставку формы и обработчикадля нее в любое место на сайте админом?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте. )))
    Если вы пользовались gii - генератором на Yii2, то наверняка знаете, что там можно заниматься генерацией любых форм. Так вот, если это нужно лично вам, для быстрой реализации создания форм, то это решение прямо у вас под носом, если вы хотите это для пользователей, не совсем понятно конечно, в чём соль, то возьмите функционал из коробки вашего фреймворка, там уже всё продумано и реализовано. Если это CMS система, то будьте готовы к тому, что функционал должен быть понятен самому конченному офисному планктону, или новоявленному менеджеру, и даже старушке на пенсии, иначе весь функционал, труды, и потраченное время - будут в пустую. Что расстроит больше, чем не рабочий код.
    Ответ написан
    1 комментарий
  • Как Yii2 перед 404 ошибкой проверить URL в контент страницах?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    --
    я так понимаю, что ссылки вы формируете не по id, а по некоему столбцу в БД, который имеет строковое значение.
    так вот, если вы делаете get-запрос, то лучше это делать так:
    // код action
    ...
    public function actionName($link= ''){ // обращаемся к той переменной, которая выводит get
    $model = Catalog::find()->where(['link' => $link])->one(); // обращаемся к БД с вопросом, есть ли такая запись
    if ($link == NULL) {return $this->redirect(['catalog']);}  // если нету, то делаем редирект*
    ...

    ---
    * - если вставить последнюю строчку, вы избегаете страницы 404, метода случайных подборов на несуществующие страницы, а следствие, мешаете хакерам с инекциями, пользователь остаётся на сайте, и может выбрать что-то другое, а не пытаться понять, что значат эти три цифры. Не выводится страница с пустыми гет запросами, что очень важно!!! Редиректить можно куда угодно, куда укажете.

    Буду рад знать, что помог.
    Ответ написан
  • Как отправить две формы на одном экшене Yii2?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    Решение очень простое:

    ...
    $string = Yii::$app->request->post('send');
       if (isset($string)) {
             ...
       }
    ...
    Ответ написан
    Комментировать
  • Редактор для yii на виртуальной ОС ubuntu?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Делать сайты на фреймворке Yii2 лучше через IDE NetBeans, есть много причин, использовать именно его.
    Быстро ищет use, и правильно находит путь к виджетам, моделям, контроллерам, можно перейти к ним как по ссылке, - это очень удобно. Быстрые подсказки уже по существующему коду. Кастомизированный и понятный интерфейс, поддерживает много разных языков программирования:
    Java, JavaScript, Python, PHP7, C/C++
    Программа бесплатная, темы и подсветка синтаксиса настраиваются как вам нравится.
    Созданные проекты можно заливать прямо через программу, подключаясь к реальным сайтам как на FileZilla, только быстрее.
    Можно просматривать картинки))) Лично для меня это большой плюс, к медиафайлам так же легко прокладывать путь, пользуясь подсказками, в списке есть уже все созданные папки и файлы, нужно только выбрать, что вставить. Файлы можно заливать прямо в дерево проекта, по несколько файлов, а не по одному, так же можно перетаскивать из одной папки в другую.
    Видно все синтаксические ошибки и способы решения, как их исправить.
    Всё под рукой, а программа одна!

    Из минусов, на старом железе очень сильно тормозит, но работает
    Ответ написан
    Комментировать
  • Как изменить кодировку с помощью миграций?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Могу предположить, что вы писали сайт на Notepad++ или таблица в Excel в кодировке windows 1251
    Потому что, если писать проекты на IDE, там выставляется кодировка ещё до создания проекта, и все последующие файлы создаются в одной кодировке из настройки.

    Если я угадал с таблицей, то создай пустой документ Excel, перейди во вкладку "данные", "получение внешних данных", "из текста", выбираешь таблицу, выставляешь кодировку utf-8, разделитель ";", и сохраняешь как csv файл, именно в этой кодировке, теперь можешь заливать в БД и не париться, всё будет по русски без вопросов.

    Могу ещё предположить, что таблица создавалась не в той кодировке, зайди в PhpMyAdmin, и посмотри, что там за кодировка у самой таблицы, и у каждой строки в таблице, если сайт в UTF-8, то в таблице должно быть utf_8_general_ci - кажется так пишется.
    ---
    Миграции - https://yiiframework.com.ua/ru/doc/guide/2/db-migr...
    Создание и удаление таблиц - https://metanit.com/web/php/7.3.php
    Создание базы данных MySQL - php.net/manual/ru/function.mysql-create-db.php
    Ответ написан
    Комментировать
  • Как работать с очень большими данными в MySQL?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    HeidiSQL - подходит для работы с большими, по крайней мере для PhpMyAdmin таблицами.
    Ещё MariaDB.
    Хэйди уже опробовал, быстрая программа, правки, SQL-запросы выполняет быстро, не тормозит, понятный интерфейс, есть соединение с реальным сервером даже по защищённому соединению.

    Марию ещё не пробовал, но частенько слышал о ней от тех кто работал с большим объёмом информации.

    Хэйди открывает таблицы на много быстрее браузерного PhpMyAdmin.
    К плюсам можно отнести и то, что:
    Не надо вводить логин и пароль каждые 1440 секунд.
    Операции выполняются мгновенно, внизу программы видно все запросы, которые были выполнены.
    Легче копировать необходимые элементы.
    Подключение к нескольким серверам в одном окне.
    Подключиться через туннель SSH или выполнить настройки SSL.
    Управление пользовательскими привилегиями
    Импорт текстовых файлов
    Экспорт строк таблицы в виде CSV, HTML, XML, SQL, LaTeX, Wiki Markup и PHP Array
    Ответ написан
  • Как сделать поиск не по точному вхождению поискового слова?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Если делали через GRUD-генератор в gii, то у вас должен был создаться некий класс NameSearch
    Подключайтесь к нему любым удобным для вас способом, я использовал виджеты DetailView и ListView. В принципе, умеючи, можно выводить информацию в любом виде. Минимум кода, нумерация, пагинация, пересчёт количества отображаемых записей, формировать внешний вид можно, как вы хотите, в классе поиска уже предусмотрены такие моменты. Не знаю как у других, у меня по любому совпадению выводилась инфа, даже по одному символу, хоть по 3 символа, без разницы )))
    Ответ написан
    Комментировать
  • Yii Framework: почему появляется ошибка PHP notice Trying to get property of non-object?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте, Антон.

    Скорее всего у вас так настроен сервер, в вашей версии php должен быть файл php.ini
    Посмотрите, что написано в строке с параметром
    error_reporting = '....
    Иногда, в серверах указывается вывод ошибки, некоторые при настройке Битрикса там меняют параметры.

    Чтобы не вылезала ошибка "Trying to get property of non-object", напишите так:
    error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT

    На виртуальных хостингах эти ошибки скрываются, и существуют как паранормальные явления, никто не верит, что эти ошибки есть, но они существуют, просто тайные хостинг-провайдеры скрывают от вас правду, чтобы вы не знали об этом, но уверяю вас non-object существует!
    Это был сарказм, конечно же вы это знаете, иначе бы не написали об этом здесь.
    Ответ написан
    3 комментария
  • Почему метод className() в yii2-basic не работает как надо?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    --
    Вас ждёт ещё один сюрприз. Дело в том что разработчики Yii2 Framework, решили вопрос с нагрузками на сайте, и им пришлось отказаться от ::className(), так как в php7 уже есть решение по обращению к классам, то вся конструкция будет заменена на ::class().

    Так что, даже если вы решите вопросы с алиасами, ваши классы могут опять перестать работать. Лично я нахожу удобным такое обращение к классам, заметно сокращается код, да и по показаниям дэбагера всё гораздо лучше ))
    Ответ написан
    Комментировать
  • Где в Yii2 файлы ошибок 404 и 403(хочется перевести эти страницы)?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте товарищи программисты.
    ---
    Не так страшен код, как его трактуют ))
    Подсказку к этому вопросу как ни странно, я нашёл в папке "views/site/"
    Файл: error.php
    ===
    Разработчики поняли, что программисты столкнуться с таким вопросом, поэтому оставили подсказки:
    <?php
    
    use yii\helpers\Html;
    
    /* @var $this yii\web\View */
    /* @var $name string */
    /* @var $message string */
    /* @var $exception Exception */
    
    $this->title = $name;
    ?>


    Из них мы видим, что переменную <?=$name?>
    нам даёт <?=$this->title;?>
    А свалился этот нейм на наши головы из класса View !
    Проведя рефакторинг, я понял, что за <?=$message;?>
    Отвечает языковой пакет Yii2/
    А именно. /vendor/yiisoft/yii2/messages/ru/
    Если конечно вы в конфиге файла main.php указали русский язык. Там их куча, вы можете в этом убедится, да и сам класс показал, что используется модель подставки сообщений, через конструкцию: <?=Yii::t('yii','значение');?>

    Вы спросите, а нахера такой геморрой нужен??

    Отвечаю, во-первых, это не геморрой, а очень даже классное решение! Убивает сразу двух зайцев наповал! Мультиязычность - раз, Повторяющиеся элементы - два! Благодаря такому решению не надо ковырять весь код, достаточно заменяющие элементы заменить такой конструкцией, и всё, поменял текст или дизайн кнопки "обновить", сделал это в одном месте, в файле yii.php и всё, дизайн и текст поменялся во всём сайте, а отредактировали один файл!!! Это невероятно удобно. Так и с ошибками и с сообщениями, зачем писать на каждой страничке ручками "ваше сообщение успешно отправлено", если можно прописать значение = перевод. Так вот, в голове кода была ещё одна подсказка /* @var $exception Exception */
    и в самом классе ссылка на мануал php7 - php.net/manual/ru/exception.getmessage.php

    Таким образом мы имеем:
    class HttpException extends UserException
    {
        /**
         * @var int HTTP status code, such as 403, 404, 500, etc.
         */
        public $statusCode;
    
    
        /**
         * Constructor.
         * @param int $status HTTP status code, such as 404, 500, etc.
         * @param string $message error message
         * @param int $code error code
         * @param \Exception $previous The previous exception used for the exception chaining.
         */
        public function __construct($status, $message = null, $code = 0, \Exception $previous = null)
        {
            $this->statusCode = $status;
            parent::__construct($message, $code, $previous);
        }
    
        /**
         * @return string the user-friendly name of this exception
         */
        public function getName()
        {
            if (isset(Response::$httpStatuses[$this->statusCode])) {
                return Response::$httpStatuses[$this->statusCode];
            } else {
                return 'Error';
            }
        }
    }

    Ну так, раз мы можем указать код ошибки, public $statusCode;
    То можно тупо и условия поставить, например:
    <?=($exception->statusCode == '404') ? $this->title = "Ошибка 404" : ''; ?>
    <?=($exception->statusCode == '403') ? $this->title = "Доступ запрещён" : ''; ?>
    <?=($exception->statusCode == '500') ? $this->title = "Внутренняя ошибка сервера" : ''; ?>

    А текст ошибки под заголовком редактируется в языковом пакете:
    /vendor/yiisoft/yii2/messages/ru/yii.php
    $message

    <?php
    return [
    ...
    'Page not found.' => 'Страница не найдена.',
    'You are not allowed to perform this action.' => 'Вам не разрешено производить данное действие.',
    'An internal server error occurred.' => 'Возникла внутренняя ошибка сервера.',
    ...
    ];

    Выводится как <?=Yii::t('yii', 'Page not found.');?> и т д...
    Но вам выводить ничего не надо, класс сам определит код ошибки и выведет её текст.
    Как заменить заголовок ошибки я уже написал выше.

    --
    Это был полный разбор страницы ошибок, благодарю всех за внимание. Пока :)
    Ответ написан
    Комментировать