【问题标题】:How i can create child view for parent view in PHP MVC?如何在 PHP MVC 中为父视图创建子视图?
【发布时间】:2018-02-20 03:15:24
【问题描述】:

当我输入这个地址时:

http://localhost/gamelvl/world-of-tanks/tankguide/

我可以进入坦克向导视图。现在这个文件夹里面是另一个名为 ussr 的文件夹,但是当我为 ussr 创建一个控制器和模型时,我无法使用这个地址输入它:

http://localhost/gamelvl/world-of-tanks/tankguide/ussr/

现在,任何人都可以告诉我这是否是正确的事情或其他解决方案?

路由应用

    <?php

class App
{
    public $controller = 'index';
    public $method = 'index';
    public $params = [];

    function __construct()
    {
        if (isset($_GET['url'])) {
            $url = $_GET['url'];
            $url = $this->parseUrl($url);
            $this->controller = $url[0];
            unset($url[0]);
            if (isset($url[1])) {
                $this->method = $url[1];
                unset($url[1]);
            }
            $this->params = array_values($url);
        }
        $controllerurl = 'controllers/' . $this->controller . '.php';
        if (file_exists($controllerurl)) {
            require($controllerurl);
            $object = new $this->controller;
            $object->model($this->controller);
            if (method_exists($object, $this->method)) {
                call_user_func_array([$object, $this->method], $this->params);
            }
        }
    }

    function parseUrl($url)
    {
        filter_var($url, FILTER_SANITIZE_URL);
        $url = rtrim($url, '/');
        $url = explode('/', $url);
        return $url;
    }
}

?>

导槽控制器

<?php

class Tankguide extends Controller
{
       function index()
    {
        $this->view('tankguide/index');
    }
}

?>

核心控制器

 <?php

class Controller
{
    function __construct()
    {

    }

    function view($viewUrl,$data=[])
    {
        require('header.php');
        require('views/' . $viewUrl . '.php');
        require('footer.php');
    }

    function model($modelUrl)
    {
        require('models/model_' . $modelUrl . '.php');
        $classname = 'model_' . $modelUrl;
        $this->model = new $classname;
    }
}

?>

项目结构

【问题讨论】:

  • if (method_exists($object, $this-&gt;method)) 将为给定的 url 返回 false,因为它正在 Tankguide 类上寻找一个名为 ussr 的方法。要么在该类上创建一个ussr 方法,要么使用一个更灵活的路由器,它不会将 url 链接到文件系统。谷歌php router 会发现很多
  • 当我在 Tankguide 类中创建 ussr 方法时,如何显示 ussr 方法的 HTML 和 CSS 代码?
  • 大概和你在其他路线上的做法一模一样:function ussr(){$this-&gt;view('tankguide/ussr');}
  • 你的意思是function ussr(){$this-&gt;view('tankguide/ussr/index');}
  • 如果您创建了一个名为ussr 的子文件夹并在其中创建了一个名为index.php 的“视图”文件,那么可以,尽管直接创建一个ussr.php 视图会更有意义在tankguide文件夹中——这是你自己自制的mvc框架吗?

标签: php oop model-view-controller


【解决方案1】:

if (method_exists($object, $this-&gt;method)) 将为给定的 url 返回 false,因为它正在 Tankguide 类中寻找一个名为 ussr 的方法。在该类上创建一个 ussr 方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多