Из того, что я знаю, для создания универсального шаблона репозитория , как в C #, вам нужно 2 вещи, которых в PHP 5.6 нет:
- Перегрузка реальных методов.
- Общий интерфейс или Общий абстрактный класс в PHP.
Нажмите здесь , чтобы узнать больше Общего шаблона репозитория в C #.
Однако вы все равно можете создать перегрузку псевдо-метода в PHP с помощью магического метода __call , и мы можем набрать немного больше кода для общей части шаблона.
Примечание: Перед созданием этого шаблона в Codeigniter 3.0 вам нужно будет создать таблицу в базе данных и создать автозагрузчик для приложения / библиотеки папок.
Сначала нам нужно создать Интерфейс в папке application / library:
<?php
interface IRepository
{
public function getById($id);
public function select($columns);
public function delete($id);
}
Seconde нам нужно создать Абстрактный класс , реализующий интерфейс и расширяющий CI_Model , чтобы можно было использовать База данных Библиотека:
<?php
abstract class Base_repository extends CI_Model implements IRepository
{
/**
* This must be valid table name in the Database.
*
* @var string $table Name of the table.
*/
protected $table;
public function __construct()
{
parent::__construct();
}
/**
* Pseudo method overloading.
* It's called when method is not declared in the abstract class.
*
* @param string $name Name of the method
* @param mixed $arguments Arguments of the method
*/
public function __call($name, $arguments)
{
switch ($name)
{
case 'save':
if ($arguments[0]->id > 0)
{
$this->update($arguments[0]);
}
else
{
$this->insert($arguments[0]);
}
break;
}
}
/**
* Get row with id.
*
* @param integer $id
* @return mixed
*/
public function getById($id)
{
return $this->db->get_where($this->table, ['id' => $id])->row_array();
}
/**
* Select columns.
*
* @param array $columns
* @return mixed
*/
public function select($columns = ['*'])
{
$this->db->select($columns);
return $this->db->get($this->table)->result();
}
/**
* Insert data.
*
* @param object $item
* @return void
*/
private function insert($item)
{
unset($item->id);
$this->db->insert($this->table, $item);
}
/**
* Update data.
*
* @param object $item
* @return void
*/
private function update($item)
{
$this->db->where('id =', $item->id);
unset($item->id);
$this->db->update($this->table, $item);
}
/**
* Delete data.
*
* @param integer $id
* @return void
*/
public function delete($id)
{
$this->db->delete($this->table, ['id' => $id]);
}
}
Третий проверить хранилище.Создайте новую модель в приложении / модели и расширьте Base_repository, задайте имя таблицы и метод сохранения при перегрузке, создайте объект для этой модели:
<?php
/**
* The entity class.
*/
class Test
{
public $id;
public $info;
}
class Test_model extends Base_repository
{
/**
* Tell what table we are using.
*/
public function __construct()
{
parent::__construct();
$this->table = 'test';
}
/**
* "Overload" save method and call it from the parent.
*
* @param test $item Make use of the Dependency Injection.
* @return void
*/
public function save(Test $item)
{
parent::save($item);
}
}
Попробуйте в контроллере.Загрузите модель и попробуйте получить, вставить, и т. Д ...
Для создания реальных моделей это та же процедура.Если вам нужно добавить больше методов, которые будут одинаковыми для каждой модели, добавьте их в абстрактный класс, если вам нужно создать методы только для конкретной модели, добавьте их только в эту модель.
Я не знаюt Рекомендую свободный кодовый код .Вот несколько шаблонов для PHP CLICK !