シングルページアプリケーションのルーティングおよびホスティングの慣習
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
Sitecoreインスタンス内でAngular CLIアプリケーションをホストでき、アプリケーションへのリクエストをルーティングするための規約を使えます。
このトピックでは以下の内容を説明します:
SitecoreにおけるAngularアプリケーション
Angular-CLIアプリケーションは通常、関連するファイルのセットを含みます。
- アプリケーションエントリポイントファイル(index.html)です。このファイルはアプリケーションが使用するJavaScriptファイルを参照します。
- main.bundle.js、inline.js、styles.bundle.jsを含む、コンパイルされバンドルされたJavaScriptファイルの集合です。JavaScriptファイルの集合はコンパイルエンジンによって異なります。JavaScriptファイルにはアプリケーションロジックが含まれています。
デフォルトでは、Angular-CLIアプリケーションはサーバーのルート上で動作します。しかし、Sitecoreではこの方法でAngularアプリケーションを実行できないため、アプリケーションのルートパスを変更する必要があります。
通常、Angular-CLIアプリケーションは内部ルーティングを含み、Angularクライアント側で解決されます。ユーザーはアプリケーションのエントリーポイントへの仮想パス(index.html)と、アプリケーション内で設定された内側クライアント側ルートの組み合わせを通じて任意のページにアクセスします。
次のシナリオを考えてみてください:
- アプリケーションは以下の名でホストされています: your instance\website\sitecore\shell\client\Applications\MyAwesomeApp\
- ユーザーがこのURLにアクセスすると、ウェブサーバーは自動的にアプリケーションファイルを取得し、ブラウザに返します。ブラウザは index.html ファイルを表示します。
- アプリケーションのルーティングは、/dashboardルートを取得してダッシュボードページを表示するように設定されています。
- ユーザーがアプリケーション内からダッシュボードページにアクセスすると、ブラウザはこのURL: http://your instance/sitecore/shell/client/Applications/MyAwesomApplication/dashboardを表示しますが、ブラウザは自動的にサーバーから既に取得した適切なファイルを表示します。
- しかし、ユーザーが手動でダッシュボードのURLをブラウザに入力すると、サーバーはファイルを見つけられず、エラー404(ファイルが見つかりません)を返します。これは、ダッシュボードのルートがそのパスを持つサーバー上のファイルに直接対応していないために起こります。
この問題を解決するために、ルーティング慣習を用います。
ルーティングおよびホスティングの規則
ルーティングとホスティングの規則を使う際は、各アプリケーションごとにフォルダを定義します。Sitecoreを設定して、サーバーがクライアント側ルートのリクエストに適切に応答するようにします。
慣例は以下の通りです:
- 各アプリケーションは固有のアプリケーション名(AppName)を持たなければなりません。
- ファイルシステム内の各アプリケーションごとにアプリケーションホストフォルダを定義します: /sitecore/shell/client/Applications/AppName。
- ng-scモジュールのビルドタスクを使って、Angularのエントリポイントに基づくSitecoreエントリポイントを生成します。このタスクの結果、index.htmlの代わりにindex.aspxページが表示されます。これを行うことで、アプリケーションを認証Sitecore準拠し、Anti-CSRF保護を有効にする必要があります。
ng-sc cliツール
ng-sc cliツールを使ってindex.htmlファイルをindex.aspxに変更します。このツールはAngularプロジェクトのビルド後ステップとして利用できます。ツールの名前が .aspxにリネームされると、ファイルの上部に1行のコードも追加されます。このコードにより、アプリケーションがSitecore内で動作する際にSPEAK 3つの機能が可能になります。これらの機能には、Anti-CSRFトークン、エントリーポイントユーザー認証などが含まれます。
以下のパラメータでng-sc --entry ./dist/index.htmlを使用します:
旗
概要
デフォルト値
--エントリ、-e
aspxファイルを作成するためのファイル名(入力ファイル)。標準的なAngular-CLIセットアップでは、./dist/index.html.
この議論は必要であり、デフォルトの値は存在しません。
--アウト、-o。
出力ファイルの名前を入力ファイルに対して相対的に示します。
デフォルト値は index.aspxです。
--キープ、-K
ブール値です。設定(true)の場合、ツールは入力ファイルを削除しません
エントリーファイルはデフォルトで削除されます。なぜなら、エントリー .html ファイルをSitecoreアプリケーションと一緒に送ることを推奨していないからです。
Sitecoreがリクエストを処理する方法
Sitecore。Speak.統合モジュールは以下の方法でリクエストを処理します:
- モジュールは config ファイルを読み込みます。
- モジュールは preprocessRequest パイプラインを拡張し、すべてのリクエストを受信します。
- モジュールがURLリクエストがアプリケーションフォルダのいずれかに対応していることを検出すると、URLを書き換えてリクエストを正しいアプリケーションの index.aspx ファイルにリダイレクトします。
入口
デフォルトでは、ng-sc cliツールはSitecore.Speak.Integration.Spa.SecureSpaPageクラスを継承するASP.NETウェブフォームページを作成します。
index.aspxファイルにリダイレクトした後、Sitecore統合は以下の方法でバックエンドロジックを設定します。
- Anti-CSRFクッキーを設定します。
- 対応するアプリケーションSitecore項目を探します。
- 現在のユーザーがこのアイテムにアクセスできるかどうかを確認します。アイテムがなければアクセス権限はチェックしません。
- このアイテムの EntryPoint フィールドを読み込みます(デフォルト index.aspx)。アプリケーション項目がなければ、 index.aspx をエントリポイントとして使用します。
- この規則に従ってアプリケーションフォルダを探そうとします。
- EntryPointファイルがアプリケーションフォルダに存在する場合、URLはこのファイルに書き換えられます。
また、Sitecore.Speak.Integration.Spa.SpaPageクラスもあります。このクラスはShellPage.IsLoggedIn() チェックを行いません。アプリケーションで認証Sitecore必要ない場合は、このクラスをアプリケーションのエントリーポイントとして利用できます。
既知の問題点
sc_lang=languageクエリ文字列パラメータでコンテキスト言語を切り替えることができますSitecore。SPEAK 3はエントリーポイントソリューションを使用するアプリケーションではこの機能をサポートしていません。