はじめに

導入

運用

参加・貢献

リソース

GitHubでこのページを編集

Home / 5 / core / baserCMS4からの変更点

baserCMS4からの変更点

baserCMS5では、CakePHP4系にアップデートしたことに伴い、baserCMS4からの変更点が多数ありますのでご注意ください。

ルーティング

URL解析

// baserCMS4
Router::parse($url);
// baserCMS5
Router::getRouteCollection()->parse($url);

モデル

モデルクラスの取得

テーブルロケータの利用に変更となっています。

// baserCMS4
ClassRegistry::init('User');
// baserCMS5
TableRegistry::getTableLocator()->get('BaserCore.Users');
// コントローラーの場合
$this->getTableLocator()->get('BaserCore.Users');

バリデーションの定義

validate プロパティでの定義から、validationDefault メソッドでの定義へと変更となっています。

ビヘイビア

TreeBehavior

generateTreeListの廃止

カスタムファインダー treeList を利用します。

$list = $categories->find('treeList', ['spacer' => ...]);

コントローラー

廃止となったプロパティ

次のプロパティは廃止となりました。

  • subMenuElements
  • crumbs

POST送信判定の変更

// baserCMS4
if ($this->request->data) {}
// baserCMS5
if ($this->request->is('post')) {}

リクエストの取得

$request = $this->getRequest();    // Controller / View
$request = Router::getRequest();    // Other

リクエストデータの取得

// baserCMS4
$data = $request->data;
// baserCMS5
$data = $request->getData();
// リクエストの書き換え
// CakePHP4系の getRequest() は clone されることが前提のため注意が必要
$this->setRequest($this->getRequest->withParsedBody($data));

パラメーターの取得

// baserCMS4
$action = $request->params['action'];
// baserCMS5
$action = $request->getParam('action');

現在のURL取得

// パラメータなし
$url = $request->getPath();
// パラメータあり
$url = $request->getRequestTarget();

セッションの取得

セッションはリクエストから取得する仕様に変更となりました。

$session = $request->getSession();
$data = $session->read('etc');

フォームの初期値設定

baserCMS4 では、$this->request->data にセットしていましたが、エンティティによるセットに変更となりました。
サービスクラスに getNew() メソッドを作成しそこで初期値を生成し、Adminサービスクラスにより一括設定を行います。

// サービス
class SitesService
{
    public function getNew(): EntityInterface
    {
        return $this->Sites->newEntity([
            'status' => false,
        ], [
            'validate' => false,
        ]);
    }
}

// Adminサービス
class SitesAdminService
{
    public function getViewVarsForAdd()
    {
        return [
            'site' => $this->getNew()
        ];       
    }
}

// コントローラー
class SitesController extends BcAdminAppController
{
    public function add(SiteAdminServiceInterface $service)
    {
        $this->set($service->getViewVarsForAdd());
    }
}

// ビュー
$this->BcAdminForm->create($site);

検索フォームの設定

// baserCMS4
$this->search = $templateName;
// baserCMS5
$this->setSearch($templateName); // コントローラー
$this->BcAdmin->setSearch($templateName); // テンプレート 

テンプレートのヘッダーでの定義を推奨しています。

ヘルプの設定

// baserCMS4
$this->help = $templateName;
// baserCMS5
$this->setHelp($templateName); // コントローラー
$this->BcAdmin->setHelp($templateName); // テンプレート

テンプレートのヘッダーでの定義を推奨しています。

タイトルの設定

// baserCMS4
$this->pageTitle = $title;
// baserCMS5
$this->setTitle($title); // コントローラー
$this->BcAdmin->setTitle($templateName); // テンプレート

テンプレートのヘッダーでの定義を推奨しています。

セキュリティコンポーネント

CSRF対策用の処理は、セキュリティコンポーネントから、ミドルウェアに移行となり、SSL要求、バリデートポストをセキュリティコンポーネントにて実装します。

Ajaxの処理について

管理画面から呼び出す Ajax のアクションについて、返却値を JSON化できるものは、Api 用のコントローラーに移行し、そちらを呼び出すようになりました。

ただし、HTMLを返却するもので、JSON化の難易度が高いものは、Admin 用のコントローラーでそのまま移行しています。

ビュー

テンプレートの配置

ビューのテンプレートは、管理画面用のものは、BcAdminThirdプラグイン内に、フロントページのものは、BcFrontプラグイン内に全て取りまとめています。

フォームコントロールの出力

// baserCMS4
$this->BcForm->input()
// baserCMS5
$this->BcAdminForm->control()

エンティティの型変更

エンティティは配列からオブジェクトに変更となっています。

// baserCMS4
$user['User']['real_name_1'];
// baserCMS5
$user->real_name_1;

既存の配列は次の正規表現でオブジェクトのコードに置換できます。

# 検索対象
\$modelName\['ModelName'\]\['(.+?)'\]
# 置き換え後
\$modelName->$1

検索フォームの送信

baserCMS4では、検索処理について POST でデータを渡していましたが、検索状態をURLで共有できるようにするため、GET で渡すように処理を変更します。

BcTime::format() の引数の順番変更

// baserCMS4
$this->BcTime->format($format, $date);
// baserCMS5
$this->BcTime->format($date, $format);

また、フォーマットの形式が変更となっているので注意が必要です。YYYY-MM-dd

名前付きパラメータ

名前付きパラメータは仕様から削除されています。クエリーストリングに変換します。

// 名前付きパラメーター
$this->BcBaser->link('hoge', ['controller' => 'Users', 'action' => 'index', 'name1' => 1, 'named2' => 2]);
// クエリーストリング
$this->BcBaser->link('hoge', ['controller' => 'Users', 'action' => 'index', '?' => ['name1' => 1, 'named2' => 2]]);

テーマの定義について

テーマの定義は、次のメソッドにて行っています。

// 管理画面
BaserCore\Controller\Admin\BcAdminAppController::beforeRender()
// フロントページ
BaserCore\Controller\BcFrontAppController::beforeRender()

一覧のAjax

baserCMS4にて一覧で利用していたAjax呼び出しは廃止になりました。

フォームコントロールの名称

フォームコントロールにおいてクラス名は不要となりました。フィールド名だけ定義します。

$this->BcAdminForm->control('field_name');

ヘルパー

継承先の変更

AppHelper はなくなりました。
継承先が Helper になっています。

イベントの実装

イベントを実装するには、BcEventDispatcherTrait を利用します。

class ClassName extends Cake\View\Helper {
    use BcEventDispatcherTrait;
}    

フォームコントロールのID

フォームコントロールのIDは、baserCMS4系でドットを境にアッパーキャメルケースになっていましたが、ハイフン区切りになっています。

// コード例
echo $this->BcAdminForm->control('ViewSetting.mode', ['type' => 'hidden', 'value' => 'index']);
// 出力HTML
<input type="hidden" name="ViewSetting[mode]" class="bca-hidden__input" id="viewsetting-mode" value="index">

プラグイン

プラグインのパス取得

Cake\Core\Plugin::path($pluginName)

テスト

フィクスチャ

これまでの FixtureManager によるフィクスチャは非推奨となりました。FixtureFactory を利用します。

CakeSchema

CakeScheme はなくなりました。コマンド Console/cake schema は利用できません。
マイグレーション を利用してください。