• Как добавить анимацию для виджета Alert?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Вариант 1: Выкинуть стандартный виджет, сделать через alertifyjs.com
    Вариант 2: Использовать https://daneden.github.io/animate.css/
    Вариант 3: Написать в css свой велосипед
    Ответ написан
    1 комментарий
  • Существуют способы "незаметной" регистрации?

    mitaichik
    @mitaichik
    Я б не выпендривался и сделал как у всех - стандартный набор (телефон, емейл, соцсети).

    По новостям слышал что банки начали по голосу проверять, по лицу еще можно.
    Ответ написан
    Комментировать
  • Скажите, что за ошибка такая?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    2 комментария
  • Как поставить водяной знак на изображение?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    в yii2 есть расширение imagine вот доки конкретно по watermark: imagine.readthedocs.io/en/latest/usage/introductio...

    $watermark = $imagine->open('/my/watermark.png');
    $image     = $imagine->open('/path/to/image.jpg');
    $size      = $image->getSize();
    $wSize     = $watermark->getSize();
    
    $bottomRight = new Imagine\Image\Point($size->getWidth() - $wSize->getWidth(), $size->getHeight() - $wSize->getHeight());
    
    $image->paste($watermark, $bottomRight);
    Ответ написан
    4 комментария
  • Как максимально перемешать строки?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Каждый IP адрес это 32-битное целое.

    Можно отсортировать по обратному порядку бит в числе – это здорово раскидает соседние адреса.

    Понадобятся три функции:
    function ip2n( $ip ) { // строку ip перевести в целое
    	$ipa = explode('.', $ip);
    	return $ipa[0]<<24 | $ipa[1] << 16 | $ipa[2] << 8 | $ipa[3];
    }
    
    function n2ip( $n ) { // целое перевести в строку ip
    	return implode('.', array(
    		$n >> 24 & 0xFF,
    		$n >> 16 & 0xFF,
    		$n >> 8  & 0xFF,
    		$n & 0xFF
    	));
    }
    
    function bitreverse( $n ) { // развернуть порядок бит в 32-битном целом
    	return bindec( strrev( sprintf( '%032b', $n)));
    }


    Теперь остаётся загрузить ваши ip в массив, и прогнать через ip2n, bitreverse, обычную сортировку целых по возрастанию, bitreverse и n2ip. Пример:
    $ips = array(
    	'192.168.1.15',
    	'192.168.1.16',
    	'192.168.1.17',
    	'95.181.217.91',
    	'95.181.217.96',
    	'95.181.217.97',
    	'91.216.3.90',
    	'91.216.3.91',
    	'91.216.3.99',
    	'5.62.157.78',
    	'5.62.157.84',
    	'5.62.157.87',
    );
    
    $ips = array_map( 'ip2n', $ips);
    $ips = array_map( 'bitreverse', $ips);
    sort( $ips, SORT_NUMERIC);
    $ips = array_map( 'bitreverse', $ips);
    $ips = array_map( 'n2ip', $ips);
    
    print_r($ips);
    /* Array
    (
        [0] => 95.181.217.96
        [1] => 192.168.1.16
        [2] => 5.62.157.84
        [3] => 91.216.3.90
        [4] => 5.62.157.78
        [5] => 95.181.217.97
        [6] => 192.168.1.17
        [7] => 91.216.3.99
        [8] => 95.181.217.91
        [9] => 91.216.3.91
        [10] => 5.62.157.87
        [11] => 192.168.1.15
    ) */
    Ответ написан
    2 комментария
  • Как максимально перемешать строки?

    @BorisKorobkov Куратор тега PHP
    Web developer
    Ответ написан
    Комментировать
  • Образец (CMS, framework, библиотека) правильной архитектуры PHP7 для изучения и тренировки?

    @AlexndrNovikov
    Solution Architect in Spiral Scout
    Я бы предложил https://github.com/symfony/symfony
    По коммитам видно, что поддерживаемая версия PHP 7.1 .
    Если будет сложновато пойти по Guide и разбираться что и как работает - можно рассматривать каждй компонент изолированно (https://github.com/symfony/symfony/tree/master/src... Один компонент в голове держать несложно, понять его назначение и функционал тоже. И увидеть паттерны, соответственно.
    Если хочется поиграть с данными и UI - то cmf.symfony.com .

    Предложенный xzdshr Laravel - тоже неплохой вариант, а вот Yii2 я не советовал бы. Сам с ним проработал 3 года, люблю этот фреймворк, но именно для изучения (или даже навязывания) правильной архитектуры он не столь подходит. Какие-то вещи срезаны, какие-то объединены для удобства - и лучше не привыкать к этому как к правильному, а прийти к этому когда уже понимаешь, что случилось, и для чего так сделали.
    Ответ написан
    Комментировать
  • Как сделать проверку BETWEEN между бОльшим и меньшим числом?

    @BorisKorobkov Куратор тега MySQL
    Web developer
    Делать условие какая переменная больше и менять местами в запросе не хочется

    Именно это и будет самым эффективным решением.
    Ответ написан
    Комментировать
  • Yii2 gridview как получить кол-во строк?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    1. gridview имеет пагинацию. Вам надо количество не пустых строк для текущей страницы или для всей базы?
    2. зачем 'value'=> 'var.full_name', если потом переопределять контент?
    3. Не стоит делать запросы из view, для этого есть контролер, но видимо это связанные данные, а значит стоит возложить это на модель.

    Нужно получить кол-во строк которые не пустые

    В зависимости как это будет использоваться. Если просто вывести где-то цифру пустых строк на текущей странице, то возможно проще 2 строчки jquery написать?
    Но можно и на php. Или вынести логику в модель или сделать свой ActiveDataProvider и туда засунуть метод.
    Ответ написан
    4 комментария
  • Почему в YII2 не читается GET параметр в экшене определенного имени?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    У Вас ошибка в TransportsController на строке 22, а Вы приводите код BasicController
    Видимо у Вас вызывается из TransportsController метод и не передается обязательный аргумент.
    Ошибка у Вас и на сервере и на локалке, просто на локалке видимо ошибки отключены.

    ПС. Странная у Вас там архитектура.
    Ответ написан
    Комментировать
  • Знакомый говорит что неправильно. Правильно ли?

    @BorisKorobkov Куратор тега PHP
    Web developer
    Судя по тому, что вы сюда даже исходник не можете выложить в читаемом виде, то и весь ваш остальной код не лучше. Поддерживать его не возьмется ни один нормальный разработчик - гораздо быстрее будет написать в нуля правильно, чем разобраться в ваших if, include и пр.

    Хотя на скрине скрыт кусок "select *", но могу поспорить, что через форму регистрации в Nick возможна SQL-инъекция. И через браузер посторонний человек одним запросом может слить себе все ваши данные, а вторым - удалить вашу БД.
    Ответ написан
    Комментировать
  • Зачем нужны неизменяемые объекты?

    @kstyle
    Комментировать
  • Миграции могут уронить проект, как быть?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Из за миграций бд залочилась, после чего вообще упал MySQL.
    Это MySQL, с ним такое бывает.

    Причиной была слишком большая таблица с большим кол-во записей, а в миграциях был ADD COLUMN Как быть, как можно подстраховаться в таких случаях, кроме тестирования?
    Я не уверен на 100% (ещё не проснулся, что бы слишком трезво соображать), но мне кажется тут есть 2 основных варианта решения проблемы:
    1. Не использовать MySQL
    2. Использовать репликацию в MySQL

    Причиной была слишком большая таблица с большим кол-во записей
    Мне кажется, наиболее вероятной проблемой был слишком слабая машина (память, процессор, диск), для такого объёма данных БД, а не слишком большая таблица :)
    Ответ написан
    2 комментария
  • Какая практика лучше "писать код вручную" или "юзать виджет"?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Основной плюс - повторное использование кода и более читаемый код. Ответ на вопрос "стоит ли использовать встроенные виджеты" - полностью зависит от Вашего приложение. Где-то они подходят, где-то нет. А вот в том, что надо стараться писать больше своих виджетов - сомнений нет, потому как тут еще удобная работа с зависимостями, assets и т.д.
    Ну и конечно если немного не устраивает тот же Nav, можно сделать свой виджет и унаследовать от него. Переопределить в нем все что необходимо и привести к нужному для проекта виду. Это песочница. Вам дали гору пасочек, какие из них использовать или использовать свои - Ваш выбор.
    Ответ написан
    Комментировать
  • Как проверить существоние объекта в Yii2?

    Screamie
    @Screamie
    Full-stack разработчик
    Можно сделать проверку через Yii::$app->user->isGuest
    Ответ написан
    6 комментариев
  • Проблемы с выводом картинок при использованной пагинации?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Поддерживаю Максим Федоров на все 100% и добавлю:
    возвращает в $productss массив, состоящий из массивов, а не объектов.

    не может быть. ->all() возвращает массив объектов. И если Вы действительно получили массив без объектов, то либо где-то затерялся ->asArray или какой-нибудь ArrayHelper::map в afterfind например или еще где-то.
    И еще:
    $image = $productss->getImage();
    echo $image->getUrl();

    не должно работать, так как там массив, а не объект, а значит или
    $image = $productss[0]->getImage()->getUrl();
    или
    foreach($productss as $one){
    echo $one->getImage()->getUrl();
    }

    А если Image у Вас еще и связь то:
    или
    foreach($productss as $one){
    echo $one->image->getUrl();
    }

    или
    foreach($productss as $one){
    echo $one->getImage()->one()->getUrl();
    }
    Ответ написан
    Комментировать
  • Почему метод отправки формы называется как папка для видов контроллера (YII2)?

    mitaichik
    @mitaichik
    Автоматом такое не может быть. Вы сами где-то задаете method = test. Ищите ошибку в своем коде. Возможно вы устанавливаете параметры с помощью DI?
    Ответ написан
    Комментировать
  • Какой самый быстрый способ сравнения двух таблиц MySQL?

    Wolfnsex
    @Wolfnsex Куратор тега PHP
    Если не хочешь быть первым - не вставай в очередь!
    На вскидку, самый "адекватный" способ, называется "репликация", на счёт репликации отдельных таблиц в MySQL не уверен, но в целом можно что-то придумать.

    Если репликация по каким-то причинам не устраивает, я думаю, оптимальнее всего будет не сравнивать две базы/таблицы постоянно, а например, создать триггер, который при обновлении/добавлении новой записи (возможно, это будет 2 триггера или более) будет писать в 3-ю таблицу, что "добавился" такой-то элемент или "обновился такой-то элемент", потом в "час Х" Вы собираете данные из этой таблицы, делаете выборку нужных записей (по ID'шнику например) и отправляете на дочерний сервер.

    P.S. Это один из простых вариантов.
    Ответ написан
    2 комментария
  • Yii2-date-range пример использования в GridView?

    @BorisKorobkov
    Web developer
    При чем тут DateRangeBehavior?

    Примеров использования DateRangePicker полно на demos.krajee.com/date-range#usage . В частности, для фильтрации удобнее использовать пример "Advanced configuration using separate start and end attributes to store information". Дальнейшая фильтрация не отличается от любого другого поля.
    Ответ написан
    Комментировать
  • Правильный ли подход к построению архитектуры?

    @MadridianFox
    Web-программист, многостаночник
    Пример не очень хороший. Тут очень сильно зависит от предметной области. Если вы разрабатываете систему управления всякими вокрфловами, в которых могут участвовать разные сущности, то наверное да, однако тут можно зайти с другой стороны - что если выделить класс сущностей, которые могут использоваться в управлении воркфлоу как отдельную сущность, которая может нести разную полезную нагрузку в зависимости от типа? Тогда статус будет атрибутом этой сущности, а полезная нагрузка уже будет выносится в компоненты той же самой Стратегии...
    Если же, как в примере, вы просто заметили схожесть процессов работы с разными сущностями, то скорее всего не стоит париться. Можно конечно унифицировать, но когда сущности действительно разные, рано или поздно появятся различия, ради поддержки которых придётся хакать свою же систему.

    У меня на работе мы создали унифицированную систему (и да, там ключевую роль играют статусы) по работе с разного рода заявками/тикетами/уведомлениями, но этому предшествовало пара лет работы с этим же функционалом, реализованным отдельно.
    Ответ написан
    3 комментария