OO PHP |正确传递POST参议员

时间:2015-05-20 09:14:01

标签: php oop post methods login

我对OO PHP比较新,我正在尝试创建一个登录类。 我遇到的问题是我想将POST值的用户名和密码传递给我的班级,但我无法建立这样做的好方法。

下面的

是我班级的片段

class PortalLogin{
    private $username;
    private $password;

    function __construct(){
        //I connect to DB here
    }

    function login($username, $password){
        //error check the paramaters here
        //then I can run the query
    }

    function __destruct(){
        //I disconnect from DB here
    }
}

以上是我在下面创建的课程的细分是我计划如何执行它(我目前的主要问题)。

$login = new PortalLogin();

if(isset($_POST['username'])){

    if(isset($_POST['password'])){

        $login->login($_POST[username],$_POST[password]);

    } else {

        //throw error

    }

} else {

    //throw error

}

我真的不喜欢上面代码的构造,在我的课堂之外做这么多事情似乎很麻烦。如何将POST信息传递给类并在那里执行检查?我担心如果我将POST信息传递给类并且其中一个POSTS什么都不包含它就会出错。

4 个答案:

答案 0 :(得分:2)

我认为你的post语法有问题。

if(isset($_POST['username']) && isset($_POST['password'])){

 $login->login($_POST['username'],$_POST['password']);

}

使用AND ..所以如果存在用户名和密码,则调用login函数()

答案 1 :(得分:0)

我不确定OOP在哪里,但如果您要使用面向对象的路由,您将拥有一个代表请求的类,您可以从中获取POST数据:

$username = $request->post('username');
$password = $request->post('password');

如果POST数据中不存在该变量,则您的post()方法可能会返回默认值(null

然后你可以有一个类根据这些变量检查你的用户:

$auth = new AuthService($dbConnection);

if ($auth->checkCredentials($username, $password)) {
    // Valid user
} else {
    $error = $auth->getLastError();
}

答案 2 :(得分:0)

我知道我可能会提出这个建议,但我赞成静态方法来做这样的事情。 PortalLogin表示操作而非数据

class PortalLogin
{
    /**
     * Attempt login
     * @param string $username
     * @param string $password
     */
    public static function login ($username, $password)
    {
        // do your login stuff
    }
}

然后使用你会这样做:

if (isset($_POST['username']
    && !empty($_POST['username']
    && isset($_POST['password']
    && !empty($_POST['password']
) {
    PortalLogin::login($_POST['username'], $_POST['password']);
}

更好的OO是将用户名/密码检查烘焙到User类中。 (也许User::checkLoginCredentials($u, $p); // boolean yup/nope

答案 3 :(得分:-2)

您可以使用错误抑制,如下所示:

$login->login(@$_POST['username'], @$_POST['password']);

如果$ _POST变量中不存在一个或两个值,则在调用方法时不会出错,因此您可以在类方法中进行错误处理。

有关详情,请查看: http://php.net/manual/en/language.operators.errorcontrol.php

编辑: 另一种选择是这样做:

$login->login((isset($_POST['username']) ? $_POST['username'] : null), (isset($_POST['password']) ? $_POST['password'] : null));