質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • CakePHP

    2388questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

  • nginx

    900questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • Twig

    77questions

    Twig は、簡潔で可読性の高いテンプレートを記述することができ、 シンプルに記述することを目的として作られた PHPテンプレートエンジンです。

CakePHP3.6 NotFoundExceptionで画面がレンダリングされない

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 395

nnahito

score 1759

 環境

  • php 7.2
  • cakephp3.6
  • nginx

 困っていること

throw new NotFoundException();しても、サーバ(nginx)のエラーページが表示される
また、存在しないURLにアクセスしてもnginxのエラーページが表示される

 やっていること

以下の設定を行っております。
※参考にしたサイト様

config/app.php

'Error' => [
        'errorLevel' => E_ALL,
        'exceptionRenderer' => 'Cake\Error\ExceptionRenderer',
        'skipLog' => [],
        'log' => true,
        'trace' => true,
    ],

Controller/ErrorController.php

<?php
/**
 * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
 * @link          https://cakephp.org CakePHP(tm) Project
 * @since         3.3.4
 * @license       https://opensource.org/licenses/mit-license.php MIT License
 */
namespace App\Controller;

use Cake\Controller\Component\AuthComponent;
use Cake\Event\Event;

/**
 * Error Handling Controller
 *
 * Controller used by ExceptionRenderer to render error responses.
 */
class ErrorController extends AppController
{
    /**
     * Initialization hook method.
     *
     * @return void
     * @throws \Exception
     */
    public function initialize()
    {
        $this->loadComponent('RequestHandler');
        $this->loadComponent('Auth');

        $this->Auth->allow();
    }

    /**
     * beforeFilter callback.
     *
     * @param \Cake\Event\Event $event Event.
     * @return \Cake\Http\Response|null|void
     */
    public function beforeFilter(Event $event)
    {
    }

    /**
     * beforeRender callback.
     *
     * @param \Cake\Event\Event $event Event.
     * @return \Cake\Http\Response|null|void
     */
    public function beforeRender(Event $event)
    {
        parent::beforeRender($event);
        $this->viewBuilder()->setTemplatePath('Error');
    }

    /**
     * afterFilter callback.
     *
     * @param \Cake\Event\Event $event Event.
     * @return \Cake\Http\Response|null|void
     */
    public function afterFilter(Event $event)
    {
    }
}

Template/Layout/default.ctp

<!DOCTYPE html>
<html>
<head>
    <title>
        エラーページ
    </title>
</head>
<body>
<div id="container">
    <div id="header">
        <h1>エラー</h1>
    </div>
    <div id="content">
        {{ _view.fetch('content')|raw }}
    </div>
    <div id="footer">
    </div>
</div>
</body>
</html>

Template/Error/error400.twig

{{ _view.start('main') }}
not found
{{ _view.end }}

上記コードを書いておりますが、
beforeRender」メソッドまで処理が来ているのにもかかわらず、
画面がレンダリングされず、nginxのエラーページが表示されてしまします。
この原因がわからず、困っております。
おわかりの方、「多分これかな?」という心当たりのある方、
情報をいただけないでしょうか。
よろしくお願いいたします。

 参考

英語のページも漁ってみたのですが、twigを使った方法がなく……困っております。

 追記

nginxのエラーです。

/aなど、存在しないアドレスにアクセスした時です。

 [Cake\Routing\Exception\MissingControllerException] Controller class A could not be found.
Exception Attributes: array (
  'class' => 'A',
  'plugin' => false,
  'prefix' => false,
  '_ext' => false,
)
Request URL: /a
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • nnahito

    2018/06/04 01:23

    エラー追記しました。普通にControllerがないと言われます

    キャンセル

  • mosaxiv

    2018/06/04 16:38

    それはnginxではなくcake側のログですよね?nginxの画面が出ているのであればnginxのエラーログ(例: /var/log/nginx/error.log)に何か出ていませんか?

    キャンセル

  • nnahito

    2018/06/04 16:42

    あ、失礼しました…… 「 open() "/var/www/html/webroot/50x.html" failed (2: No such file or directory) 」ですね。すごく出てます……確かにこんなファイルはありませんが……これをCake側で制御しているわけではないのでしょうか?(error500.twigのような)

    キャンセル

回答 1

+1

デバッグモードが true だからかもしれません。
"debug" => false にして試してみてはいかがでしょう?

デバッグモードだと、通常の error400.ctp を用意しても無視されて、
デバッグ用の詳細情報を表示するために組み込みのテンプレートが使用されます。

確か MissingControllerException 用のテンプレートを用意するなどすれば、
デバッグモードでも確認できるのでしょうけれど、そこまで対応する必要性はないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/07 11:32

    ご回答有り難うございます!
    .envの「debug=false」にしてみてもだめでした……
    そしてこのままだとviewファイルを更新しても、反映されないんですね

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • CakePHP

    2388questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

  • nginx

    900questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • Twig

    77questions

    Twig は、簡潔で可読性の高いテンプレートを記述することができ、 シンプルに記述することを目的として作られた PHPテンプレートエンジンです。