Craft CMS では、フロントエンドからユーザー登録する仕組みを比較的簡単に用意することができます。 具体的な設定方法については、ひとまず過去記事や公式ドキュメントを参考にしていただくとして。
Front-End User Accounts | Craft CMS
https://craftcms.com/knowledge-base/front-end-user-accounts
「ログイン後のマイページ機能だけ、サイトの ベース URL
として登録されていないサブドメインでアクセスさせたい」という場合は、ルーティングの調整が必要になります。
そこで、今回は Craf CMS でサブドメインからのアクセスをテンプレートと紐づける方法について、まとめてみます。
これは Craft CMS Advent Calendar 2024 7日目の記事です。
ルーティングを調整するには?
Craft CMS でルーティングを設定するには、次の2つの方法があります。
- 管理画面の
設定 > ルート
から GUI で操作する - インストールディレクトリ直下の
config/routes.php
で直接コードを編集する
管理画面で操作する場合、あらかじめ用意されている URL トークン(year
なら 4つの連続した数字
を意味する、など)を利用して効率的に調整できます。
「チャンネル」のエントリを年別や月別のアーカイブにする際に必要となるため、公式ドキュメントにも目を通しておくとよいでしょう。
Routing | Craft CMS Documentation | 5.x
https://craftcms.com/docs/5.x/system/routing.html
ただし、この方法では今回の目的である「サイトの ベース URL
として登録されていないサブドメインからのアクセス」には対応できません。
config/routes.php で調整する
ということで、次の3つのステップで調整を行います。
.env
にベース URL をセットconfig/general.php
にエイリアスをセットconfig/routes.php
にルーティングの指定を追加
.env にベース URL をセット
サイトが craftcms.test
、マイページが mypage.craftcms.test
とし、MYPAGE_SITE_URL
に URL をセットします。
MYPAGE_SITE_URL=https://mypage.craftcms.test
config/general.php にエイリアスをセット
エイリアス @mypageUrl
に .env
で定義した定数を紐づけます。
<?php
use craft\helpers\App;
return [
(中略)
'aliases' => [
'@mypageUrl' => App::env('MYPAGE_SITE_URL'),
],
];
config/routes.php にルーティングの指定を追加
エイリアス @mypageUrl
を変数にセットし、ルーティング定義の左辺にドメイン込みのパスをセットします。
<?php
// マイページのベース URL をセット
$mypageUrl = Craft::getAlias('@mypageUrl');
return [
$mypageUrl . '/dashboard' => ['template' => '_mypage/dashboard'],
$mypageUrl . '/edit-profile' => ['template' => '_mypage/edit-profile/index'],
$mypageUrl . '/edit-profile/finish' => ['template' => '_mypage/edit-profile/finish'],
];
これで https://mypage.craftcms.test/dashboard
が templates/_mypage/dashboard.twig
を読み込むようになります。
あとは、必要な数だけ templates/_mypage/
配下にテンプレートを用意して、ルーティングの定義を追加すれば完了です。
まとめ
Craft CMS では、次の4つのステップを踏むことで、任意のドメインからテンプレートにアクセスできるようになります。
.env
にベース URL をセットconfig/general.php
にエイリアスをセットconfig/routes.php
にルーティングの指定を追加templates/
配下にテンプレートファイルを用意
初めて調整しようとしたときは試行錯誤してもなかなか実現できずにいましたが、実はあっさりできてしまうんですね。
なお、_mypage
のようにディレクトリ名の接頭辞にアンダースコアを付けておけば、配下のテンプレートへ craftcms.test
からもアクセスできないのも便利な仕組みだと思います。