【问题标题】:could not unset url after display the MVC page显示 MVC 页面后无法取消设置 url
【发布时间】:2014-09-25 15:36:33
【问题描述】:

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

mvc 应用控制器 indexcontroller.php userController.php 模型 user.php page.php 库 核心 App.php Controller.php 包括navigation.php 样式样式.css 图片 js 脚本 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>

【问题讨论】:

    标签: php navigation url-routing


    【解决方案1】:

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

    实施这应该可以解决您的问题。

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

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

    希望对你有帮助

    【讨论】:

    • 这只是说明你根本不了解 MVC 到底是什么。让我教育你:MVC 是一种架构模式,它定义了应用程序层之间信息流的约束。在正确的 MVC 中,您有两个主要层:表示层和模型层。框架对此没有影响。
    • 我知道什么是 MVC 专家,我也了解架构模式。没有必要“教育我”。
    • 但是让我引用 Laravel-Book:“[..] 这暗示 Laravel 遵循模型-视图-控制器 (MVC) 架构模式,它强制将“业务逻辑”分开来自与图形用户界面 (GUI) 相关的输入和表示逻辑。在 Laravel Web 应用程序的情况下,业务逻辑通常由诸如用户、博客文章之类的数据模型组成,而 GUI 只是一个网页Web 浏览器。MVC 设计模式在 Web 开发领域非常流行。[..]"
    • @DavidC。有很多 PHP 框架说他们使用 MVC。但他们没有。这是众所周知的事实。 CodeIgniter、Cake、Laravel 等使用的“MVC”不是 MVC,尽管网上有大量资源说它们是。与其抗拒这个事实,不如尝试接受它以及这东西到底有多复杂……
    • @RonniSkansing 是的,我知道这个事实!但无论如何,谢谢你的评论。我有很多关于 MVC 的讨论,而且(不仅)在我看来这个话题被处理得非常静态。但无论如何,我对我的答案投反对票感到惊讶,因为最初的问题不是“什么是 mvc”。我真的建议你们给出答案,而不是“教育”某人。在 mvc 中。我不是程序员,我是科学家。但我不会在这里开始讨论良好的科学实践。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2015-02-13
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多