显示MVC页面后无法取消设置URL

时间:2014-08-02 16:20:16

标签: php navigation url-routing

我是MVC的新手,我在下面创建了一个路由类,它工作正常,但是当我转到索引页面时,导航锚点href是正确的。但当我移动到其他控制器时,url第一个字符串是url-0,仍然是前一个控制器,它改变了所有导航href地址base + previous controller,例如,如果我在indexController / index上,它将显示所有页面froom数据库。当我想通过导航锚点调用logincontroller时,logincontroller href改变它变成了indecontroller / loginController / login。正确的登录href地址是loginController / login。我的htaccess和路由类在下面。文件夹结构。

mvc app controllers indexcontroller.php userController.php      model user.php page.php      LIB      核心App.php Controller.php 包括navigation.php style style.css 图片 js javscript 的index.php

我希望有人可以帮助我,我尝试但是很成功但请提前帮助谢谢。

RewriteEngine On
RewriteBase /socialNetwork
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^([a-zA-Z0-9\/\-_]+)\.?([a-zA-Z]+)?$ index.php?url=$1&extension=$2 [QSA,L]


    class App
{
    protected $controller = 'indexController';
    protected $method = 'index';
    protected $params = array();
    public function __construct()
    {
        $url = $this->parseUrl();
        //print_r($url);
        if (isset($url[0]))
        {
            if (file_exists('app/controllers/'.$url[0].'.php'))
            {
                //$url = ('../app/controllers/'.$url[0].'.php');
                $this->controller = $url[0];
                //echo ($this->controller);
                unset($url[0]);
            }
            }       
        require_once('app/controllers/'.$this->controller.'.php');
        $this->controller = new $this->controller;
        if (isset($url[1]))
        {
            if (method_exists($this->controller,$url[1]))
            {
                $this->method = $url[1];
                unset($url[1]);
            }
        }
        $this->params = $url ? array_values($url) : array();
        call_user_func_array(array($this->controller,$this->method),$this->params);
    }
    public function parseUrl()
    {
        if (isset($_GET['url']))
        {
            return $url =explode('/',filter_var(rtrim($_GET['url'],'/'),FILTER_SANITIZE_URL));
        }
    }
}

这是我的索引页。

<header>
<img width="960" height="100" src="http://localhost/socialNetwork/images/bgheader.png">
</header>
<?php 
include_once("include/navigation.php");?>
<section class="content">
<?php
require_once('app/init.php');
$app = new App;
?>
</section>

1 个答案:

答案 0 :(得分:-1)

您的视图文件(html文件)中不应包含相对URL。查看一些常见的类似MVC的PHP框架,如Laravel或Symfony。它们都有方法为您提供完整的合格网址,例如:http://domain.tld/controller/param/ ...而不是/ cobntroller /.../ p>

实现这一点可以解决您的问题。

例如,查看Laravel。它非常容易理解且非常灵活。在那里,您可以使用Redirect::route('your-route-name')等功能访问所有路线。然后,路由引擎会将其转换为完整的URL!

编辑:更准确地说,laravel根据定义并不是真正的mvc。但在某些部分,它就像一个mvc。

希望这有帮助