Дизайн приложения Codeigniter - PullRequest
2 голосов
/ 26 января 2010

У меня есть несколько вопросов относительно дизайна приложения CI.

Q. При создании новой формы и использовании формы CI form_helper я создаю массивы в контроллере и передаю ее методу view / form_input (). Должен ли я делать это в контроллере, представлении или отдельном файле?

Q. В моем контроллере я создаю метод для своей формы , т. Е. New_user () , и в моем представлении / form_open () я указываю другой метод в моем контроллере для обработки действия (например, add (), edit (), delete () ..etc) и этот метод обрабатывает проверку. Это способ, которым я занимаюсь; однако, мне было очень трудно передавать данные, если проверка не удалась. Есть предложения?

Q. У меня есть один или два экземпляра, которые, когда я выполняю проверку формы, мне нужно проверить по двум переменным $ _POST. Например, при проверке мне нужно запросить базу данных, чтобы определить, существует ли уже введенная компания (на основе названия компании и почтового индекса), затем перенаправить обратно в представление и сохранить переменные записи. До сих пор я не смог найти способ создать пользовательскую функцию обратного вызова, чтобы сделать это, потому что вы можете передать только один параметр. Единственный способ заставить это работать - если проверка прошла успешно, я выполняю проверку базы данных и, если бизнес существует, я помещаю $ _post в session / flashdata и использую перенаправление, чтобы снова загрузить представление. Массив, который определяет атрибуты form_input, вызывает set_value, для которого он извлекает флэш-данные для каждой записи в массиве.

$data['name'] = array(
    'name'     => 'name',
    'id'       =>  'name',
    'value'    =>   set_value('name', $this->session->flashdata('name')),
    'maxlength'   =>  '200',
    'size'     =>  '79',
    'class'    =>  'text'

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

Спасибо!

Ответы [ 2 ]

4 голосов
/ 26 января 2010

Я поделюсь своим подходом, используя CI

  1. Я создаю Контроллер максимально тонким. Основное задание контроллера будет получать параметры только через URI, _GET и _POST. Затем контроллер передаст необходимые параметры моделям и получит результат. После этого файл представления будет загружен и все переменные, необходимые для представления, будут переданы.
  2. Вся логика процесса, связанная с базой данных, отправкой электронной почты и т. Д., Обрабатывается в модели. Модель получит параметр, выполнит запрос, обработает результат запроса при необходимости, а затем вернет массив, набор результатов, логическое значение или целое число. Контроллер, который получает возвращаемое значение, передает его непосредственно для просмотра, без повторной обработки.
  3. В поле зрения, она будет обрабатывать переменную для ее отображения. Будет цикл для отображения списка данных, получения поля столбца из массива, отображения его в качестве значения по умолчанию для формы и т. Д. Вид и модель часто разрабатываются в паре, поскольку все необходимые поля в представлении должны быть предоставлены запросом в модели. .

Единственная «жирная» обработка в контроллере - это 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. Жду от вас отличного веб-приложения;)

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

Q. При создании новой формы и использовании формы CI form_helper я создаю массивы в контроллере и передаю ее методу view / form_input (). Должен ли я делать это в контроллере, представлении или отдельном файле?

A. Form_Helper всегда следует использовать в «view».

Q. В моем контроллере я создаю метод для своей формы , т. Е. New_user () , и в моем представлении / form_open () я указываю другой метод в моем контроллере для обработки действия (например, add (), edit (), delete () ..etc) и этот метод обрабатывает проверку. Это способ, которым я занимаюсь; однако, мне было очень трудно передавать данные, если проверка не удалась. Есть предложения?

A. Мой путь заключается в прямом добавлении / редактировании () в метод save () ;, в методе save (), который я делаю в обоих случаях.

Q. У меня есть один или два экземпляра, которые, когда я выполняю проверку формы, мне нужно проверить по двум переменным $ _POST. Например, при проверке мне нужно запросить базу данных, чтобы определить, существует ли уже введенная компания (на основе названия компании и почтового индекса), затем перенаправить обратно в представление и сохранить переменные записи. До сих пор я не смог найти способ создать пользовательскую функцию обратного вызова, чтобы сделать это, потому что вы можете передать только один параметр. Единственный способ заставить это работать - если проверка прошла успешно, я выполняю проверку базы данных и, если бизнес существует, я помещаю $ _post в session / flashdata и использую перенаправление, чтобы снова загрузить представление. Массив, который определяет атрибуты form_input, вызывает set_value, для которого он извлекает флэш-данные для каждой записи в массиве.

A. Я рекомендую использовать $ this-> input-> post сразу после использования $ _POST, потому что CI поможет вам отфильтровать XSS, если вы включите его. PHP не поддерживает is_POST, как .NET, я использую текстовое поле в качестве ссылки

if(isset($_POST('txt_Name')))
{

}
**or**
if($this->input->post('txt_Name'))
{

}

Надеюсь, мой ответ сможет вам помочь.

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