构建模型结构 - Fat Free Framework
build model structure - Fat Free Framework
我正在使用 f3 创建模型结构,但最后我卡住了。
我无法在另一个页面访问我的功能。
这是错误:
Fatal error: Call to a member function load() on null
[C:/UwAmp/www/test/app/models/User.php:12]
哪里错了?这种方式好不好?
-models
----Model.php
----User.php
-controllers
----Controller.php
----UserController.php
UserController.php
class UserController extends Controller {
private $_usermodal;
public function __construct(){
parent::__construct();
}
function Register(){
$this->_usermodal = new User();
$this->_usermodal->getAll();
}
}
Model.php
class Model {
private $db;
public function __construct($table){
$this->db=new DB\SQL(
'mysql:host=localhost;port=3306;dbname=database',
'root',
'root'
);
return new DB\SQL\Mapper($this->db,$table);
}
}
User.php(型号)
class User extends Model {
public function __construct(){
parent::__construct('users');
}
public function getAll(){
$x = $this->db->load('id = 1');
print_r($x);
}
}
您可以扩展框架映射器,而不是从 __constructor
返回映射器实例(这在 PHP 中是不可能的):
Model.php:
class Model extends DB\SQL\Mapper {
protected $db;
public function __construct($table) {
$this->db=new DB\SQL(
'mysql:host=localhost;port=3306;dbname=database',
'root',
'root'
);
parent::__construct($this->db,$table);
}
}
User.php:
class User extends Model {
public function __construct() {
parent::__construct('users');
}
public function getAll() {
return $this->find('',['order'=>'id']);
}
}
现在您可以使用常用的映射器方法访问您的数据库记录:
$user = new User;
$user->load(['id=?',1]);
// or
foreach ($user->find(['name LIKE ?','%John%']) as $u)
echo $u->name;
或使用您的自定义方法:
foreach ($user->getAll() as $u)
echo $u->name;
这个结构仍然可以改进,因为它为每个获取的记录创建一个新的 DB\SQL
实例。您可以创建中央 DB
服务并默认在 Model
:
中使用它
Index.php:
$f3->DB = function() {
if (!Registry::exists('DB')) {
$db=new DB\SQL(
'mysql:host=localhost;port=3306;dbname=database',
'root','root');
Registry::set('DB',$db);
}
return Registry::get('DB');
};
Model.php:
class Model extends DB\SQL\Mapper {
public function __construct($table,$db=NULL) {
if (!isset($db)) {
$f3=\Base::instance();
$db=$f3->DB();
}
parent::__construct($db,$table);
}
}
我正在使用 f3 创建模型结构,但最后我卡住了。 我无法在另一个页面访问我的功能。
这是错误:
Fatal error: Call to a member function load() on null [C:/UwAmp/www/test/app/models/User.php:12]
哪里错了?这种方式好不好?
-models
----Model.php
----User.php
-controllers
----Controller.php
----UserController.php
UserController.php
class UserController extends Controller {
private $_usermodal;
public function __construct(){
parent::__construct();
}
function Register(){
$this->_usermodal = new User();
$this->_usermodal->getAll();
}
}
Model.php
class Model {
private $db;
public function __construct($table){
$this->db=new DB\SQL(
'mysql:host=localhost;port=3306;dbname=database',
'root',
'root'
);
return new DB\SQL\Mapper($this->db,$table);
}
}
User.php(型号)
class User extends Model {
public function __construct(){
parent::__construct('users');
}
public function getAll(){
$x = $this->db->load('id = 1');
print_r($x);
}
}
您可以扩展框架映射器,而不是从 __constructor
返回映射器实例(这在 PHP 中是不可能的):
Model.php:
class Model extends DB\SQL\Mapper {
protected $db;
public function __construct($table) {
$this->db=new DB\SQL(
'mysql:host=localhost;port=3306;dbname=database',
'root',
'root'
);
parent::__construct($this->db,$table);
}
}
User.php:
class User extends Model {
public function __construct() {
parent::__construct('users');
}
public function getAll() {
return $this->find('',['order'=>'id']);
}
}
现在您可以使用常用的映射器方法访问您的数据库记录:
$user = new User;
$user->load(['id=?',1]);
// or
foreach ($user->find(['name LIKE ?','%John%']) as $u)
echo $u->name;
或使用您的自定义方法:
foreach ($user->getAll() as $u)
echo $u->name;
这个结构仍然可以改进,因为它为每个获取的记录创建一个新的 DB\SQL
实例。您可以创建中央 DB
服务并默认在 Model
:
Index.php:
$f3->DB = function() {
if (!Registry::exists('DB')) {
$db=new DB\SQL(
'mysql:host=localhost;port=3306;dbname=database',
'root','root');
Registry::set('DB',$db);
}
return Registry::get('DB');
};
Model.php:
class Model extends DB\SQL\Mapper {
public function __construct($table,$db=NULL) {
if (!isset($db)) {
$f3=\Base::instance();
$db=$f3->DB();
}
parent::__construct($db,$table);
}
}