PHP - 出了什么问题?学习MVC - 初学者

时间:2015-11-06 10:04:11

标签: php model-view-controller

HY,

我开始学习PHP,我创建了一个简单的MVC样式代码库。 脚本只生成一个随机数并显示这个数字。我还写了一个函数来显示之前显示的数字,但它不起作用。该值为空。你能帮帮我吗,我不知道什么是错的,并没有抛出php错误。

view.php

 config.ssh.private_key_path = "./id_rsa"

Controller.php这样

<?php

class View
{
    private $model;
    private $view;

    public function __construct()
    {
        $this->model = new Model();
    }

    public function output()
    {
        echo 'Current Entry: ';
        echo $this->model->getData();
        echo '<br />';
        echo '<a href="?action=update">Update</a>';
        echo '<br />';
        echo '<a href="?action=preview">Last</a>';
    }

    public function getModel()
    {
        return $this->model;
    }

}

model.php

<?php
class Controller
{
    private $model;
    private $view;

    public function __construct($view)
    {
        $this->view = $view;
        $this->model = $this->view->getModel();
    }


    public function get($request)
    {
        if (isset($request['action']))
        {
            if ($request['action'] === 'update')
            {
                for ($i = 0; $i<6; $i++) 
                {
                    $a .= mt_rand(0,9);
                }
                $this->model->setData($a);
            }
            elseif ($request['action'] === 'preview')
            {
                $this->model->setLast();
            }
            else
            {
                $this->model->setData('Wrong Action');
            }
        }
        else
        {
            $this->model->setData('Bad Request');
        }
    }
}

的index.php

<?php
class Model
{
    private $data;
    private $last;

    public function __construct()
    {
        $this->data = 'Default';
    }

    public function setData($set)
    {
        if ( ! (($set == 'Wrong Action') && ($set == 'Bad Request')))
        {
            $this->last = $this->data;  
        }
        $this->data = $set;
    }

    public function getData()
    {
        return $this->data;
    }

    public function setLast()
    {
        $this->data = $this->last;
    }

    public function getLast()
    {
        return $this->last;
    }
}

脚本中是否还有其他错误? 任何输入都非常欢迎! :)

1 个答案:

答案 0 :(得分:2)

您的代码存在的问题是PHP不会在请求之间保留变量值,因此,当您在此处设置$ model-&gt;最后一个值时:

$this->last = $this->data;

您的下一个请求会重置。

您可能希望在会话或Cookie中存储$ last值。类似的东西:

$_SESSION['last'] = $this->data;

然后,当您实例化模型时,可以使用存储在会话中的值对其进行初始化(如果可用):

index.php - 在开头添加session_start()

model.php:

public function __construct()
{
    $this->data = isset($_SESSION['last']) ? $_SESSION['last'] : 'Default';
}

public function setData($set)
{
    $this->data = $set;

    if ( ! (($set == 'Wrong Action') && ($set == 'Bad Request')))
    {
        $_SESSION['last'] = $this->data;
    }
}

Controller.php这样

  elseif ($request['action'] === 'preview')
            {
                //Remove this
                //$this->model->setLast();
            }