Правильное добавление функций в функции - PullRequest
0 голосов
/ 31 мая 2011

Я создаю скрипт профиля, в котором пользователи могут редактировать свои личные данные, интересы и ссылки.

У меня были все поля в одной форме, но теперь я хочу разделить их по вкладкам.Так что у меня будет вкладка личной информации, вкладка интересов и вкладка ссылок.На каждой странице у меня будет форма для отправки данных в соответствующую функцию.Например, если вы редактируете личную информацию, форма будет перенаправлена ​​на mysite.com/edit/personal_info

Функции должны выглядеть следующим образом

function edit() {

   function personal_info() {
      //data
   }   

   function interests() {
     //data
   }

   function links() {
     //data
   }

}

Я не уверен, как правильно отправлять данные сфункция edit () для всех своих подфункций.

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

$this->db->where('user_id', $this->tank_auth->get_user_id());
$query = $this->db->get('user_profiles');
$data['row'] = $query->row();

Затем в каждой подфункции у меня есть правила проверки (codeigniter). Ниже приведены правила для функции personal_info

$this->form_validation->set_rules('first_name', 'First Name', 'trim|required|xss_clean|min_length[2]|max_length[20]|alpha');
$this->form_validation->set_rules('last_name', 'Last Name', 'trim|required|xss_clean|min_length[2]|max_length[20]|alpha');
$this->form_validation->set_rules('gender', 'Gender', 'trim|required|xss_clean|alpha');

и инструкция для добавления данных в базу данных или возврата.ошибка при сбое правил валидации

if ($this->form_validation->run() == FALSE) //if validation rules fail
        {           
            $this->load->view('edit_profile', $data);
        }
        else //success
        {
        $data = array (                 
                'first_name'    => $this->input->post('first_name'),
                'last_name'     => $this->input->post('last_name'),
                'gender'    => $this->input->post('gender')

            );
            $this->load->model('Profile_model');
            $this->Profile_model->profile_update($data);            
        }

Как правильно создать эти подфункции без повторения кода в каждой из них?

Ответы [ 2 ]

3 голосов
/ 31 мая 2011

Ух ты, ты вроде как потерял меня.Почему вы используете функции внутри функций?Если вы используете CodeIgniter, эти функции должны быть внутри класса:

class Edit extends CI_Controller {
  function personal_info() {
    /* Do personal info stuff. */
  }

  function interests() {
    /* Do interests stuff. */
  }

  function links() {
    /* Do links stuff. */
  }

  function _common() {
    // The underscore makes the function not available to browse, but you can
    // put common code here that is called within the other functions by
    // invoking $this->_common();
  }
}
2 голосов
/ 31 мая 2011

в зависимости от того, как сделан ваш код, похоже, что вы используете codeigniter.

Когда вы запрашиваете mysite.com/edit/personal_info, он запрашивает контроллер с именем edit и функцию с именем personal_info, поэтому вам не нужна функция внутри функции, вам просто нужны функции внутри класса контроллера редактирования.Дальнейшие сегменты URL будут переданы функции в качестве аргументов.

...