• Как правильно использовать функцию php?

    rakot
    @rakot
    Сразу извинюсь за душнила mode on. Иногда я забываю за что хейтят PHP, когда я вижу подобный код, то спускаюсь на землю.
    1. Не надо делать echo в функции, если делаете echo, то и называйте функцию echoMeta, но все равно, каноничнее возвращать результат.
    2. get_the_ID - ужасное название. Что за the? Это какой-то божественный id? Почему id большими буквами? Я понимаю когда идет спор getJson или getJSON, но в случае с get_json уже споров нет.
    3. Зачем вы пытаетесь изобрести вывод JSON? У вас любая ковычка в данных положит страницу. Сформируйте объект и штатными средствами сгенерируйте json.
    4. Разделите логику и шаблон, на эти куски echo больно смотреть, хотя в WP это канон.
    Ответ написан
    Комментировать
  • Как вернуть 2 значения в PHP return?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    Вариант 1 - Деструктуризация:
    // Возврат нескольких значений:
    function some() {
        return [23, 42];
    }
    
    // Получение
    [$a, $b] = some();
    
    \var_dump($a, $b);


    Вариант 2 - Деструктуризация с ключами:
    // Возврат нескольких значений:
    function some() {
        return ['a' => 23, 'b' => 42];
    }
    
    // Получение
    ['a' => $a, 'b' => $b] = some();
    
    \var_dump($a, $b);


    Вариант 3 - Генераторы с ключами:
    function some() {
        yield 'a' => 23;
        yield 'b' => 42;
    }
    
    foreach (some() as $key => $value) {
      echo $key . ':' . $value; // a:23 b:42
    }


    Вариант 4 - Генераторы без ключей:
    function some() {
        yield 23;
        yield 42;
    }
    
    foreach (some() as $value) {
      echo $value; // 23 42
    }


    Вариант 5 - Генераторы с возвратом:
    function some() {
        yield 23;
        return 42;
    }
    
    $value = some();
    echo $value->current(); // 23
    $value->next();
    echo $value->getReturn(); // 42


    Вариант 6 - DTO:
    class DataTransferObject
    {
        private $a;
        private $b;
    
        public function __construct($a, $b)
        {
            $this->a = $a;
            $this->b = $b;
        }
    
        public function getA()
        {
            return $this->a;
        }
    
        public function getB()
        {
            return $this->b;
        }
    }
    
    function some() {
        return new DataTransferObject(23, 42);
    }
    
    $value = some();
    echo $value->getA(); // 23
    echo $value->getB(); // 42


    И ещё куча всяких вариантов, но мне влом придумывать уже)
    Ответ написан
    4 комментария
  • Может стоит бросить это дело? Что делать если ты медленнее всех да еще и в возрасте?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Учитесь учиться самостоятельно на своём уровне опыта (без "курсов").
    2. Смотрите только на свою цель (а не по "сторонам" и на тех, кто чего достиг в вашем возрасте).
    3. "Слушайте" только язык логики и математики. Не слушайте "сектантов".

    Возраст и интеллект - никак не связаны.
    А интеллект даётся только с личным опытом и личным трудом при самообучении.
    Ответ написан
    Комментировать
  • Как в yii2 сменить режим?

    @profluck
    Простое решение с деплоем Yii2 basic, проверять среду по IP в файле /web/index.php
    if($_SERVER['REMOTE_ADDR'] == '127.0.0.1') {
        defined('YII_DEBUG') or define('YII_DEBUG', true);
        defined('YII_ENV') or define('YII_ENV', 'dev');
    }

    В случае с Yii2 advanced, файл init, как написал выше Евгений Бухарев
    Ответ написан
    Комментировать
  • Yii2 - как изменить сообщение об ошибке 403 и т.п.?

    dmitrytyt
    @dmitrytyt
    Дополню своим ответом.
    При использовании таких настроек в SiteController.php у меня появляется код ошибки 500
    Это происходит, когда у пользователя нет роли admin.
    public function behaviors() {
        return [
          'access' => [
            'class' => AccessControl::className(),
            'rules' => [
              [
                'allow' => true,
                'roles' => ['admin']
              ],
            ],
          ],
        ];
      }
    
    /**
         * {@inheritdoc}
         */
        public function actions()
        {
            return [
                'error' => [
                    'class' => ErrorAction::class,
                    // Тут можно добавить свой шаблон. 
                    // Или ничего не указывать, при этом будет использоваться тот, который прописан в 'errorHandler'
                    'view' => 'site/error', 
                    'layout' => 'error'
                ]
            ];
        }


    И сообщение:

    An Error occurred while handling another error:
    yii\web\ForbiddenHttpException: Вам не разрешено производить данное действие. in \vendor\yiisoft\yii2\filters\AccessControl.php:158


    Оказывается, что дело не доходит до 403 ошибки. Оно прерывается раньше.

    Решение добавить исключение для контроллера error:
    public function behaviors() {
        return [
          'access' => [
            'class' => AccessControl::className(),
            'except' => ['error'],
            'rules' => [
              [
                'allow' => true,
                'roles' => ['admin']
              ],
            ],
          ],
        ];
      }


    или
    public function behaviors() {
        return [
          'access' => [
            'class' => AccessControl::className(),
            'rules' => [
             [
                 'actions' => ['error'],
                 'allow' => true,
              ],
              [
                 'allow' => true,
                 'roles' => ['admin']
              ],
            ],
          ],
        ];
      }
    Ответ написан
    Комментировать
  • Есть ли смысл учить wordpress в 2020?

    neuotq
    @neuotq
    Прокрастинация
    Да.
    Вообще глупый вопрос, вы уж извините.
    Есть смысл учить любой инструмент который вам нужен в работе. Нужен wordress, ок. Учите.
    А насчет того, что там что-то умирает и тп, ну до этого нужно ещё дожить, возможно вы уже даже не будете разработчиком, а руководителем например?
    Короче говоря, делайте и учите то что получается и имеет спрос.
    Wordpress еще долго будет иметь крайне высокий спрос, а php вовсе не умирает, свою долю в своей нише он имеет достаточно серьёзную и активно развивается. Как и вордпрес
    Ответ написан
    Комментировать
  • Composer не видит переменную PATH?

    mcmraak
    @mcmraak
    php+sql+js+bicycle+crutches
    Я путь к php поставил ниже, после пути к файлам composer

    Аналогично, нужно всего лишь поставить пути к PHP в конце списка системной переменной PATH. В windows7 все пути просто перечисляются через точку с запятой в одной строке, по этому надо вырезать и вставить, что-бы получилось например вот так: C:\ProgramData\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\Git\cmd;C:\Program Files\nodejs\;C:\ProgramData\ComposerSetup\bin;D:\OpenServer\modules\php\PHP-5.5-x64;C:\php55
    Ответ написан
    1 комментарий
  • Composer не видит переменную PATH?

    vangelis83
    @vangelis83
    Начинающий веб разработчик
    У меня была такая проблема. Решил ее следующим образом: в windows 10 есть окно, в котором все пути выводятся в отдельных строках и там же есть кнопки "Вверх", "Вниз". Я путь к php поставил ниже, после пути к файлам composer. И случилось чудо, composer у меня заработал.
    Ответ написан
    4 комментария
  • Как обновить bower пакет в yii2?

    vakorovin
    @vakorovin
    Разработчик
    На самом деле всё достаточно просто. Смотрите:
    1. Идёте сюда и находите нужный пакет.

    2. Скажем, нам нужен font awesome:
    f3951f8e1bb4448fb9fdd0552ad28648.jpg

    3. Создаем asset:
    <?php
    namespace backend\assets;
    
    use yii\web\AssetBundle;
    
    class FontAwesomeAsset extends AssetBundle
    {
        public $sourcePath = '@bower/components-font-awesome';
    
        public $css = [
            'css/font-awesome.min.css',
        ];
    }


    4. PROFIT
    Ответ написан
    Комментировать
  • Где в 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.');?> и т д...
    Но вам выводить ничего не надо, класс сам определит код ошибки и выведет её текст.
    Как заменить заголовок ошибки я уже написал выше.

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

    @stictt
    просто рак
    Не знаю может мне одном, но мне кажется, что вопрос поставлен не правильно. Если ставить вопрос прибыльности области, то ответ да, есть люди которые получают за это деньги. Прежде всего КАК вы собираетесь это делать, какую нишу занять, и тд и тд. все это имеет большую важность чем постановка вопроса, а можно ли заработать. Сейчас не редки примеры инди игр написаные в гараже которые имеют доход с продукта выше чем многие ААА игры. Если вы хотите нанять человека и сказать, сделай мне игру чтобы иметь много денег, скорей всего вы избрали не тот подход.
    Ответ написан
    Комментировать
  • Как из массива сделать список?

    usdglander
    @usdglander Куратор тега PHP
    Yipee-ki-yay
    $tags = implode(',', array_map(function($tag) { return $tag->name; }, get_the_tags()));
    Ответ написан
    1 комментарий
  • Является ли Docker/Vagrant сейчас стандартом для dev-окружения веб-разработчика?

    Стоит ли переучиваться сразу на Docker?
    Стоит. Программисты его по разному немного распробовали, теперь неистоствуют.

    Сложилось впечатление, что Docker только для продакшена норм подходит.
    Продакшн продакшену рознь. Как-то интересовался у фанатеющих от него компутерщиков, готовы ли они, чтобы их ЗП считали на ПО развёрнутом в контейнерах? И что-то утвердительных ответов не было.

    Vagrant мне тоже показался неудобным: каждый раз, когда мне нужно сделать хоть одностраничный лендос, мне нужно будет качать 2гб и заново...
    У некоторых контейнеры во время сборки тоже пол интернета тянут.

    Или заставить себя пользоваться VM...
    Увы, реальность такова, что заставлять себя пользоваться тем или иным придётся исходя из сложившегося стека технологий у работодателя. Часто он нелеп и контрконструктивен: на железных серверах подняты виртуалки, в которых запущены контейнеры, в которых работает куча процессов.
    Ответ написан
    8 комментариев
  • Как назвать функцию, которая печатает приветствие?

    yarkov
    @yarkov
    Помог ответ? Отметь решением.
    print_greeting
    printGreeting
    print_hello
    printHello
    Ответ написан
    Комментировать
  • Как назвать функцию, которая печатает приветствие?

    @AlexSku
    не буду отвечать из-за модератора
    string2pseudoGraphics
    Ответ написан
    Комментировать