Я поделюсь своим подходом, используя CI
- Я создаю Контроллер максимально тонким. Основное задание контроллера будет получать параметры только через
URI
, _GET
и _POST
. Затем контроллер передаст необходимые параметры моделям и получит результат. После этого файл представления будет загружен и все переменные, необходимые для представления, будут переданы.
- Вся логика процесса, связанная с базой данных, отправкой электронной почты и т. Д., Обрабатывается в модели. Модель получит параметр, выполнит запрос, обработает результат запроса при необходимости, а затем вернет массив, набор результатов, логическое значение или целое число. Контроллер, который получает возвращаемое значение, передает его непосредственно для просмотра, без повторной обработки.
- В поле зрения, она будет обрабатывать переменную для ее отображения. Будет цикл для отображения списка данных, получения поля столбца из массива, отображения его в качестве значения по умолчанию для формы и т. Д. Вид и модель часто разрабатываются в паре, поскольку все необходимые поля в представлении должны быть предоставлены запросом в модели. .
Единственная «жирная» обработка в контроллере - это form_validation. У меня есть ответ на ваш другой вопрос, как я написал свои правила form_validation и как его использовать.
Ниже приведены мои ответы на ваш вопрос выше:
Q. При создании новой формы и ваших
используя CI form_helper я создаю
массивы в контроллере и прохождения
это к методу view / form_input ().
Должен ли я делать это в
контроллер, вид или отдельный
файл
Я редко использую form_helper. Это потому, что большая часть моего взгляда пришла от коллег-дизайнера или предоставлена клиентом в виде HTML-файла. Я использую только form_dropdown
, потому что это позволяет мне передавать опции в виде массива вместо do foreach
. Для другого элемента формы я просто использую тот, который представлен в файле шаблона.
Q. В моем контроллере я создаю метод
для моей формы , т.е. new_user () и в
мой взгляд / form_open () Я указываю
другой метод в моем контроллере
обрабатывать действие (т.е. добавить (),
edit (), delete () ..etc) и этот метод
обрабатывает проверку. Это
путь, которым я занимаюсь; однако у меня был
много трудностей при передаче данных
вокруг, если проверка не пройдена. любой
предложения?
Когда я создаю свое приложение, у меня часто есть только 2 основных метода в контроллере. admin
- для отображения списка и обработки удаления, а form
- для отображения и обработки добавления и редактирования. Позвольте мне привести пример с модулем продукта.
У меня будет контроллер продукта с этими методами:
class Product extends MY_Controller {
function index()
{
//for front page, display list of product
}
function detail()
{
//for front page, display single product detail
//product id is passed as 3rd URI segment
$id = intval($this->uri->rsegment(3));
}
function admin()
{
//for admin, display product list
//receive id in _POST then do delete
//after delete, do redirect to self, best practise
}
function form()
{
//for admin, handle add and edit
$id = intval($this->uri->rsegment(3));
//if id given and product detail data can be loaded, then it in 'edit' mode
//else it in 'add' mode
//after validation success, and insert/update success, redirect to product/admin
}
}
Используя этот подход, я могу избежать дублирования кода и всегда поддерживать весь код в актуальном состоянии. Почти все функции добавления и редактирования имеют одинаковое представление и поле формы. В случае, если форма добавления и редактирования отличается (например, редактировать пользователя, не разрешать изменение имени пользователя), для переменной $mode
, установленной в add
или edit
, я могу указать простое значение if
и отобразить правильную форму проверки правила и назовите подходящие модельные методы.
Q. У меня есть один или два случая, когда
Я выполняю проверку формы мне нужно
проверить по двум переменным $ _POST.
Примером может служить проверка I
нужно запросить базу данных
определить, введен ли бизнес
уже существует (в зависимости от бизнеса
имя и почтовый индекс) затем перенаправить обратно
чтобы просмотреть и сохранить пост
переменные. До сих пор я не смог
найти способ создать кастом
функция обратного вызова, чтобы сделать это, потому что
Вы можете передать только один параметр.
Единственный способ, которым я смог
заставить это работать, если проверка
проходит, потом я выполняю базу данных
проверить и если бизнес существует, я ставлю
$ _post в сессии / flashdata и
используйте редирект, чтобы снова загрузить представление.
Массив, который определяет form_input
Атрибуты вызывает set_value для этого
где он тянет flashdata для каждого
запись в массиве.
Вы можете создать свои собственные правила проверки . Чтобы передать более одного параметра, вы можете открыть файл system/libraries/Form_validation.php
и просмотреть код function matches($str, $field)
. Ваш обратный вызов может иметь более 1 параметра, а код function matches($str, $field)
покажет вам, как читать и использовать второй параметр.
Надеюсь, это поможет вам в изучении и использовании CI. Жду от вас отличного веб-приложения;)