20 заметок с тегом

php

Запустить консольную команду в Yii2

Представим, что есть консольная команда в /command/HelloController под названием actionSearch().
Логика, которая, используется в данном экшне и которую необходимо использовать еще где-то в проекте, лучше вынести в модель. Но бывает и так, что необходимо запустить экшн сразу в проекте.
Это можно сделать вот таким образом:

$controller = new HelloController(Yii::$app->controller->id, Yii::$app);
$controller->actionSearch()
26 ноября   php   yii2

Импорт csv-файла и обработка в php

$csvFile = file('/home/oleg/data.csv');
$array = array_map(function($input) {return str_getcsv($input, ";");}, $csvFile );

foreach ($array as $item) {
    $object = new CustomClass();
    $object->name = (string) $item[0];
    $object->title = (string) $item[1];
    $object->price = (float) $item[2];
    $object->save();
}

Что из себя представляет функция str_getcsv — посмотрите в документации

2018   csv   php   str_getcsv

Exception: DateTimeZone::__construct(): Unknown or bad timezone (Europe/Saratov)

Если поймали такую ошибку, а при этом вы открываете сайт php.net и там такой часовой пояс есть, значит необходимо проверить timezonedb на сайте.

Откройте phpinfo() и увидите что-то подобное:

Нас интересует «Olson» Timezone Database Version

1) Если PECL на сервере не установлен, то:

sudo apt-get install php-pear

2) В зависимости от версии php необходимо, чтобы было установлено php-dev.
У меня 7.1, потому я сделаю так:

sudo apt install php7.1-dev

3) Делаем апдейт:

sudo pecl upgrade timezonedb

4) В результате увидим:

5) Значит необходимо открыть php.ini и прописать extension=timezonedb.so

sudo nano /etc/php/7.1/apache2/php.ini

Добавляем в конце файла, сохраняем изменения и сделаем рестарт апача:

sudo service apache2 restart

6) Проверяем phpinfo() и видим изменения:
«Olson» Timezone Database Version 2018.4

Наслаждаемся!

Как исправить ошибку Could not parse version constraint >=~2: Invalid version string «~2»

Вот так делаешь composer update (или install), а получаешь такую ошибку:

[UnexpectedValueException]
Could not parse version constraint >=~2: Invalid version string "~2"

Необходимо выполнить следующее:

php composer.phar global update

а после уже можно выполнить update или install:

php composer.phar update
2018   composer   php
2017   apache2   nginx   php   php5.6   php7.1

Конвертируем поле json в jsonb в PostgreSQL

На чистом SQL это можно сделать так:

ALTER TABLE table_name ALTER COLUMN column_with_json SET DATA TYPE jsonb USING column_with_json::jsonb

Если делать миграцию на Yii2, то можно сделать так:

public function safeUp()
{
    $this->execute('ALTER TABLE table_name ALTER COLUMN column_with_json SET DATA TYPE jsonb USING column_with_json::jsonb');
}
2017   alter column   alter table   json   jsonb   migrate   php   PostgreSQL   sql

Текущее время в формате TIMESTAMP на PHP

Если необходимо знать с учетом часового пояса, то можно сделать это так:

$currentTime = (new \DateTime())
    ->setTimezone(new \DateTimeZone('Europe/Moscow'))
    ->getTimestamp();

Конечно же, часовой пояс используйте свой

Как побороть ошибку Bad Request (#400): Не удалось проверить переданные данные

Такая ошибка часто возникает в случае асинхронного запроса. Все дело в том, что где-то в родительском контроллере включена проверка на Csrf.

Если в текущем контроллере отключить валидацию нельзя (н-р, из-за того, что другие методы этого класса нуждаются в этой проверке), то можно реализовать новый контроллер:

namespace app\controllers;


use Yii;
use yii\web\Controller;
use yii\filters\VerbFilter;

class NewController extends Controller
{
    public $enableCsrfValidation = false;

    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['POST'],
                ],
            ],
        ];
    }
    
    ...
}

Вас как раз должно интересовать свойство $enableCsrfValidation.

2017   Bad Request   enableCsrfValidation   http400   php   yii2
2017   json   php   yii2

Получить чистый sql-запрос из AR и AQ в Yii2

Собираем запрос, используя Active Record или Active Query и чтобы убедиться в правильности запроса смотрим на сам SQL.

// собираем AR
$orders = Order::find()->where(['status' => 1])->orderBy('date ASC');

// Получим sql в чистом виде:
$orders->createCommand()->getRawSql();

И увидим результат:

SELECT * FROM "order" WHERE "status"=1 ORDER BY "date"
2017   active query   active record   AR   php   sql   yii2
Ctrl + ↓ Ранее