2010-09-10 3 views
7

Мне было интересно, что мне делать с моими сущностями? Например, класс с именем Articles, с несколькими данными (имя/название/дата) и getters & сеттеры. Я мог бы добавить их в мой datamember статей, но лучше практиковать их разделение. Так что ты думаешь?codeigniter: куда идут сущности?

Спасибо!

+0

Что вы подразумеваете под словом «Я мог бы добавить их в мой datamember статей, но лучше ли их разделять»? Я предполагаю, что вы должны расширить класс Article из класса Model (http://codeigniter.com/user_guide/general/models.html) и продолжить. – Darmen

+0

тем, что я имею в виду добавление данных к модели, как на примере, но разве не лучше разделять сущности? – networkprofile

+0

Можете ли вы пояснить, что вы подразумеваете под «сущностями»? – meagar

ответ

11

я обычно делаю это:

1. Определения создают мои классы сущностей в/системы/приложения/классы

class MyEntity { 
} 

2.- определить константу, чтобы указать эту папку на /system/application/config/constants.php

define('CLASSES_DIR', APPPATH . "classes/"); 

3.- включают классы сущностей из моделей:

require_once(CLASSES_DIR . "MyEntity.php"); 

class MyModel extends Model { 

    function test() { 
     $entity = new MyEntity(); 
     $entity->doSomeStuff(); 
    } 

} 

Это не разрушит вашу структуру mvc и сохранит для классов объектов разделенные. Надеюсь, это поможет!

+0

Это похоже на лучшее решение. Я недавно задал этот вопрос по адресу http://codeigniter.com/forums/viewthread/166650/, но не получил никаких твердых ответов. – DisgruntledGoat

+0

благодарит вас. Мне нравится – Amir

1

Модели CodeIgniter используют одноэлементный шаблон. Вы можете создавать библиотеки или использовать $ Foo = новый Some_Model если вы любите, помните, что его все просто PHP :)

+0

Не работает, если хотите, скажем, список продуктов. Все, что вы делаете, это создание коллекции функций. – DisgruntledGoat

+0

Право, модели CodeIgniter, как правило, глупые, тонкие, однотонные. Но вы можете использовать простой старый PHP, чтобы делать что угодно, как вам нравится. –

2

Мне понравилось решение @ ilbesculpi, но я немного настроил его, используя пространство имен, вместо использования константы и require_once. Вот моя версия:

1) Создайте классы сущности в/system/application/entities.

namespace MyApplication\Entities; 

class ArticlesEntity 
{ 
    function doSomeStuff() 
    { 
     // Your code here... 
    } 
} 

2) Включить мой класс сущностей в моей модели через using заявление.

use MyApplication\Entities\ArticlesEntity; 

class ArticlesModel extends CI_Model 
{ 
    function test() 
    { 
     $entity = new ArticlesEntity(); 
     $ArticlesEntity->doSomeStuff(); 
    } 
} 
+0

На мой взгляд, это более элегантное решение. Тем не менее, я думаю, что ему нужен какой-то механизм автозагрузки, такой как PSR-4. – beawolf