3系エラーページのカスタマイズ 3系だとDBにアクセスさせないとあります。当然DBだからリスク有るし4系もその精神を継承されているんでしょうか。。。
当然DBに頼らない設計をしようよって事なのでしょうね。
いずれにせよ、
TwigInitializeListener.phpPageに紐づくLayoutにDeviceTypeが一致するLayoutがない場合はPCのレイアウトを探す
public function setFrontVariables(GetResponseEvent $event)
{
$request = $event->getRequest();
/** @var \Symfony\Component\HttpFoundation\ParameterBag $attributes */
$attributes = $request->attributes;
$route = $attributes->get('_route');
if ($route == 'user_data') {
$routeParams = $attributes->get('_route_params', []);
$route = isset($routeParams['route']) ? $routeParams['route'] : $attributes->get('route', '');
}
$type = DeviceType::DEVICE_TYPE_PC;
if ($this->mobileDetector->isMobile()) {
$type = DeviceType::DEVICE_TYPE_MB;
}
// URLからPageを取得
/** @var Page $Page */
$Page = $this->pageRepository->getPageByRoute($route);
/** @var PageLayout[] $PageLayouts */
$PageLayouts = $Page->getPageLayouts();
// Pageに紐づくLayoutからDeviceTypeが一致するLayoutを探す
$Layout = null;
foreach ($PageLayouts as $PageLayout) {
if ($PageLayout->getDeviceTypeId() == $type) {
$Layout = $PageLayout->getLayout();
break;
}
}
// Pageに紐づくLayoutにDeviceTypeが一致するLayoutがない場合はPCのレイアウトを探す
if (!$Layout) {
log_info('fallback to PC layout');
foreach ($PageLayouts as $PageLayout) {
if ($PageLayout->getDeviceTypeId() == DeviceType::DEVICE_TYPE_PC) {
$Layout = $PageLayout->getLayout();
break;
}
}
}
// 管理者ログインしている場合にページレイアウトのプレビューが可能
if ($request->get('preview')) {
$is_admin = $request->getSession()->has('_security_admin');
if ($is_admin) {
$Layout = $this->layoutRepository->get(Layout::DEFAULT_LAYOUT_PREVIEW_PAGE);
$this->twig->addGlobal('Layout', $Layout);
$this->twig->addGlobal('Page', $Page);
$this->twig->addGlobal('title', $Page->getName());
return;
}
}
if ($Layout) {
// lazy loadを制御するため, Layoutを取得しなおす.
$Layout = $this->layoutRepository->get($Layout->getId());
} else {
// Layoutのデータがない場合は空のLayoutをセット
$Layout = new Layout();
}
で処理落ちしDBアクセス失敗しているので
https://github.com/EC-CUBE/ec-cube/blob/4.0/src/Eccube/Controller/UserDataController.php#L63public function index(Request $request, $route)
{
$Page = $this->pageRepository->findOneBy(
[
'url' => $route,
'edit_type' => Page::EDIT_TYPE_USER,
]
);
if (null === $Page) {
throw new NotFoundHttpException();
}
$file = sprintf('@user_data/%s.twig', $Page->getFileName());
$event = new EventArgs(
[
'Page' => $Page,
'file' => $file,
],
$request
);
$this->eventDispatcher->dispatch(EccubeEvents::FRONT_USER_DATA_INDEX_INITIALIZE, $event);
return $this->render($file);
}
}
まで情報が渡っていないのかなと思いました。。。