【问题标题】:Validation errors not sent using redirect withInput()未使用重定向 withInput() 发送验证错误
【发布时间】:2023-01-22 12:24:43
【问题描述】:

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

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 视图表单的 sn-p

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

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

这是表格

问题是save() 中的验证错误没有发送到create() 方法。但是 save() 方法中存在验证错误,我可以通过添加来证明 $validation = \Config\Services::validation(); dd($validation);save()。这是我添加代码后单击“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');

我该怎么做才能解决这个问题?谢谢

【问题讨论】:

    标签: php codeigniter validation codeigniter-4


    【解决方案1】:

    答:改用Flashdata

    CodeIgniter 支持“flashdata”,或者只会被 可用于下一个请求,然后自动清除。

    IE:

    save()方法。

    public function save()
    {
        //validasi input
        if (!$this->validate([
            'judul' => 'required|is_unique[komik.judul]'
        ])) {
            $validation = ConfigServices::validation();
    
            return redirect()
                ->to('/komik/create')
                ->with("redirectedErrors", $validation->listErrors())
                ->with("redirectedInput", $this->request->getVar());
        }
    }
    

    with()

    将密钥和消息添加到会话中闪存数据.

    public with(string $key, array&lt;string|int, mixed&gt;|string $message) : $this

    B.然后,修改create()方法,将刷入的数据传递给View。

    create()方法。

        public function create()
        {
            return view('komik/create', [
                'title' => 'Form Tambah Data Komik',
                'validation' => ConfigServices::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>
    

    【讨论】:

      猜你喜欢
      • 2014-01-16
      • 2014-12-22
      • 1970-01-01
      • 2023-03-19
      • 2013-03-24
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多