codeigniter 未使用withInput()重定向发送验证错误

zc0qhyus  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(125)

我正尝试使用重定向将验证错误发送到另一个方法

public function save()
    {

        //validasi input
        if (!$this->validate([
            'judul' => 'required|is_unique[komik.judul]'
        ])) {
            return redirect()->to('/komik/create')->withInput();
        }

这是create()方法

public function create()
    {
        session();
        $data = [
            'title' => 'Form Tambah Data Komik',
            'validation' => \Config\Services::validation()

        ];

        return view('komik/create', $data);
    }

这是我的create.php视图表单的一个片段,我试图在其中验证

<form action="/komik/save" method="post" enctype="multipart/form-data">

                <?php d($validation) ?>
                <?= $validation->listErrors();; ?>

其形式为

问题是save()中的验证错误没有发送到create()方法,但是验证错误存在于save()方法中,我可以通过在save()中添加$validation = \Config\Services::validation(); dd($validation);来证明,这是在添加代码

后单击“Tambah Data”按钮时发生的情况
正如您所看到的,存在验证错误,只是没有将其发送到create()方法

我试着使用return view(),这可以工作,但它产生了另一个问题。我想使用return redirect()代替。
这是我的路线

$routes->get('/', 'Pages::index');
$routes->get('/komik/create', 'Komik::create');
$routes->get('/komik/edit/(:segment)', 'Komik::edit/$1');
$routes->post('/komik/save', 'Komik::save');
$routes->delete('/komik/(:num)', 'Komik::delete/$1');
$routes->get('/komik/(:any)', 'Komik::detail/$1');

我能做些什么来解决这个问题?谢谢

dkqlctbz

dkqlctbz1#

A.使用Flashdata代替。
CodeIgniter支持“flashdata”,即只对下一个请求可用的会话数据,然后自动清除。
即:

save()方法。

public function save()
{
    //validasi input
    if (!$this->validate([
        'judul' => 'required|is_unique[komik.judul]'
    ])) {
        $validation = \Config\Services::validation();

        return redirect()
            ->to('/komik/create')
            ->with("redirectedErrors", $validation->listErrors())
            ->with("redirectedInput", $this->request->getVar());
    }
}

with()
将密钥和消息作为 Flashdata 添加到会话。
public with(string $key, array<string|int, mixed>|string $message) : $this
B.然后,修改create()方法,将闪存数据传递到View。

create()方法。

public function create()
    {
        return view('komik/create', [
            'title' => 'Form Tambah Data Komik',
            'validation' => \Config\Services::validation(),
            'redirectedErrors' => session()->getFlashdata("redirectedErrors") ?: "",
            'redirectedInput' => session()->getFlashdata("redirectedInput") ?? [],
        ]);
    }

C.最后,在您的View文件(create.php)中,您可以正常访问传递的数据。

create.php查看文件。

<form action="/komik/save" method="post" enctype="multipart/form-data">
    <?php echo empty($validation->getErrors()) ? $redirectedErrors : $validation->listErrors() ?>

    <input id="first_name" name="first_name" type="text" value="<?php echo old('first_name', array_key_exists('first_name', $redirectedInput) ? $redirectedInput['first_name'] : '') ?>"/>

</form>

相关问题