对于使用CodeIgniter的初学者来说,这似乎是一个非常常见的问题,但到目前为止我找到的解决方案似乎与我的问题无关.就像主题所说我试图在CodeIgniter中包含一个自定义类.
我正在尝试创建下面类的几个对象并将它们放在一个数组中,因此我需要该类可用于模型.
我已经使用load(库 - >负载("MyClass的")函数中的CodeIgniter哪种类型的作品的尝试,但它试图创建模型外第一类的对象.这显然是一个问题,因为构造函数需要几个参数.
到目前为止我找到的解决方案是
我想要包含的类, User.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class User{
public $ID = 0;
public $username = 0;
public $access_lvl = 0;
public $staff_type = 0;
public $name = 0;
public function __construct($ID, $username, $access_lvl, $staff_type, $name)
{
$this->ID = $ID;
$this->username = $username;
$this->access_lvl = $access_lvl;
$this->staff_type = $staff_type;
$this->name = $name;
}
public function __toString()
{
return $this->username;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
方法(Model)需要User.php
function get_all_users()
{
$query = $this->db->get('tt_login');
$arr = array();
foreach ($query->result_array() as $row)
{
$arr[] = new User
(
$row['login_ID'],
$row['login_user'],
$row['login_super'],
$row['crew_type'],
$row['login_name']
);
}
return $arr;
}
Run Code Online (Sandbox Code Playgroud)
最后控制器,
function index()
{
$this->load->library('user');
$this->load->model('admin/usersmodel', '', true);
// Page title
$data['title'] = "Some title";
// Heading
$data['heading'] = "Some heading";
// Data (users)
$data['users'] = $this->usersmodel->get_all_users();
Run Code Online (Sandbox Code Playgroud)
Pet*_*nes 17
如果你有PHP版本> = 5.3,你可以使用命名空间和自动加载功能.
库文件夹中的简单自动加载器库.
<?php
class CustomAutoloader{
public function __construct(){
spl_autoload_register(array($this, 'loader'));
}
public function loader($className){
if (substr($className, 0, 6) == 'models')
require APPPATH . str_replace('\\', DIRECTORY_SEPARATOR, $className) . '.php';
}
}
?>
Run Code Online (Sandbox Code Playgroud)
模型目录中的User对象.(models/User.php)
<?php
namespace models; // set namespace
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class User{
...
}
Run Code Online (Sandbox Code Playgroud)
而不是新用户... 新模型\用户(...)
function get_all_users(){
....
$arr[] = new models\User(
$row['login_ID'],
$row['login_user'],
$row['login_super'],
$row['crew_type'],
$row['login_name']
);
...
}
Run Code Online (Sandbox Code Playgroud)
在控制器中,请务必按照以下方式调用customautoloader:
function index()
{
$this->load->library('customautoloader');
$this->load->model('admin/usersmodel', '', true);
// Page title
$data['title'] = "Some title";
// Heading
$data['heading'] = "Some heading";
// Data (users)
$data['users'] = $this->usersmodel->get_all_users();
Run Code Online (Sandbox Code Playgroud)
CodeIgniter并不真正支持真正的对象.所有的图书馆,模型等都像单身人士.
有两种方法可以使用,而无需更改CodeIgniter结构.
只需包含包含该类的文件,然后生成它.
使用load-> library或load_class()方法,只需创建新对象.这样做的缺点是,它总会产生一个额外的对象,你不需要它.但最终加载方法也将包含该文件.
另一种可能需要额外工作的可能性是创建一个User_Factory库.然后,您可以只在文件底部添加对象,并从工厂创建它的新实例.
我自己是工厂模式的忠实粉丝,但这是你必须自己做出的决定.
我希望这对你有帮助,如果你有任何与实施有关的问题,请告诉我/我们.
| 归档时间: |
|
| 查看次数: |
34113 次 |
| 最近记录: |