フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援
フリーランスのためのネットビジネス専門学校 ネットで独立開業を目指す人を応援

VPSにCheveretoで画像ホスティングサーバーを構築 (Ubuntu)

OctoberCMSのバックエンド(管理画面)からデータにファイルや画像をアップロードして添付するのは、フォームの定義だけでロジックの実装なしに実現できる。それに関してはこちら

しかし、プログラムロジックで添付する方法はドキュメントがなかったのでここにメモする。

TL;TR

  • 添付ファイルを持つことになる親モデルクラスにリレーションを作成
  • SystemModelsFile のインスタンスをnewで作成
  • fromFile($filePath) でファイルを読み込む
  • save() でテーブルに保存
  • 親モデルクラスのリレーションにadd()する
  • 親モデルをsave()する

Productモデルが複数の画像を添付ファイルとして持つケースを例にして詳細を説明する。

リレーションの作成

複数の添付ファイルの場合$attachManyに連想配列で定義する。
配列のキーにフィールド名、値にモデルクラスを指定する。添付ファイルなのでSystemModelsFileにする。(クラス名からは分かりづらいが、このモデルが添付ファイル用のモデルである。)

use Model;

class Product extends Model
{
    public $attachMany = ['images' => 'SystemModelsFile'];
}

注: 2018/10/02現在、まだSystemModelsFileのバグは修正されていない。添付ファイルをS3などのクラウドストレージに保持する場合にバグが有る。対処方法はこちらで紹介している。

ファイルの添付

use File; // ファサード
use SystemModelsFile as AttachmentFile; // 添付ファイルのFileクラス
// ネット上のファイルをテンポラリディレクトリにコピー
// (すでにサーバ上にファイルが有る場合は不要)
$tempPath = temp_path(basename($remoteFileUrl));
File::copy($remoteFileUrl, $tempPath);

// DL下ファイルから添付ファイルオブジェクトを作成
$attachFile = new AttachmentFile();
$attachFile->fromFile($tempPath);

// これ自体テーブルを持つモデルクラスなのでテーブルに保存する
$attachFile->save();

// 親データオブジェクトに追加する
// images() はProductモデルで定義したリレーションから作成されたメソッド
$mdlProduct->images()->add($attachFile);
$mdlProduct->save();

// テンポラリファイルを削除する
File::delete($tempPath);

以上!

[紹介元] PHPタグが付けられた新着投稿 – Qiita VPSにCheveretoで画像ホスティングサーバーを構築 (Ubuntu)

コメント

記事に戻る

コメントを残す