как использовать FormValidation в codeigniter - PullRequest
0 голосов
/ 23 мая 2011

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

вот код для моего контроллера

function create_customer()
        {
            // field name, error message, validation rules
            $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]|callback_username_exists');
            $this->form_validation->set_rules('email', 'Email Address', 'trim|required|valid_email');
            $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
            $this->form_validation->set_rules('password2', 'Password Confirmation', 'trim|required|matches[password]');

            if($this->form_validation->run() == FALSE)
            {
                $this->load->view('admin/users/admin_form');
            }

            else
            {           
                if($query = $this->usermodel->create_customer())
                {
                        redirect('userslist');
                }
                else
                {
                    $this->load->view('admin/users/admin_form.php');            
                }
            }

        }

            function username_exists($key)
        {
            $this->usermodel->username_exists($this->input->post('username'));
        }

вот код для моей модели

function create_customer()
    {
            $new_member_insert_data = array(
                'username' => $this->input->post('username'),
                'email' => $this->input->post('email'),
                'password ' => md5($this->input->post('password '))     
            );
            $insert = $this->db->insert('users', $new_member_insert_data);
            return $insert;
    }

    function username_exists($key)
    {
        $this->db->where('username',$this->input->post('username'));
        $query = $this->db->get('users');
        if ($query->num_rows() > 0){

            return true;
        }
        else{
            return false;
        }
    }

то, что я хотел случиться, это;как я покажу ожидаемое сообщение об ошибке, например, «Имя пользователя уже существует», и я хочу отобразить его в своем представлении.Это возможно?или я должен попробовать другой подход?

Ответы [ 4 ]

1 голос
/ 23 мая 2011

Вы можете учиться здесь .Но для вашего лучшего понимания я все объясню.Ваш контроллер должен выглядеть следующим образом

function create_customer()
{
    // field name, error message, validation rules
    $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]|callback_username_exists');
    $this->form_validation->set_rules('email', 'Email Address', 'trim|required|valid_email');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
    $this->form_validation->set_rules('password2', 'Password Confirmation', 'trim|required|matches[password]');

    if($this->form_validation->run() == FALSE)
    {
       $this->load->view('admin/users/admin_form');
    }
    else
    {           
       if($query = $this->usermodel->create_customer())
       {
           redirect('userslist');
       }
       else
       {
           $this->load->view('admin/users/admin_form.php');            
        }
    }
}

function username_exists($key)
{
    if($this->usermodel->username_exists($key))
    {
        $this->form_validation->set_message('username_exists', 'User Name already Exists');
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}

Вот код вашей модели

function username_exists($key)
{
    $this->db->where('username',$key);
    $query = $this->db->get('users');
    if ($query->num_rows() > 0){

        return true;
    }
    else{
        return false;
    }
}

Ваш Вид должен содержать следующую строку:

<?php echo validation_errors(); ?>

Если у вас все еще есть проблемы с пониманием, пожалуйста, дайте мне знать.

0 голосов
/ 23 мая 2011

Вы можете использовать

На контроллере: $this->session->set_flashdata('message', '<div class="message">YES!</div>');

Тогда просто позвоните на ваш взгляд: <?php echo $this->session->flashdata('message'); ?>

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

0 голосов
/ 23 мая 2011

Вы можете определить переменную в классе контроллера.

class Home extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function home()
    {
        //This variable will be automaticly passed to the view.
        $this->data = "some data";

        $this->load->view('home_main');
    }

home_main.php:

<html>
<head>
    <title>My Page!</title>
</head>
<body>
    <?php echo $this->data ?>
</body>
</html>

Это полезный метод.

0 голосов
/ 23 мая 2011

Поскольку вы используете класс проверки формы, в поле зрения присутствуют сообщения об ошибках. Все что вам нужно, чтобы вызвать сообщение об ошибке, используя form_error(). Для более подробной информации, пожалуйста, посетите http://codeigniter.com/user_guide/libraries/form_validation.html.

Также, чтобы передать переменную для просмотра, вам нужно передать ее при вызове представления для отображения $this->load->view('YOUR_VIEW', array('VARIABLE_NAME' => "VARIABLE_VALUE"));

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