EC-CUBE4でページ管理から画面作成時にURLからuser_dataを無くす方法
EC-CUBE Advent Calendar 2018 18日目の記事です。
EC-CUBE4にあるページ管理より新しいページを作成した場合、URLには必ずuser_dataが含まれます。
http://example.com/user_data/hoge
というようになります。
user_dataは別にあっても問題はありませんが、今までカスタマイズしてきた要望の一つとしてuser_dataを無くしたいという方もいました。 そこでこのuser_dataをなくす方法を説明します。
EC-CUBE4.0.1を対象にします。
EC-CUBE4からはEC-CUBE3と異なり、URL定義はアノテーションへと変更されました。そのため、対象となるアノテーションを変更します。
まず、UserDataControllerにあるuser_dataを定義しているルーティングの箇所を変更します。
- src/Eccube/Controller/UserDataController.php
/**
* @Route("/%eccube_user_data_route%/{route}", name="user_data", requirements={"route": "([0-9a-zA-Z_\-]+\/?)+(?<!\/)"})
*/
から
/**
* @Route("/{route}", name="user_data", requirements={"route": "^(?=([0-9a-zA-Z_\-]+\/?)+(?<!\/))(?!logout|%eccube_admin_route%/logout|install).*$"})
*/
と %eccube_user_data_route% を無くし、ログアウトも除外できるように追加します。
また、管理画面でのURL表記を変更するため、page_edit.twigも修正します。
- Resource/template/admin/Content/page_edit.twig
・91行目
{{ url('homepage') }}{{ eccube_config.eccube_user_data_route }}/
↓
{{ url('homepage') }}
こちらはuser_dataを表示上からなくしているだけです。
以上の作業を行うことで、ページ管理から新たなページを作成した場合、URLからuser_dataはなくなります。
[追記] もう一箇所修正する箇所がありました。プラグイン利用時にプラグイン側でルーティングの定義をされていた場合、 先にUserDataControllerが参照されてしまい正常に動作しません。
そのため、Kernel.phpにあるconfigureRoutes関数の内容を一部変更します。
- src/Eccube/Kernel.php
// 有効なプラグインのルーティングをインポートする. $plugins = $container->getParameter('eccube.plugins.enabled'); $pluginDir = $this->getProjectDir().'/app/Plugin'; foreach ($plugins as $plugin) { $dir = $pluginDir.'/'.$plugin.'/Controller'; if (file_exists($dir)) { $builder = $routes->import($dir, '/', 'annotation'); $builder->setSchemes($scheme); } }
と記述されている箇所を152行目に移動させて以下の様にします。
- src/Eccube/Kernel.phpのconfigureRoutes変更後
protected function configureRoutes(RouteCollectionBuilder $routes)
{
$container = $this->getContainer();
$scheme = ['https', 'http'];
$forceSSL = $container->getParameter('eccube_force_ssl');
if ($forceSSL) {
$scheme = 'https';
}
$routes->setSchemes($scheme);
$confDir = $this->getProjectDir().'/app/config/eccube';
if (is_dir($confDir.'/routes/')) {
$builder = $routes->import($confDir.'/routes/*'.self::CONFIG_EXTS, '/', 'glob');
$builder->setSchemes($scheme);
}
if (is_dir($confDir.'/routes/'.$this->environment)) {
$builder = $routes->import($confDir.'/routes/'.$this->environment.'/**/*'.self::CONFIG_EXTS, '/', 'glob');
$builder->setSchemes($scheme);
}
// 有効なプラグインのルーティングをインポートする.
$plugins = $container->getParameter('eccube.plugins.enabled');
$pluginDir = $this->getProjectDir().'/app/Plugin';
foreach ($plugins as $plugin) {
$dir = $pluginDir.'/'.$plugin.'/Controller';
if (file_exists($dir)) {
$builder = $routes->import($dir, '/', 'annotation');
$builder->setSchemes($scheme);
}
}
$builder = $routes->import($confDir.'/routes'.self::CONFIG_EXTS, '/', 'glob');
$builder->setSchemes($scheme);
$builder = $routes->import($confDir.'/routes_'.$this->environment.self::CONFIG_EXTS, '/', 'glob');
$builder->setSchemes($scheme);
}
上記のようにルーティングの読み出す順序を変更することで対応可能です。
EC-CUBE3の時は色々とめんどくさいことをしなければいけませんでしたが、EC-CUBE4では簡単にできます。
上記対応を行っても反映されないなどがあれば、[ECCUBEROOT]/var/cache ディレクトリを削除してからお試しください。
必要な方には必要なカスタマイズだと思いますので、user_dataをURLから無くしてしまいたい!という方は是非ご利用ください。