2010-01-26 3 views
2

У меня есть несколько вопросов, касающихся дизайна приложения CI.Дизайн приложения Codeigniter

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

Q. В мой контроллер, я создаю метод для моей формы т.е. new_user() и на мой взгляд/Form_Open() Уточняю другой метод в мой контроллер для обработки действий (то есть, добавить() , edit(), delete() ..etc) & этот метод обрабатывает проверку. Так я и прохожу; Тем не менее, у меня было много проблем с передачей данных, если проверка не прошла. Какие-либо предложения?

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

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

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

Спасибо!

ответ

4

Поделюсь подход с использованием CI

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

Единственная «жирная» обработка в Контроллере - это form_validation. Я отвечаю на него в другом вопросе, как я написал свои правила form_validation и как его использовать.

Ниже мои ответы на ваш вопрос выше:

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

Я редко использую форму_helper. Это связано с тем, что большинство моих взглядов пришло от другого разработчика или предоставлено клиентом как HTML-файл. Я использую только form_dropdown, потому что это позволяет мне передавать параметры как массив, а не делать foreach. Для другого элемента формы я просто использую тот, который представлен в файле шаблона.

Q. В мой контроллер, я создаю метод для моей формы т.е. new_user() и мой взгляд/Form_Open() указываю другой метод в мой контроллер для обрабатывать действия (т. е. add(), edit(), delete() ..etc) & этот способ обрабатывает валидацию. Это путь , который я передаю; Тем не менее, у меня было много проблем с передачей данных , если проверка не прошла. Любые предложения?

Когда я создаю свое приложение, у меня часто есть только два основных метода в контроллере. 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 
    } 

} 

Используя этот подход, можно избежать дублирования кода и может поддерживать весь код, чтобы всегда в актуальном состоянии. Почти все добавить & edit имеют одинаковый вид и поле формы. В случае добавления & изменить форму (например, редактировать пользователя, не разрешать изменение имени пользователя), иметь переменную $mode либо add, либо edit, я могу поставить простой if и отобразить правильную форму, правила проверки и вызвать соответствующие модели.

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

create your own validation rules. Чтобы передать более одного параметра, вы можете открыть файл system/libraries/Form_validation.php, затем посмотреть код function matches($str, $field). В вашем обратном вызове может быть более одного параметра, а код function matches($str, $field) покажет вам, как читать и использовать второй параметр.

Надеюсь, это поможет вам в обучении и использовании CI. Ожидание отличного веб-приложения от вас;)

0

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

A. Form_Helper всегда должен использоваться в «представлении».

Q. В мой контроллер, я создаю метод для моей формы т.е. new_user() и на мой взгляд/Form_Open() Уточняю другой метод в мой контроллер для обработки действий (то есть, добавить() , edit(), delete() ..etc) & этот метод обрабатывает проверку. Так я и прохожу; Тем не менее, у меня было много проблем с передачей данных, если проверка не прошла. Какие-либо предложения?

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

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

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

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

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

} 

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

+0

если ($ this-> ввод-> сообщение ('поле)! == FALSE) - одно и то же. –