Блог

Пишу о PHP, Laravel и Yii2, фрилансе и работе веб–разработчика.

Как сконвертировать PDF в изображение (JPG, PNG) с помощью PHP

Это можно сделать с помощью Imagick, но это не очень удобно:

$imagick = new Imagick('file.pdf[0]');
$imagick->setImageFormat('jpg');
file_put_contents($pathToImage, $imagick);

Вместо этого можно подключить пакет spatie/pdf-to-image ( composer require spatie/pdf-to-image ) и использовать его:

$pdf = new Spatie\PdfToImage\Pdf('file.pdf');
$pdf->saveImage($pathToImage);

Вы можете явно указать расширение файла в $pathToImage. Если не укажите, то изображение по-умолчанию сохранится в JPG.

Ошибка отправки почты через Яндекс (SMTP)

На одном проекте почта отправляется через сервис Яндекса «Почта для домена». Всё работало отлично, пока кто-то из менеджеров не решил обновить настройки почтовой программы. Настройки обновил, и в это же время перестала уходить почта с сайта:

Failed to authenticate on SMTP server with username ...
Читать далее

Yii2 и label у hidden-поля в ActiveForm

Для меня было полной неожиданностью, что yii2 по-умолчанию отображает label у скрытого поля. Но спрятать его достаточно просто:

echo $form->field($model, 'user_id')->hiddenInput()->label(false);

Скругленные края у таблицы в Bootstrap

Обычный border-radius для бутстраповской таблицы не даст нужного эффекта. Края у таблицы всё равно останутся без скругления.

Документация рекомендует использовать такой способ для скругления краев у таблицы:

<div class="panel panel-default">
    <table class="table table-striped"> ... </table>
</div>

Как настроить папку public_html в Yii2

У новичков часто возникает проблема при выгрузке Yii2-приложения на хостинг с папкой public_html. По-умолчанию, Yii2 использует папку web для хранения index. php и статики.

Исправляется все достаточно просто. Добавляем символьную ссылку:

rm public_html && ln -s application/web public_html

AccessControl в Yii2 редиректит на site/login

AccessControl в Yii2 при запрете доступа (403 ошибка) перенаправляет на адрес site/login.

Поменять адрес можно в настройках компонента User:

'components' => [
        'user' => [
            'identityClass' => 'app\models\User', 
            'enableAutoLogin' => true, 
            'loginUrl' => ['/account/login']
        ],
    ],

Если указать loginUrl как null, то вместо редиректа будет отображаться 403 ошибка.

Подробнее в документации компонента yii\web\User.

Как передать Yii2 один-ко-многим в Backbone

При передаче коллекции со связями, нужно обязательно указать asArray (), иначе атрибут не заполняется в модели, бекбон ругается.

$collection = MindLeak::find()
    ->where([
        'user_id' => Yii::$app->user->identity->id,
        'is_predefined' => MindLeak::PREDEFINED_NO
    ])
    ->joinWith('examples')
    ->asArray()
    ->all();