Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MVC关系与DRY_Php_Oop_Model View Controller - Fatal编程技术网

Php MVC关系与DRY

Php MVC关系与DRY,php,oop,model-view-controller,Php,Oop,Model View Controller,我正在尝试创建一个用户登录系统 我有一个名为AccessControl的类/控制器,它包括创建、删除和记录用户进出的所有函数 我还有一个名为Users的模型,其中包含从AccessControl类调用的所有数据库函数 我的访问控制类: include_once('../models/User.php') ; class AccessControl { private $_systemKey ; public function __construct() { $this->_sy

我正在尝试创建一个用户登录系统

我有一个名为AccessControl的类/控制器,它包括创建、删除和记录用户进出的所有函数

我还有一个名为Users的模型,其中包含从AccessControl类调用的所有数据库函数

我的访问控制类:

include_once('../models/User.php') ;

class AccessControl {
private $_systemKey ;

public function __construct()
{
    $this->_systemKey = 'QA>8fg)@z#t#:E60mj&MzHsm-lUj&b-}R%~<y$|nAuF)C3!r%+rT"Q<r$o?{_XR' ;
}

public function createUser($email, $password, $level)
{           
    $user_salt = $this->randomString() ;

    $password = $user_salt . $password ;
    $password = $this->hashData($password) ;

    if(!is_int($level))
    {
        return false ;
    }

    //Create verification code
    $code = $this->randomString() ;

    //SQL...
    $created = User->insertNewUser($email, $password, $level) ;

    if($created != false){
        return true; 
    }

    return false ;
}
}
我不确定我这样做是否正确,因为createUser和insertNewUser不一样吗?我怎样才能把东西换干呢


Core只是我的PDO连接类,我的所有模型都将从中扩展。无论如何,这就是计划

abstract class Core {
protected $db ;

function __construct()
{
    try{
        $this->db = new PDO("mysql:host=localhost;dbname=database", "user", "pass") ;
        $this->db->exec('set names utf8') ;
                    $this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        $this->db->setAttribute(PDO::ATTR_PERSISTENT, TRUE) ;
    }
    catch(PDOEXCEPTION $e)
    {
        echo 'Database error: <i style="color:#993300;">'.$e.'</i>' ;
        die() ;
    }
}

function __destruct()
{
    $this->db = NULL ;
}
}
抽象类核心{
受保护$db;
函数_u构造()
{
试一试{
$this->db=newpdo(“mysql:host=localhost;dbname=database”、“user”、“pass”);
$this->db->exec('set names utf8');
$this->db->setAttribute(PDO::ATTR\u EMULATE\u PREPARES,false);
$this->db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
$this->db->setAttribute(PDO::ATTR_PERSISTENT,TRUE);
}
捕获(PDO$e)
{
回显“数据库错误:”.$e.”;
模具();
}
}
函数_udestruct()
{
$this->db=NULL;
}
}

通常,如果您希望在这种情况下将代码重复保持在最低限度,我建议您不要让每个模型处理数据库工作

相反,您可以为每个接受和返回模型的模型设置一个网关。通常对于简单的检索,插入、删除和更新查询不会有太大区别。所有公共代码都可以在一个抽象网关中,其他所有网关都可以从中扩展。特定的网关只处理特定于模型的事情,比如定义要使用的表或要返回的模型

您还可以从中获得一些额外的好处。您可以轻松地将数据库网关换成另一个存储网关。这样,您甚至可以在不必担心数据库连接的情况下测试代码


至于create和insert用户方法,我看不出有什么问题。从MVC的角度来看,createUser方法是控制器的一种方法,对于您正在执行的操作,它调用模型的一种方法。

一般来说,不要扩展一些
Core
或God类。我认为这应该在codereview上。@PeeHaa告诉Magento开发人员,请。p.S。如果你打算使用mysql pdo驱动程序,你真的应该这么做。@feeela不需要告诉他们我只是没有使用它:-)你知道专门针对网关思想的教程吗,或者有一个简单的例子吗?这些都不是很详细:。我自己使用它,可以给你一些代码示例,但是这些对于StackOverflow来说有点长。
abstract class Core {
protected $db ;

function __construct()
{
    try{
        $this->db = new PDO("mysql:host=localhost;dbname=database", "user", "pass") ;
        $this->db->exec('set names utf8') ;
                    $this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        $this->db->setAttribute(PDO::ATTR_PERSISTENT, TRUE) ;
    }
    catch(PDOEXCEPTION $e)
    {
        echo 'Database error: <i style="color:#993300;">'.$e.'</i>' ;
        die() ;
    }
}

function __destruct()
{
    $this->db = NULL ;
}
}