どうも、katです。
今回は、EC-CUBE4で既存の画面を404エラーにしたい場合の実装方法についてになります。
EC-CUBE4では、カスタマイズする際に、Customizeフォルダ内に既存ファイルをオーバーライドしたりして使うことが多いかと思います。
しかし例えば、お問い合わせページを削除したい場合などは、わざわざお問い合わせ用のコントローラをオーバーライドして404にリダイレクトするような処理を書くのは面倒です。
そういった際に、今回の方法を使うことでyamlファイルの設定だけで簡単に表示制御をかけることができます。
EC-CUBE4のルーティングとは?
EC-CUBE4では、ルーティングはコントローラに@Routeアノテーションをつけることで設定しています。
例えば、会員登録画面の場合、EntryController.phpに以下のように記載があります。
/**
* 会員登録画面.
*
* @Route("/entry", name="entry")
* @Template("Entry/index.twig")
*/
この、@Route(“/entry”, name=”entry”)の部分がルーティングの設定部分になります。
上記の場合、“/entry”が実際のURLで、nameに指定してある“entry”が、view側やリダイレクト時に指定する名前になります(この名前を指定すれば自動的にURLに変換される)。
404にする方法
それでは本題ですが、既存のページのURLを塞ぎたい(404にしたい)場合ですが、やり方としてはいくつかあるかと思いますが、最も簡単な方法が、configのyamlでURLを指定してやる方法です。
やり方はまず、
app/config/eccube/routes/disable.yaml
というファイルを作成します(実際はファイル名はなんでも良いです)。
次に、ファイルに以下のように記載します。
disable:
path: /entry
やることはこれだけです。
上記では例として、会員登録画面を設定しましたが、実際は塞ぎたい画面のURLを記載してください。
それでは、上記に記載したURLにアクセスしてみてください。
エラー画面になったかと思います。
複数画面指定したい場合は?
複数画面塞ぎたい場合、pathだけを追加していくだけではうまく動きません。
複数指定する場合は、以下のように記載していきます。
disable1:
path: /entry
disable2:
path: /contact
ルーティング名で指定はできる?
コントローラの、@Routeのnameで指定した名前で指定ができるかどうかですが、やってみたところ、できませんでした。
今回の方法で指定できるのは、あくまでURLのみでした。
参考サイト
https://qiita.com/chihiro-adachi/items/6096f334b79dff1b284d