mvc具有视图的特定布局

时间:2012-03-20 01:23:17

标签: php model-view-controller oop

我正在尝试在PHP中了解有关MVC的更多信息。但我遇到了一个问题:我想在特定div中的特定位置显示我的视图。我怎样才能做到这一点?这就是我现在所拥有的:

控制器:

class LogarController extends Controller {

    private $view;
    private $modelDAO;

    function __construct() {
        parent::__construct();
        $this->modelDAO = new LogarModel();
        $this->view = new LogarView();
    }

    /**
     * metodo Login().
     * funcao para logar o funcionario ja cadastrado ao banco de dados.
     */
    public function Login() {
        if ($this->modelDAO->Login($_POST['funcionario'], $_POST['senha'])) {
            $idFuncionario = $this->modelDAO->rows['idFuncionario'];
            $this->sessao = new Session();
            $this->sessao->set_value("logado",true);
            $this->sessao->set_value("idFuncionario",$idFuncionario);
            $this->redirect("view/funcionario/index.php");
        } else {
            $this->view->show("Funcionario not found");
        }
    }
}

查看:

class view {

    function __construct(){}

    function __set($var,$value){
        $this->var = $value;
    }

    function __get($var){
        return $this->var;
    }

    function render($render){
        require "view/template/" . $render . ".php";
    }
    function show($value){
        $this->value = $value;
    }
    function alertar($value){
        echo "<script>alert('{$value}')</script>";
    }
}

我想在按钮下显示“Funcionario not found”。我怎样才能做到这一点?我需要重定向页面吗?

P.S。:我没有使用任何框架。

2 个答案:

答案 0 :(得分:1)

您的代码有几个问题,但首先 - 您的问题:仔细阅读 this article 。它将解释如何利用PHP的模板功能。

旁边。是否显示未找到的&#34; Funcionario&#34;消息,您将在运行脚本时知道。在渲染模板之前。无需重定向页面。

既然你原来的问题有一个解决方案,其余的混乱:

  1. 模型不是数据访问对象。它是一个由多个类组成的层。这是一个更长的rant主题。向下滚动到&#34;一些注释&#34;部分。

  2. 构造函数不应包含任何复杂的计算。也不应该创建稍后将在实例中使用的其他对象的实例。它在您构造的对象和类的名称之间创建紧密耦合(在您的情况下,LogarModel' and LogarView`)。它违反了SRP ..如果阅读时间过长,this picture会更加清晰。

  3. 如果您在php中有一个emty构造函数,那么您可以将其删除(在View类中)。

  4. 您的<script>代码为missing attributes

  5. 当你编写代码= P

  6. 时,你应该坚持使用单一语言

答案 1 :(得分:0)

基本上,您的视图类通过HTML模型和控制器创建的变量的旧式回显来处理输出。还有很多其他方法可以做到,但这只是一种简单的方法。

 class LogarView {

      public function show($message){
           echo '<input type="button" value="Click Me"/><br/>';
           echo $message;
      }

 }

上面会输出一个HTML按钮,并且没有找到&#34; Funcionario&#34;下方。