• Как исправить сдвиг контента из-за magnific popup?

    @AndreyBLG
    При инициализации magnificPopup, установите эти свойства
    $('#selector').magnificPopup({
        fixedContentPos: false,
        fixedBgPos: true
    });
    Ответ написан
    Комментировать
  • Как правильно организовать ajax запросы в MVC архитектуре?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Логичнее вынести все в ajaxController() и работать в нем только с запросами аякса, это в частности позволяет в конструкторе контроллера не вызывать кучу специфических для данного раздела методов, а так же сразу определить для вью соответствующий лэйаут, однако это как раз не всегда удобно. По этому у меня есть аякс контроллер, в который я отсылаю только аякс запросы общего назначения, не привязанные к какому то конкретному разделу(в конструкторе сразу можно обработать тип и сделать ексит если не аякс), а запросы с более четким типом, например работа с пользователем, идет в свой контроллер, и уже в экшене проверяется тип запроса и производятся нужные действия. Это немного более накладно по ресурсам(из за конструктора с доп. функционалом), но более удобно в плане "все подобное в одном месте".
    На уровне роутера имхо никаких обработок быть не должно, его задача отдать роут, а контроллер уже создает логику ответа.
    Ответ написан
    Комментировать
  • Почему Apache2 отдает Forbidden 403?

    @ehabrahabr
    Require all granted

    <VirtualHost *:80>
    	ServerName   site
    
    	...
    
    	<Directory /home/www/site/www>
    		Options Indexes FollowSymLinks MultiViews
    		AllowOverride None
    		Order allow,deny
    		allow from all
    
    		Require all granted
    
    	</Directory>
    
    	...
    
    </VirtualHost>
    Ответ написан
    Комментировать
  • Архитектура приложения. Как сделать независимые модули (сервисы)?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    По этому вопросу очень долго искал ответа))
    Вам уже скинули статью по независимым модулям, но этого мало. Что вам нужно:

    1. Независимый слой MODEL.
    В этой папке находятся Use Case (Service), Сама сущность Entity (AR), Желательно иметь репозитории для изоляции от базы данных ну и другой доменный слой логики, который не зависит ни от чего. Ни от фреймворка, ни от других модулей и пакетов. Ваша задача написать код в этой части так, чтобы его можно было скопировать в любую папку, настроить зависимости и чтобы этот код заработал хоть на чистом PHP. Если не планируете менять фреймворк, то можно зависить от фреймворка.

    2. Зависимости
    Все зависимости модуля реализовать либо через Interface либо через события, но события лучше. А дальше уже синхронизируйте через приложение или отдельный модуль. Можно и по api.

    3. UI (пользовательский интерфейс)
    Он может быть зависимым от других модулей. В него входят: контроллеры, view, формы, vue.js и так далее. В общем то, с чем взаимодействует пользователь.

    Тем самым получается такая система если опираться на MVC:
    VC - могут быть зависимы от других модулей
    M - не может быть зависима ни от чего, кроме PHP. Желательно и отделять слой базы данных с помощью Repository. Тогда ваш пакет будет очень сильно независим даже от базы. И вам вообще будет без разницы куда вы это храните в user или employee.

    Если будет такой слой, то можно спокойно переносить хоть на будущий Yii3. Однако На Yii1 и Yii2 такое сделать сложно. Надо изворачиваться и займет это больше времени. Так как сам Фреймворк вставляет нам палки и приходится делать костыли из-за его монолитности. К такому подходу не привыкли Yii1 и Yii2 разработчики. Обычно на Yii такое понимание «фигак, фигак и в продакшн».

    Такую архитектуру удобно будет строить на Symfony ну и будущем Yii3.

    Рекомендую к прочтению:
    Ответ написан
    7 комментариев
  • Как изменить home на главная в Yii2?

    @Akellacom
    CTO
    Если вы говорите про хлебные крошки, то тогда вот так:

    <?= Breadcrumbs::widget([
            'homeLink' => ['label' => 'Главная', 'url' => '/'],
            'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
    ]) ?>
    Ответ написан
    3 комментария
  • Какое оптимальное количество запросов в БД в yii2?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Какое оптимальное количество запросов в БД в yii2?
    46
    Вы спросите: "почему 46"? А я отвечу: "а почему бы и нет". Раз уж Вы попросили дать Вам ни чем не обусловленную цифру - пусть это будет 46.

    В общей сложности на один action приходится 40 запросов к БД. Скажите, нормально ли это?

    Нормально, ведь это меньше, чем 46. А вот можно ли сократить? Это уже другой вопрос, на который могут ответить экстрасенсы, я без кода не могу.

    Не много ли для проекта небольшого уровня?

    Теперь сложнее. Надо понять что такое "проекта небольшого уровня". Ну раз мы уж начали говорить о вещах не классифицированных - давайте договоримся. Для проекта небольшого уровня - 42. Для среднего - 46, а для большого - 67. Но это только при условии, что
    ничего такого глобального из БД не тянется
    а если тянется, то вводим "коэффициент глобального тягания" (КГТ 0.3) . Итого 46*0.3 = 13,8 запроса в БД

    PS: ограничение по кол-ву запросов для проекта - это глупость. Ваша задача - оптимизировать проект. В процессе оптимизации следует обратить внимание и на количество запросов в БД. И тут мы должны смотреть "а можем ли мы сделать их оптимальнее, сделать их количество меньшим и т.д.", а не подгон под какую-то цифру. Ведь задача - "быстро работает", а не "создает меньше 46 запросов"
    Соори за стеб, не хочу обидеть, просто хотел так обозначить. Сам когда-то задавался таким же вопросом.
    Ответ написан
    2 комментария
  • Как настроить Rules() для модели в Yii2

    Для автора, скорее всего, вопрос уже не актуален, но может кому-нибудь это пригодится.
    Столкнулся с такой же проблемой. Решил следующим образом, причём средствами дефолтного валидатора:
    1. копируем поле $model->username в $model->oldUsername.
    2. в rules пишем следующее:
    public function rules() {
        return [
            //...
            ['username', 'unique', 'targetClass' => Users::className(), 'message' => 'Имя пользователя уже занято', 'filter' => ['!=', 'username', $this->oldUsername]],
            //...
        ];
    }

    Собственно, вот страница документации, которая помогла решить проблему: www.yiiframework.com/doc-2.0/yii-validators-unique...
    Ответ написан
    2 комментария
  • Почему при disabled TRUE в ActiveForm не происходит сохранение модели?

    OKyJIucT
    @OKyJIucT
    Sunshine reggae
    Ставьте не disabled = true, а readonly = true. Внешне выглядит одинаково, но во втором случае содержимое поля будет сохраняться.
    Ответ написан
    2 комментария
  • Yii2. Как использовать Yii::t?

    asf
    @asf Автор вопроса
    Всем спасибо. Вы были правы у меня не правильно указан sourceLanguage.
    И еще пару моментов что бы переводы заработали:

    1) перенес
    <?php
    return [
        'language' => 'ru-RU',
        'sourceLanguage' => 'ru-RU',

    из /common/config/params.php в /common/config/main.php
    2) изменил * на app* в настройках компонента
    'i18n' => [
                'translations' => [
                    'app*'=> [
                        'class' => 'yii\i18n\PhpMessageSource',

    в результате все заработало.
    p.s. если кто попадет в такую проблемную ситуацию как я первым делом посмотрите что выводят
    echo \Yii::$app->language;
    var_dump(\Yii::$app->i18n);
    Ответ написан
    2 комментария
  • Как работать в Yii2 со слешем в конце URL?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый вечер.
    Попробуйте такие настройки.
    'urlManager' => [
          'enablePrettyUrl' => true,
          'showScriptName' => false,
          'suffix' => '/',
          'normalizer' => [
              'class' => 'yii\web\UrlNormalizer',
              'normalizeTrailingSlash' => true,
              'collapseSlashes' => true,
           ],
    // остальные настройки urlManager
    ]

    Или просто добавьте только настройку 'suffix' => '/',
    Ответ написан
    1 комментарий
  • Как исключить значения из массива?

    @JohnDidact
    Нуб во всём
    "перевернуть" второй массив функцией array_flip() и найти схождения двух массивов функцией array_intersect_key() типа:
    $arr2 = array_flip($arr2);
    $arrResult = array_intersect_key($arr1, $arr2);

    Или одной строкой:
    $arrResult = array_intersect_key($arr1, array_flip($arr2));
    Ответ написан
  • Как исключить значения из массива?

    Stalker_RED
    @Stalker_RED
    $food = [
        1 => 'яблоко',
        2 => 'груша',
        3 => 'арбуз',
        4 => 'морковка',
        5 => 'огуречик',
    ];
    
    $keys = [4,5];
    
    $filtered = array_filter($food, function($food_key) use ($keys) {
    	return in_array($food_key, $keys);
    }, ARRAY_FILTER_USE_KEY);

    Демо: https://ideone.com/ZumLMn
    Ответ написан
    1 комментарий
  • Как исключить значения из массива?

    0xD34F
    @0xD34F
    array_filter($arr1, fn($n) => in_array($n, $arr2), ARRAY_FILTER_USE_KEY)

    Если сохранять ключи необязательно, то

    array_map(fn($n) => $arr1[$n], $arr2)
    Ответ написан
    1 комментарий
  • Как в YII2 сделать выполнение определенного действия во всех контроллерах?

    @paldraken
    Сделать некий базовый контроллер у которого переопределить метод
    beforeAction
    В этом методе реализовать вашу логику по считыванию информации.
    А затем те контроллеры в которых надо применять эту логику унаследовать от Базового.

    class BaseController extends \yii\web\Controller
    {
        public function beforeAction($action)
        {
            if (!parent::beforeAction($action)) {
                return false;
            }
            // Тут прописать логику или вызвать отслеживающий сервис
            return true;
        }
    }
    
    class MyController extends BaseController
    {
        public function actionIndex()
        {
    .....
    Ответ написан
    2 комментария
  • Как переопределить стили Bootstrap?

    kawabanga
    @kawabanga
    1) Вы можете просто выпилить б3 из системы, убрав из композера -
    "yiisoft/yii2-bootstrap": "~2.0.0",
    Но, есть хороший шанс, что некоторые компоненты будут требовать b3.

    2) вариант, assets/AppAsset.php - уберите зависимость от
    yii\bootstrap\BootstrapAsset',

    3) Но когда вы будете запускать тот же kartik плагины, bootstrap может сам подключаться,
    Выпилить можно следующим кодом в layout в самом начале
    unset($this->assetBundles['yii\bootstrap\BootstrapAsset']);
    Ответ написан
    3 комментария
  • Как исправить ошибку Unable to resolve the request: site/error на yii2 basic?

    taurus2790
    @taurus2790
    Я не программер я только учусъ
    Возможно уже и нет необходимости отвечать, но вдруг кому пригодится.

    Возможно проблема в том что контроллер не знает на какой экшен отправлять ошибку.

    Для этого необходимо в контроллере прописать

    /**
         * {@inheritdoc}
         */
        public function actions()
        {
            return [
                'error' => [
                    'class' => 'yii\web\ErrorAction',
                ],
            ];
        }
    Ответ написан
    1 комментарий
  • Как правильно передать model в layout в yii2?

    @myphpscript
    public function run() {
    		
    		
    		return $this->render('callbackform', [
    			'model' => new Callback(),
    		]);
    	}


    в frontend/widgets/views делаете вьюшку с формой callbackform.php типа такой
    <?php
    use yii\helpers\Url;
    use yii\helpers\Html;
    use yii\widgets\ActiveForm;
    ?>
    
    <div id="callback">
        <?php $form = ActiveForm::begin([
    	    'id' => 'callback-form',
    	    'enableAjaxValidation' => true,
    	    'action' => Url::to(['site/callback']),
    	    'validationUrl' => Url::to(['site/callback']),
    	]); ?>
    	
            <?= $form->field($model, 'name')->textInput([
    			'placeholder' => 'Имя',
    		])->label(''); ?>
    		
    		<?= $form->field($model, 'phone')->textInput([
    			'placeholder' => 'Телефон',
    		])->label(''); ?>
    		
    		 <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']) ?>
    
        <?php $form->end(); ?>
    </div>


    в контроллере site/callback валидацию и отправку
    Ответ написан
    1 комментарий
  • Как убрать имя контроллера из url в Yii?

    Для yii2
    .htaccess
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php

    web.php
    ....
                'urlManager' => [
                'enablePrettyUrl' => true,
                 'showScriptName' => false,
                 'suffix'=>'/',
                 'rules'=>array(
                     ''=>'site/index',
                     '<action>'=>'site/<action>',
                 ),
            ],
    ...

    Для Yii1 (изменения в htaccess не требуются)
    'urlManager'=>array(
      'urlFormat'=>'path',
      'rules'=>array(
      '<action:\w+>'=>'<controller>/<action>',
      ),
    ),
    Ответ написан
    4 комментария
  • Поиск в модальном окне?

    Stalker_RED
    @Stalker_RED
    скрываем лишнее jsfiddle.net/Stalk/bfp8qe06
    подсвечиваем нужное jsfiddle.net/Stalk/bfp8qe06/2
    Ответ написан
    Комментировать