Структура CodeIgniter Применение - PullRequest
1 голос
/ 12 января 2010

EDIT:

Каков наилучший способ структурирования сложных приложений с помощью CodeIgniter? Чтобы сделать этот вопрос более конкретным, возможно, стоит просто сосредоточиться на структурировании контроллеров: если у вас есть контроллер Users, чем должны быть все функции в этом одном файле? Другими словами, у вас могут быть действия контроллера, связанные с определенными представлениями, но также и набор вспомогательных функций.

ОРИГИНАЛЬНЫЙ ВОПРОС: Имеет ли смысл иметь сложное приложение с пользователями, транзакциями, продуктами, иметь контроллер для каждого из них? И поскольку каждый из них соответствует таблице базы данных, иметь соответствующую модель для каждого из них? Я думаю, что это так, но приложение, над которым я сейчас работаю, состоит из одного контроллера на 3000 линий и одной модели на 3000 линий. Просто хочу проверить стандартную практику в отношении КИ и структуры приложения.

Ответы [ 4 ]

3 голосов
/ 13 января 2010

Я хотел бы поделиться своей структурой приложения здесь.

Я начинаю с модели. Я пишу 1 модель для одной таблицы в базе данных MySQL. У меня уже есть класс MY_Model, который я помещаю в папку system/application/libraries/. В этом классе есть методы get_detail, get_list, get_total, get_all, insert, update и delete. Я храню имя таблицы в переменной, поэтому в основном мне нужен этот код в модели, чтобы он работал:

class Some_table_model extends MY_Model {
  function Some_table_model()
  {
    $this->tablename = 'some_table';
    $this->primary_key = 'id';
  }

}

Обновление : после еще одного проекта я добавил новый var для хранения имени столбца, используемого для первичного ключа в таблице. Таким образом, у меня будет больше гибкости, если не жестко закодировать имя столбца для первичного ключа в MY_Model.

Для контроллера я создаю его в соответствии с его использованием пользователем. Пример для продукта, у меня будет этот контроллер:

function Product extends Controller {
  function index()
  {
    //display product list, paginated
  }
  function admin()
  {
    //protected by session
    //display product list for admin, paginated
    //handle POST request to delete a product or products
  }
  function form()
  {
    //protected by session
    //handle add/edit product for admin
  }
}

Вид связан с контроллером. Для вышеуказанного контроллера у меня будет как минимум 3 вида файла:

product_list.php
product_admin.php
product_form.php

Вид можно поместить в subdir, например, я могу расположить его так:

system/application/views/front/product.php
system/application/views/admin/product_list.php
system/application/views/admin/product_form.php

Если у продукта есть категория, мне понадобится другая таблица и модель для него, но для контроллера я могу поместить страницу в контроллеры продукта, добавив категорию в имя функции:

function category_admin()
{
  //get parameter
  //...
  //process data
  //...
  //redirect or load view
  //...
}

function category_form()
{
  //get parameter
  //...
  //process data
  //...
  //redirect or load view
  //...
}

Это то, что я делаю, и это работает для меня. Надеюсь, что это поможет вам найти лучший способ реорганизовать код CodeIgniter.

0 голосов
/ 13 января 2010

Если вы действительно обеспокоены организацией проекта, вам следует проверить Matchbox .

Из документов Matchbox:

Matchbox представляет собой наборрасширенные библиотеки, которые позволяют организовать ваше приложение в небольшие компоненты (модули).Эти модули имеют несколько преимуществ, основным из которых является портативность.Модули хранятся в своих собственных папках, поэтому их можно повторно использовать в других приложениях или совместно использовать пользователями, копируя только одну эту папку.

Это позволяет вам действительно организовать свой контентпоместив связанные модели и контроллеры в одну папку.

0 голосов
/ 12 января 2010

Прежде всего, модель определенно нуждается в разделении на что-то вроде:

user_model:
 add_user();
 delete_user();
 ...

products:
 add_product();
 delete_product();
 ...

transaction:
 ...
 ...

Вы должны понять.

Контроллер также может быть использован для разделения. Мои контроллеры в этом сценарии будут.

products:
 add_product();
 show_product();
 get_product();
 ...

users: 
 add_user();
 delete_user();
 ...

и так далее. Причина повторения одних и тех же функций в контроллерах и моделях заключается в том, что вы можете легко изменить модель для доступа к другой базе данных / источнику данных, и ничего кроме того, что не требует изменения.

Кроме того, абсолютно нет необходимости загружать модель продукта, например, когда вы добавляете пользователя.

0 голосов
/ 12 января 2010

должен отделить контроллер.но контроллер также меняет URL, если вы не используете маршрутизатор для его изменения.

для модели, я обычно отображаю 1 контроллер на 1 модель, если БД стоит более 4 строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...