Сохранение изображений в расширенном приложении yii2

у меня есть поле с именем photo в модели members. Я хочу получить доступ к photo как из внешнего, так и из внутреннего интерфейса. Итак, я создал две папки с именами images в backend\web\uploads и frontend\web\uploads, и моя идея состоит в том, чтобы сохранить фотографию как в бэкэнде, так и во внешнем интерфейсе одновременно. Если бы мне нужно было сохранить изображение во внешнем интерфейсе\бэкэнде, я бы использовал этот код

if($model->photo  != null)
                        {
                            $model->photo->saveAs(\Yii::$app->basePath . '/web/uploads/photo/'.$model->id."_".$model->photo);

                        }

но я не могу использовать этот код для своих целей, потому что мне нужно сохранить его как во внешнем, так и в бэкэнде. Как я могу это сделать?


person Bloodhound    schedule 16.11.2015    source источник


Ответы (2)


В идеале вы должны создать статический поддомен, например static.yourdomain.com, и сохранять изображения только в одном месте.

В вашем случае вы должны продублировать код сохранения в папки внешнего и внутреннего интерфейса.

Например:

Вы можете иметь папку для загрузки внутри общей папки. Ваш код сохранения теперь должен ссылаться на папку:

$model->photo->saveAs('@common/uploads/photo/'.$model->id."_".$model->photo);

Затем вы можете сохранить базовый URL-адрес изображения в конфигурации param вашего приложения и использовать его в своих представлениях.

person Onedev_Link    schedule 16.11.2015

вы можете сделать символические ссылки, чтобы вам не нужно было сохранять файл в обоих каталогах.

в Linux просто запустите команду ln из консоли, например, у вас есть каталог backend\web\uploads, а затем вы делаете frontend\web\uploads как символическая ссылка на внутренний каталог.

в линуксе просто запустите:

ln -s backend/web/uploads frontend/web/uploads

в Windows откройте командную строку, перейдите в каталог yii2 и выполните:

mklink /D frontend\web\uploads backend\web\uploads

обратите внимание, что входные данные mklink находятся в обратном порядке, чем команда ln в linux

person David    schedule 16.11.2015
comment
Просто примечание: некоторые настройки хостинга не позволяют использовать символические ссылки, созданные пользователем. Возможно, вы сможете попросить своего провайдера настроить его для вас. - person topher; 16.11.2015