繁体   English   中英

PHP视图与控制器相关

[英]PHP views relate controllers

我想实现与MVC一样连接到任何特定视图的控制器。 没有使用PHP提供的任何框架。

因此,我需要一些指导和建议。

我有一些控制器和视图。 对于我的观点,我只想输出我的数据。 现在,我要关心的是控制器中的函数(如create() )如何获取用户在我的views/create.php输入数据的所有$_POST['params'] ,并在create()控制器的内部create()新模型功能。

因此,现在,我正在考虑以这种方式进行操作,我将在控制器文件夹中创建MyViews类。 目的是加载特定的视图,并将所有$_POST参数放入一个对象中。 然后,每个类似Users_controllers的控制器都将创建MyViews Users_controllers函数中,例如create()destroy() ,我可能会在MyViews中使用该函数来加载特定的视图以加载对象。

我找到了加载视图的源

<?php
class MyView {
protected $template_dir = 'templates/';
protected $vars = array();
public function __construct($template_dir = null) {
    if ($template_dir !== null) {
        // Check here whether this directory really exists
        $this->template_dir = $template_dir;
    }
}
public function render($template_file) {
    if (file_exists($this->template_dir.$template_file)) {
        include $this->template_dir.$template_file;
    } else {
        throw new Exception('no template file ' . $template_file . ' present in     directory ' . $this->template_dir);
    }
}
public function __set($name, $value) {
    $this->vars[$name] = $value;
}
public function __get($name) {
    return $this->vars[$name];
}
} ?>

嗯,我不知道如何检测_POST参数

    if(isset($_POST['Post']))
    {
        $model->attributes=$_POST['Post'];
        if($model->save())
            $this->redirect(array('view','id'=>$model->id));
    }

这是我观察到的Yii框架。 加载特定视图后,如何检测参数是$_POST还是$_GET

有任何指导和建议来存档我的任务吗?

不用提问
您有一个主要问题:表达意图的能力非常有限。 您提出的问题实际上与您的问题无关。

根据我的收集,您需要检测用户发出的POSTGET请求。 要直接检测它,可以检查$_SERVER['REQUEST_METHOD'] ,但是使用控制器检查它可能会很麻烦。 您将最终得到许多控制器的方法,这些方法的行为根据请求方法而有所不同。

由于您没有使用任何流行的框架,因此建议您将这个决定委托给路由机制。

在我看来,一种很好的处理方法是在控制器的方法名称前添加请求方法: postLogin()getArticles()等。您可以在此处找到一些其他示例。 如果有POST请求时,它在什么$_POST阵列。

所谓的“视图”实际上是模板。 如果阅读本文 ,您会注意到,该代码实际上是MyView的改进版本。 视图不是模板。 视图是包含表示逻辑并操纵多个模板的实例。

PS:如果您正在探索与PHP有关的MVC和MVC启发式模式,那么您可能会发现这篇文章很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM