Yii2. ElFinder + Yandex Object Storage

Тимур Беретарь / 2021-01-18

Сегодня мы поговорим о том, как связать ElFinder с облачным хранилищем Яндекс. Предполагаем, что опыт работы с Yii2 и Yandex Object Storage (YOS) у вас есть.

Чего мы хотим добиться?

Мы хотим, чтобы наш встроенный файловый менеджер на базе ElFinder позволял просматривать и загружать данные из YOS. Для сайтов, которым нужен большой объем дискового пространства и при этом не хочется заморачиваться с VDS и бэкапами, хранение ресурсов сайта в облаке — наиболее оптимальное решение.

Подготовительные работы

Установим компоненты, необходимы для дальнейшей работы:

php composer.phar require league/flysystem 
php composer.phar require league/flysystem-aws-s3-v3 
php composer.phar require creocoder/yii2-flysystem
php composer.phar require mihaildev/yii2-elfinder
php composer.phar require mihaildev/yii2-elfinder-flysystem
php composer.phar require --prefer-dist mihaildev/yii2-ckeditor "*"

В представлении подключим компонент CKEditor:

use mihaildev\ckeditor\CKEditor;
...
echo $form->field($model, 'content')->widget(CKEditor::className(), [
'editorOptions' => ElFinder::ckeditorOptions('elfinder',[
'preset' => 'basic',
'height' => 400]),
]);

Далее, предполагаем, что хранилище Яндекса вы уже сделали, создали сервисный аккаунт, назначили ему роль и создали статические ключи доступа.

Настроем ControllerMap и components:

'controllerMap' => [
    'elfinder' => [
        'class' => 'mihaildev\elfinder\PathController',
        'access' => ['@'],
        'disabledCommands' => ['netmount'],
        'root' => [
            'class' => 'mihaildev\elfinder\flysystem\Volume',
            'component' => 'awss3Fs'
        ],
    ]
],

в компонентах настроим файловую систему AWS S3:

'components' => [
...
    'awss3Fs' => [
        'class' => 'creocoder\flysystem\AwsS3Filesystem',
        'key' => '<ключ>',
        'secret' => '<секретная строка>',
        'bucket' => '<имя бакета>',
        'region' => 'ru', //регион особого значения не имеет, но на всякий случай укажем
        'endpoint' => 'https://storage.yandexcloud.net/'
    ],
]

Все необходимое мы сделали, теперь можно попробовать вставить изображение или ссылку. При нажатии на кнопку «Выбор на сервере», нам откроется доступ к хранилищу.

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

Расширение mihaildev/yii2-elfinder-flysystem позволяет организовать подключения к различным хранилищам, в том числе SFTP, WebDav, Dropbox.