Codeigniter - Советы по разработке приложений - PullRequest
1 голос
/ 11 августа 2010

Я создаю приложение для клиента, которое представляет собой пошаговый инструмент, который позволяет пользователю вводить данные для различных «разделов», которые затем выводятся в HTML-документ, который они могут загрузить.

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

Я использую платформу Codeigniter.

То, как я сейчас на это смотрю, - каждый шаг, определенный в таблице базы данных, называется «шаги»

При инициализации приложение загружает эту таблицу и начинает с шага 0, до 10 - это все довольно просто, оно загружает новое представление для каждого шага, которое по сути является шаблоном

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

Различные этапы требуют различной обработки, т. Е. Текст просто сохраняется в БД, переключатели суммируются и усредняются и т. Д., А также каждый шаг будет иметь разные правила проверки

Я хочу построить его с достаточной гибкостью, чтобы, если клиент изменит вещи позже, нам не нужно было перестраивать приложение, поэтому я создал шаги в виде строк в таблице базы данных, но я не уверен, как бы я поступил о обработке каждого отдельного шага с точки зрения обработки данных по-разному и различной проверки. У меня могла бы быть одна функция с целой кучей условных выражений, но это, казалось, стало довольно грязным и казалось неправильным.

Надеюсь, это имеет смысл, поэтому, наверное, мой вопрос в том, как лучше всего к этому подойти?

Ответы [ 3 ]

1 голос
/ 12 августа 2010

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

Не зная ничего из вышеперечисленного, (изначально) я бы просто имел 1 контроллер с действием, которое принимает шаг # от параметра.Тогда у меня был бы базовый класс бизнес-логики (я обычно помещал всю свою б. Логику в библиотеки CI и вставлял зависимости) с несколькими дочерними классами, представляющими каждый шаг.

Каждый из этих классов позаботился бы об инициализации / настройке(загрузка необходимых библиотек, моделей, помощников и т. д.), проверка и обработка (хранение предоставленных данных в соответствии с требованиями текущего шага).

Изначально я не помещал эти шаги в базу данных.

Очевидно, что универсальный контроллер Steps может сделать немного магии, настроив представления, создав объекты, перенаправив и т. Д. На основе параметра step #.

HTH

1 голос
/ 12 августа 2010

У меня был похожий проект с очень большой многошаговой формой. Каждый шаг имел около 20-40 полей формы. После того, как каждый шаг завершен и нажата кнопка «Далее», вы проверяете данные, показываете ошибки проверки формы, если это необходимо, и если ошибок больше нет, данные сохраняются в сеансе.

$my_data['step_1'] = $an_array_with_your_data_1;
$this->session->set_userdata($my_data);

Тогда на следующей странице

$my_data['step_2'] = $an_array_with_your_data_2;
$this->session->set_userdata($my_data);

Если вам нужно обработать данные, вы можете сделать это перед тем, как вставить их через set_userdata (), обработав $ an_array_with_your_data_1; Или вы делаете это в конце, когда все необработанные данные были собраны. Вы можете получить данные каждого шага с помощью

$this->session->userdata('step_1');

Убедитесь, что вы помещаете свои сеансы в БД, поскольку существует ограничение на количество, которое вы можете хранить в куки. Так что 1 таблица - это все, что вам нужно, запрос для создания таблицы здесь , так же как и параметры конфигурации, которые вам нужно установить ($config['sess_use_database'] = TRUE;)

Это вполне выполнимо и для этого нужны сеансы.

Вы можете использовать один контроллер с именем Steps с функциями для step_1 (), step_2 () и т. Д.

yourdomain.com / шаги / step_1 yourdomain.com/steps/step_2

Каждый URL отображается на функцию с тем же именем, что и сегмент_2 в контроллере шагов.

0 голосов
/ 11 августа 2010

ИМХО, вы могли бы сделать жизнь намного проще, просто используя $ _SESSION, вы все равно можете отображать различные представления и сохранять файл в конце ... Если вы действительно хотите использовать базу данных (необходимо для возможности восстановлениядокумент), использование таблицы для каждого шага может стать немного грязным.Вам нужно будет собрать строки из 10 разных таблиц, чтобы собрать их вместе.Я бы предложил одну таблицу.Ничего плохого в ширине.Что касается вашего фактического вопроса, вы можете иметь контроллер для каждого шага, если хотите (каждый шаг размещается в контроллере раньше него).Это может сделать код немного более управляемым.

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