开发者

CakePHP controller/action question with http://mysite.com/mycontroller/absentaction

Suppose someone hits in url http://mysite.com/comments/view/13

But that absentaction is not present in comments controller.

Then it gets normal error like that =>

 Error:  The action view is not defined in controller CommentsController

Er开发者_如何学运维ror: Create CommentsController::view() in file: app/controllers/comments_controller.php.

<?php
class CommentsController extends AppController {

    var $name = 'Comments';


    function view() {

    }

}
?>

Notice: If you want to customize this error message, create app/views/errors/missing_action.ctp

What i'm trying to do is that if someone hits url http://mysite.com/comments/view/13 and if the action is not present then it will redirect to http://mysite.com/.

How can i do this for unknown/absent action?


This trick is actually working pretty well. You need to create a file app/app_error.php

 <?php


class AppError extends ErrorHandler {

    public function error404($params){
        extract($params);

        if(!isset($url)){
            $url = $action;
        }

        if(!isset($message)){
            $message ="";
        }

        if(!isset($base)){
            $base = "";
        }

        $this->controller->redirect(array('controller'=>'pages','action'=>'home'));
        //Or the page you want...

    }

}


?>

How does it work?

It actually override the error404() function from the ErrorHandler and redirect the user whith $this->controller->redict();


Notice at the bottom of the error message, it says you can customize it by creating app/views/errors/missing_action.ctp. So all you need to do is create that .ctp file and include a redirect in it like this:

<?php
header( 'Location: http://mysite.com' ) ;
?>


It says it right in the error...

create app/views/errors/missing_action.ctp

And that's what you should do...

Try using a header in the missing_action.ctp to redirect to where you want the page to go.


You can either customise app/views/errors/missing_action.ctp or you can turn off debugging in app/config/core.php

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜