MVC坏url错误处理

时间:2013-11-19 15:05:58

标签: php

我正在为学习目的制作一个小小的MVC框架。

我有一个文件和一个名为load的类,它位于我的模型文件夹中。它读取请求的文件名并检查文件是否在views文件夹中并返回正确的文件。 我遇到的问题是我正在尝试处理坏网址,以便如果请求的文件/网址没有激发,则会将您定向到views文件夹中的index.php页面...

我在函数内部有一个if语句,用于检查文件是否存在,我以为我只能写一个需要index.php文件的else语句,因为找不到该文件... 但这不起作用。当我输入一个不存在的页面时,所有我得到的都是一个白色的空白页面,即使我尝试在else语句中回应一些内容......

有谁知道遗失了什么或我做错了什么?

更新 添加了mainController类

这是孔加载类的样子:

<?php
/* model/load.php
 */
class load
{

     /* This function takes parameter 
     * $file_name and match with file in views.
     */

    function view($file_name, $data = null)
    {
        if (is_readable('views/' . $file_name)) {
            if (is_array($data)) {
                extract($data);
            }
            require 'views/' . $file_name;
        } else {

         //This is where I thought I could require the index.php file...        
        }
    }

}

在我的控制器文件夹中,我有一个mainController类将文件发送到加载文件。 这就是mainController类的样子:

<?php
/* controller/main.php
 *
 */
class mainController
{
    public $load;
    public $urlValues;

    public function __construct()
    {
        $url = parse_url($_SERVER['REQUEST_URI']);  
        $url = explode('/', trim($url['path'], '/'));
        $this->urlValues = array('controller' => $url[1]);

        //Index page
        if ($this->urlValues['controller'] == "index.php") {

        $key = array("key" => "");

        $this->load = new load();
        $this->load->view('index.php', $key);   
        } 
        //Register page
        if ($this->urlValues['controller'] == "register.php") {

        $this->load = new load();
        $this->load->view('register.php');   
        } 
        //Home page
        if ($this->urlValues['controller'] == "home.php") {

        $this->load = new load();
        $this->load->view('home.php');   
        } 

    }        
}

1 个答案:

答案 0 :(得分:0)

看起来好像你只是在控制器匹配时调用view方法,因此它永远不会被执行。尝试这样的事情,并从那里开始工作:

<?php
/* controller/main.php
 *
 */
class mainController
{
    public $load;
    public $urlValues;

    public function __construct()
    {
        $url = parse_url($_SERVER['REQUEST_URI']);  
        $url = explode('/', trim($url['path'], '/'));
        $this->urlValues = array('controller' => $url[1]);

        // ifs go here

        $this->load = new load();
        $this->load->view($this->urlValues['controller']);  
    }        
}