

下記コードを実行(InputController)すると意図したリダイレクトが行われず、  
「Missing Method in UsersController  
Error: The action index is not defined in controller UsersController」  
という表示がされます。  
ErrorsControllerのindexアクションにリダイレクトするようにするにはどうすればよいでしょうか。  
※phpのバージョン5.4でCakephp2の環境です。

[code]

    class InputController extends AppController {
        public function index()
        {
            try {
              throw new Exception();
            } catch (Exception $e) {
              throw new NotFoundException();
              return;
             }
         }
    
[/code]

[code]

    App::uses('ExceptionRenderer', 'Error');
    class AppExceptionRenderer extends ExceptionRenderer {
    
        public function error400($error) {
            $this->controller->redirect(array('controller' => 'errors', 'action' => 'index'));
        }
    }
    
[/code]

[code]

    class ErrorsController extends AppController {
    
        public function index() {
        }
    }
    
[/code]


CC BY-SA 4.0
2019-06-15T17:58:04.357
55825
2019-06-17T02:29:35.943
2019-06-17T02:29:35.943
2238
17348
question
php cakephp
400番台のエラーが起きたときに意図したリダイレクトが行われない。


「UsersControllerというcontrollerで、indexというアクションが定義されていません」  
（その心は：定義してないものを実行しろと言われても、困りますぅ）  
というのがエラーの内容なのですから、UsersControllerというcontrollerのプログラムに問題があります。  
ところが、質問に書かれたコードにはUsersControllerのプログラムが含まれていません。

アドバイス  
１） まずは、エラーが発生しているとエラーメッセージが指摘しているUsersControllerに注目しましょう。  
余所見していると無駄に時間を費やすことになりますから。  
修正方法が判らないのであれば、UsersControllerのコードを質問に追加したうえで、困っている点を聞くと回答が得られやすいと思います。

２） InputControllerのindex関数は、例外を上げるだけのコードになっています。  
どんな用途を想定して作られたのでしょうか？  
400番台のエラーを例外で扱うのなら、try句の中で実行して、catch句で例外を補足して対処（リダイレクトする等）を行うのが素直だと思います。


CC BY-SA 4.0
2019-06-16T02:04:29.723
55830
2019-06-16T02:04:29.723
217
55825
answer


AppExceptionRenderer を、有効にしていますか？

AppExceptionRenderer を有効にするには、 `app/Config/core.php` の `Exception.renderer`
オプションに `AppExceptionRenderer` をセットします。

app/Config/core.php

[code]

        Configure::write('Exception', array(
            'handler' => 'ErrorHandler::handleException',
            'renderer' => 'AppExceptionRenderer', // <-- ここを書き換え
            'log' => true
        ));
    
[/code]

参考:  
Exception.renderer を使って独自のレンダラを使用し、アプリケーション例外をハンドリングする  
<https://book.cakephp.org/2.0/ja/development/exceptions.html#exception-
renderer>


CC BY-SA 4.0
2019-06-17T02:21:17.220
55864
2019-06-17T02:21:17.220
2668
55825
answer