ptejada / uflex
一站式PHP用户认证类
Requires
- php: >=5.3.0
Requires (Dev)
- phpunit/dbunit: 1.3.2
- phpunit/phpunit: 4.3.5
This package is auto-updated.
Last update: 2019-12-27 13:34:21 UTC
README
未来的开发已取消。我建议使用内置用户认证和授权的框架,例如Laravel
uFlex 1.0.x
一个简单的PHP用户认证库。该库是在 PHP 5.3.x 环境下开发和维护的。单元测试也在Travis-CI上针对 PHP 5.4.x 和 PHP 5.5.x 运行。
单个类文件 class.uFlex.php
可在 Legacy Branch 上找到
更多信息
- 在此查看示例 http://ptejada.com/projects/uFlex/examples/
- 尝试此包中的演示并查看其源代码
- 在此处查看方法文档 http://ptejada.com/projects/uFlex/documentation/
- 对于更详细的文档,请检查生成的PHPDoc http://ptejada.com/docs/uFlex/namespaces/ptejada.uFlex.html
从0.9x版本升级...
在更新之前,您需要运行SQL升级脚本。在运行升级脚本之前,请确保备份您的数据库。请参阅DB目录 https://github.com/ptejada/uFlex/tree/master/db
如果不使用Composer,则将 autoload.php
脚本包含在您的应用程序中,它将按需自动包含库类。
如果使用composer,则只需在您的应用程序中包含 vendor/autoload.php
即可,如果尚未包含的话。
总体而言,版本1.0采用了更面向对象的编程方法,并更紧密地遵循了约定。有关更多信息,请查看API更改
入门
将其包含到项目中
如果您使用 Composer,只需将 ptejada/uflex
添加为依赖项。注意 uflex
的首字母大小写,全部小写。例如
{
"require": {
"ptejada/uflex": "1.*"
}
}
当使用 Composer 时,使用 vendor/autoload.php
脚本将库包含到您的项目中。
如果不使用Composer,则在您的项目中克隆此存储库。使用 autoload.php
脚本将库包含到您的项目中。
配置用户对象
当实例化User
类时,并没有发生太多事情,会话没有被初始化,也没有建立数据库连接。这是为了允许配置该类。一旦配置完成,必须调用start()
方法才能开始用户认证过程。例如
<?php include('/path/to/uflex/directory/autoload.php'); //Instantiate the User object $user = new ptejada\uFlex\User(); // Add database credentials $user->config->database->host = 'localhost'; $user->config->database->user = 'test'; $user->config->database->password = 'test'; $user->config->database->name = 'uflex_test'; //Database name // OR if in your project you already have a PDO connection // $user->config->database->pdo = $existingPDO; /* * You can update any customizable property of the class before starting the object * construction process */ //Start object construction $user->start(); ?>
建议为每个项目创建一个如上所示的配置文件。这样,您可以使用配置文件为项目中任何PHP脚本提供一个预配置的User
实例。
或者,您可以创建自己的类,该类为您配置并启动User
对象。示例
<?php class MyUser extends ptejada\uFlex\User { public function __construct() { parent::__construct(); //Add database credentials $this->config->database->host = 'localhost'; $this->config->database->user = 'test'; $this->config->database->password = 'test'; $this->config->database->name = 'uflex_test'; //Database name // Start object construction $this->start(); } } ?>
以下是PHP类文件的一部分摘录,列出了在调用User
实例上的start()
之前可以更改的自定义config
属性。注意:config
属性是一个Collection
实例
'cookieTime' => '30', 'cookieName' => 'auto', 'cookiePath' => '/', 'cookieHost' => false, 'userTableName' => 'users', 'userSession' => 'userData', 'userDefaultData' => array( 'Username' => 'Guess', 'ID' => 0, 'Password' => 0, ), 'database' => array( 'host' => 'localhost', 'name' => '', 'user' => '', 'password' => '', 'dsn' => '', 'pdo' => '', )
理解集合
Collection
是数组的对象表示。在整个项目中,Collection
有多个用途,并且易于使用。Collection
为我们处理未定义索引的错误,并使我们的代码更加简洁。
考虑以下使用普通数组的示例
<?php $data = array( 'name' => 'pablo', ); if (isset($data['quote']) && $data['quote']) { echo $data['name'] . "'s quote is: " . $data['quote']; } else { echo $data['name'] . " has no quote"; } ?>
以下是使用Collection
的相同代码
<?php $data = ptejada\uFlex\Collection(array( 'name' => 'pablo', )); if ($data->quote) { echo "{$data->name}'s quote is: $data->quote"; } else { echo "{$data->name} has no quote"; } ?>
有关Collection
类的更多信息,请参阅API文档。
使用会话
User
对象通过其session
属性提供通过其session
属性轻松管理PHP会话,该属性是Session
类的实例。默认情况下,User
类管理PHP超级全局变量$_SESSION中的userData
命名空间,但您可以在启动User
对象之前通过设置config->userSession
来配置它。这非常强大,因为它允许User
类使用PHP会话而不干扰其他软件的会话使用。
Session
类只是一个扩展的Collection
,所以它像任何其他集合一样工作。唯一的区别是它有一些额外的方法,以及它是一个链接集合,这意味着对对象所做的任何更改都将反映在$_SESSION
上,从而自动保存到PHP会话中。
考虑以下代码及其输出,以更好地了解所有组件是如何协同工作的
<?php $user = new ptejada\uFlex\User(); // Change the session namespace $user->config->userSession = 'myUser'; $user->start(); // Shows session right after the User object has been started print_r($_SESSION); // Stores something in the session $user->session->myThing = 'my thing goes here'; // Shows the session with the content of the myThing property print_r($_SESSION); // Stores something in the PHP session outside of the namespace scope managed by the User class $_SESSION['other'] = 'other information stored here'; print_r($_SESSION); // Only destroys the session namespace managed by the User Class $user->session->destroy(); print_r($_SESSION); ?>
以下是上一段代码的输出
Array
(
[myUser] => Array
(
[data] => Array
(
[Username] => Guess
[ID] => 0
[Password] => 0
)
)
)
Array
(
[myUser] => Array
(
[data] => Array
(
[Username] => Guess
[ID] => 0
[Password] => 0
)
[myThing] => my thing goes here
)
)
Array
(
[myUser] => Array
(
[data] => Array
(
[Username] => Guess
[ID] => 0
[Password] => 0
)
[myThing] => my thing goes here
)
[other] => other information stored here
)
Array
(
[other] => other information stored here
)
Session
类还可以用于应用程序的其他方面。例如,要管理整个PHP会话,您可以实例化Session类而不带任何参数:new ptejada\uFlex\Session()
有关Session
类的更多信息,请参阅API文档。
扩展User类
在PHP中,您可以使用面向对象编程语言的方式扩展类。因此,您可以通过添加您的方法或修改来扩展User
类的功能,而无需修改类文件本身。您只需创建一个新的PHP类,该类扩展了User
类
<php class User extends ptejada\uFlex\User{ /* * Add your default properties values * such as database connection credentials * user default information * Or cookie preferences */ /* * Create your own methods */ function updateAvatar(){} function linkOpeniD(){} } ?>