Как исправить ошибку проверки формы в Codeigniter 4 - PullRequest
0 голосов
/ 25 марта 2020

Я использовал проверку формы Codeigniter 4 в форме входа в систему. Кроме того, форма проверки работает хорошо или хорошо. Когда загружается страница входа в систему, перед этим импортированное поле также показывает ошибки. В ниже я вставил контроллер и просмотр кодов, которые относятся к разделу входа в систему. Я проверяю разные способы, но я не понимаю, как это решить. Пожалуйста, помогите мне решить эту проблему.

Контроллер пользователя:

<?php namespace App\Controllers;

use App\Models\UserModel;

class User extends BaseController
{
    public function index()
    {
        echo "User index";
        // Load views
//        echo view('static/header');
//        echo view('front/all');
//        echo view('static/footer');
    }

    public function login()
    {
        helper('form');

        $val = $this->validate([
            'username' => 'required',
            'password' => 'required',
        ]);

        if (!$val)
        {
            echo view('front/login', [
                'validation' => $this->validator
            ]);
        }
        else
        {
            return redirect()->to('/');
        }

    }

    public function logout()
    {

    }

    public function register()
    {
        // Load views
        echo view('front/register');
    }
}

вход. php (просмотр страницы входа в систему):

<body>
<?= \Config\Services::validation()->listErrors(); ?>
<div class="limiter">
    <div class="container-login100">
        <div class="wrap-login100 p-b-160 p-t-50">
            <?php echo form_open(base_url('user/login'),array('class'=>'login100-form validate-form')); ?>
                    <span class="login100-form-title p-b-43">
                        Login Form
                    </span>

                <div class="wrap-input100 rs1 validate-input">
                    <input class="input100" type="text" name="username">
                    <span class="label-input100">User Name</span>
                </div>


                <div class="wrap-input100 rs2 validate-input">
                    <input class="input100" type="password" name="password">
                    <span class="label-input100">Password</span>
                </div>

                <div class="container-login100-form-btn">
                    <button class="login100-form-btn" type="submit">
                        Login
                    </button>
                </div>

                <div class="text-center w-full p-t-23">
                    <a href="#" class="txt1">
                        Forget Password?
                    </a>
                </div>

                <div class="text-center w-full p-t-23">
                    <a href="<?php echo base_url('user/register'); ?>" class="txt1">
                        SignUp
                    </a>
                </div>
            </form>
        </div>
    </div>
</div>

</body>

Вывод (сначала страница входа) Время посещения): localhost / user / login

1 Ответ

0 голосов
/ 29 марта 2020

Согласно моему пониманию вашей проблемы, вы всегда получаете ошибку. И вы ожидаете, что получите сообщение об ошибке только тогда, когда вы оставите пустое имя пользователя и пароль.

Решение: Вы должны запустить проверку, когда форма будет опубликована.

Описание В своем коде перед показом формы вы проверяете данные. Который, очевидно, будет пустым. Ниже приведено решение, измените вашу функцию входа в систему с помощью следующего кода. (Это не оптимальное решение, но оно прояснит вашу концепцию).


    public function login()
    {
        helper('form');

        $val = null;

        if($this->request->getMethod() === 'post') {// checking if request is post
            $val = $this->validate([
                'username' => 'required',
                'password' => 'required',
            ]);
        }


        if (!$val)
        {
            echo view('front/login', [
                'validation' => $this->validator
            ]);
        }
        else
        {
            return redirect()->to('/');
        }

    }
...