【问题标题】:mvc specific layout with views带有视图的 mvc 特定布局
【发布时间】:2012-04-04 12:47:48
【问题描述】:

我正在尝试更多地了解 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>";
    }
}

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

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

【问题讨论】:

  • 您使用的是哪个框架?我们可能需要查看视图本身。
  • 对不起,我没有使用框架,只是发布了我的视图类

标签: php model-view-controller oop


【解决方案1】:

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

在旁边。是否显示“未找到功能”消息,您将在运行脚本的那一刻知道。在渲染模板之前。无需重定向页面。

既然你原来的问题有了解决办法,剩下的就是乱七八糟:

  1. 模型不是数据访问对象。它是一个层,由许多类组成。这是关于该主题的更长的rant。向下滚动到“一些笔记”部分。

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

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

  4. 你的&lt;script&gt;标签是missing attributes

  5. 在编写代码时应该坚持使用单一语言 =P

【讨论】:

    【解决方案2】:

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

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

    上面会输出一个 HTML 按钮和下面的“Funcionario not found”。

    【讨论】:

    • 我在做,但是页面没有刷新 __get 返回消息 ($this->value)
    • 好的,我知道你有什么了。输出在 "view/template/" 中完成。 $渲染。 ".php";模板。这是需要编辑的文件,因此它知道如何在正确的位置输出变量“Funcionario not found”字符串。如果不知道该文件是如何运行的,就无法给出简单的答案。
    • 这个文件只是一个带有表单的php文件,最后是一个value ?>来显示“funcionario not found”
    • 那么你的 PHP 看起来是正确的,应该已经在输出你的消息了。您收到任何错误消息吗?
    • 它仅在我渲染页面时显示,不,我没有收到错误。
    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    相关资源
    最近更新 更多