Задать вопрос
  • Не правильно отображается дата при использовании модуля DateControl (kartik-v)?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Вам нужно перед сохранением в базу переконвектировать дату в unix формат сделать это можно так:
    (new DateTimeImmutable('05.07.2020'))->getTimestamp();
    Ответ написан
    Комментировать
  • Какие сущности или слои должно иметь приложения такого формата?

    myks92
    @myks92
    Нашёл решение — пометь вопрос ответом!
    1. DDD начинается не с базы, а с кода.
    2. Entity может быть разной. Если вы говорите про анемичную сущность, то у неё есть set и get. Однако это считается не очень хорошая практика. Больше она подходит для быстрой разработки. Поэтому сущность должна быть богатой. В идеале состоять только из методов модификации убирая get и set. В таком случае вы можете закладывать бизнес правила прямо в сущности. Вы сказали, что она не может состоять из логики - это ошибочно. Хорошая сущность должна иметь логику. Пример
    3. Entity ничего не возвращает. Это задача репозитория.
    4. Кроме Entity есть агрегат. Вот он как раз включает в себя все детали.

    Про DDD лучше читать или смотреть. Так как это достаточно обширная тема, в которой нужно разбираться не только по ответам на тостере, но и на практике.

    Статья в помощь: https://m.habr.com/ru/post/61524/
    Ответ написан
    Комментировать
  • Как вывести четные или не четные элементы массива?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    function odd($var)
    {
        // является ли переданное число нечетным
        return $var & 1;
    }
    
    function even($var)
    {
        // является ли переданное число четным
        return !($var & 1);
    }
    
    $array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];
    $array2 = [6, 7, 8, 9, 10, 11, 12];
    
    echo "Нечетные:\n";
    print_r(array_filter($array1, "odd"));
    echo "Четные:\n";
    print_r(array_filter($array2, "even"));


    Используя анонимную функцию:
    $arr = [1,2,3,4,5,6,7,8,9];
    
    $odd = array_filter($arr, function($x) { return $x & 1;});
    
    echo "Нечетные:\n";
    print_r($odd);
    
    $even = array_filter($arr, function($x) { return !($x & 1);});
    
    echo "Четные:\n";
    print_r($even);
    Ответ написан
    7 комментариев
  • Как получить результат за пределами функции?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    function getUser($pdo, $userid)
    {
      $stmt = $pdo->prepare("SELECT * FROM tgb_user WHERE name = ?");
      $stmt->execute(array($userid));
      return $stmt->fetchAll();
    }
    
    $opt = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ];
    $pdo = new PDO($dsn, $user, $pass, $opt);
    $userid = $tgObj->message->from->id;
    $dataPdo = getUser($pdo, $userid);
    
    var_dump($dataPdo);
    Ответ написан
    3 комментария
  • Как получить элементы массива больше указанного?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    $num = 3;
    $arr = [3, 3, 4, 5];
    
    $arrFilter = array_filter($arr, function($x) use ($num) { return $x > $num;});
    Ответ написан
    Комментировать
  • Как узнать сколько раз число встречается в массиве?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Вариант 1
    $count = count(array_filter($uid, function($x) { return $x==12;}));

    Вариант 2
    $array = array(1, "hello", 1, "world", "hello");
    print_r(array_count_values($array))

    Результат:
    Array
    (
        [1] => 2
        [hello] => 2
        [world] => 1
    )
    Ответ написан
    1 комментарий
  • Что за мистика с условием при дробных числах?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Нужно округлить
    $a = 260 * 0.98;
    
    if (round($a, 1) < 254.8) {
      echo "Error";
    }
    
    var_dump($a);
    Ответ написан
    3 комментария
  • Как запускать php раз в час?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Cron
    Ответ написан
    Комментировать
  • Как сделать сортировку файлов из папки по дате изменения?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    function listdirByDate($path){
            $dir = opendir($path);
            $list = array();
            while($file = readdir($dir)){
                if ($file != '.' && $file != '..' && $file[strlen($file)-1] != '~' ){
                    $ctime = filectime( $path . $file ) . ',' . $file;
                    $list[$ctime] = $file;
                }
            }
            closedir($dir);
            krsort($list); // используя методы krsort и ksort можем влиять на порядок сортировки
            return $list;
        }
    Ответ написан
    Комментировать
  • Как узнать есть ли число в массиве?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    $arr = [1, 3, -5, 7];
    $num = 3;
      for($i=0; $i < count($arr); $i++) {
        if ($num == $arr[$i]) {
          return 1;
        }
      }
    
    return 0;


    in_array(3, $arr);
    Ответ написан
    Комментировать
  • Как вывести первый элемент меньше нуля?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    По вашему примеру будет так:
    $arr = [1, 3, -5, 4];
    
    for($i=0; $i < count($arr); $i++) {
        if($arr[$i] < 0) {
            return $arr[$i];
        }
    }

    Можно так:
    $arr = [1, 3, -5, 4];
    
    foreach($arr as $value) {
        if($value < 0) {
           return $value;
        }
    }
    Ответ написан
    Комментировать
  • Почему не разворачивается проект?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Информации достаточно мало может быть все что угодно. Нужно смотреть как у вас подключаются стили. Возможно они как-то не так публикуются. Или файл отсутствует. Смотрите консоль браузера. Например, на Yii2 есть кэш стилей в папке assets. Даже если удалить исходник, то в assets он будет и все будет работать. Но если запустить на новом, где нет этой папке - страницы будут кривыми.

    Возможно у вас нет прав доступа к этой папке где стили. Или где-то путь не верно указан.
    Ответ написан
  • Авторизация PHP + сессии - безопасность?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Тема неоднократно поднималась - можете посмотреть. Но есть пару видео про это. Полезные, но не знаю захочется ли вам смотреть. Однако оставлю ссылки. Думаю, будет полезно.

    Состояние: Cookies и сессии
    Способы аутентификации
    Ответ написан
    Комментировать
  • Как в Yii1.1 лучше реализовать кнопку перенаправляющую пользователя на другой контроллер?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    У вас всё верно. Если изменения произойдут на действующем проекте, то и изменении ссылки будет мало. Так как вы потеряете поисковые переходы. Для этого делают редирект на новый адрес средствами сервера. И есть такое понятие как Роутинг.
    Ответ написан
    Комментировать
  • Как отловить 503 ошибку php, yii2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    try {
        //Код с ошибкой
    } catch (Exception $e) {
        if ($e->getCode() === 503) {
            ///Ваша обработка
        }
        Yii::$app->errorHandler->logException($e); //Записываем ошибку в лог
    }
    Ответ написан
    1 комментарий
  • Yii2 Invalid argument supplied for foreach() в чём смысл ошибки?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Этот запрос не возвращает массив. Тут либо пусто, либо не массив.
    $masters = Master::find()->select('id' => '1')->where('rost')->one();

    Соотвественно foreach (перебор массива) не требуется в коде. Уберите его!
    Ответ написан
    Комментировать
  • Как отправлять письма в cqs команде?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    Если будете напрямую подключать swiftmailer будете зависеть от него. Сделайте свой Sender, можно в виде интерфейса. Через DI будете подключать нужную реализацию. Вызывайте в команде. Тестируете сам сервис отправки, а не всю команду целиком.
    Ответ написан
  • Как убрать из кода страниц   через PHP?

    myks92
    @myks92 Куратор тега PHP
    Нашёл решение — пометь вопрос ответом!
    $text = htmlentities($text);
    $text = str_replace("&nbsp;", '', $text);
    Ответ написан
  • Как создать универсальное расширение для сайтов?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    1. Этот вариант в принципе хорошо применим для более современных фреймворков, но Yii2 достаточно старый. Он не поддерживает PSR стандарты из-за которых он очень плохо совместим с другими. То есть для Yii написать такой модуль и подключить к симфонии невозможно, так же как и наоборот. К тому же на Yii используется Active Record, а на Symfony Doctrine. Поэтому вам можно вынести только какие-то компоненты и подключать их в своих проектах. С отдельным модулем будет сложно. Модуль Yii можно будет использовать только там. Если вы пойдёте таким способом, то вам нужно вынести этот пакет в репозиторий и подключать этот пакет через композер. Внутри проекта останется настроить конфиг, настроить зависимости через DI. Пример.

    2. Второй вариант более гибче. Это уже больше про микросервисы. Приложения будут взаимодействовать через API. В таком случае вам вообще без разницы какой там фреймворк и база. Современные большие системы именно так и устроены. Однако это сложна система, на которую требуется много знаний и времени.

    На вашем месте, проектируя на Yii2 я бы не стал об этом париться. Во-первых, этот иодвль врят ли кому будет нужен. Во-вторых, он не совместим с другими фреймворками. Если вам требуется такой модуль - просто копируйте его в другой проект. Если почувствуете, что часто изменяется и нужна совместимость с другими проектами - выносите в пакет и подключайте через композер.
    Ответ написан
    Комментировать
  • Как создать 2 типа пользователей в YIi2?

    myks92
    @myks92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Клиенты — не всегда пользователи системы.
    Партнёры — не всегда пользователи системы.

    Если мыслить в таком ключе, то Вам нужно разделять эти ответственности. Это будет более правильно. У вас получится система, разделенная на модули. Это позволит вам сделать независимость как на уровне кода, так и на уровне базы. Разделить свой код и базу по ответственностям.

    • Модуль Auth - Система управление аутентификацией: логин, пароль, телефон, социальные сети (для входа по соц сети), роли, разрешения ну и так далее.
    • Модуль Partners - Система управление партнёрами.
    • Модуль CRM - Система управления взаимоотношениями с клиентами.


    В клиентах, партнёрах есть ссылка на user_id (аккаунт). Таким образом у вас система разделена на свои ответсвенности (модули) и каждая система решает одну определённую задачу/проблему. Ваш код становится менее связанным и более независимым.

    User вам нужно чтобы только авторизоваться. А когда он авторизован вы работаете с Client или Partner. В UI интерфейсе вы делаете два личных кабинета или один с переключением (кабинет клиента, кабинет партнёра)

    P.S.: Важный комментарий. Под модулями я понимаю не модули Yii, а область кода который сфокусирован для решения определённой задачи и слабо связан с другими модулями. В Yii3 модулей вообще нет. Модули могут быть разделены папками:
    src/Model/User
    src/Model/СRM
    Ответ написан
    Комментировать