2

I using Codeigniter 4

I already add in Routes.php

$routes->get('/register', 'Auth::register');

and this is Auth.php

    public function register()
    {
        $data['page_title']   = "Register";
        if ($this->request->getMethod() === 'post') {
            $email = $this->request->getPost('email');
            if ($this->validate([
                'email' => 'required',
                'pwd'  => 'required',
                'repwd' => 'required|matches[pwd]'
            ])) {
                $pwd = $this->request->getPost('pwd');
                $repwd = $this->request->getPost('repwd');
                $ip = $this->request->getIPAddress();
                return redirect()->to('/');
            }
            $data['email'] = $email;
            $this->session->setFlashdata('isFormError', true);
        }

        return view('auth/register', $data);
    }

for view is just simple html form with method post. after form submit, I got error :

404 - File Not Found
Controller or its method is not found: \App\Controllers\Register::index

I using http://localhost:8080/register and also redirected to http://localhost:8080/register but it load \App\Controllers\Register::index not \App\Controllers\Auth::register

how to solve this? may be I miss something or is this CI4 bugs?

yozawiratama
  • 4,209
  • 12
  • 58
  • 106

2 Answers2

6

You will need to specify the method in your routes. Since you're using POST, it's supposed to be:

$routes->post('/register', 'Auth::register');

You can also use multiple method:

$routes->match(['get', 'post'], '/register', 'Auth::register');

Or no method:

$routes->add('/register', 'Auth::register');
taylorthurlow
  • 2,953
  • 3
  • 28
  • 42
Nicky Wahyudi
  • 61
  • 1
  • 2
0

I had a similar problem and managed to solve it. It turns out that the problem lies in the request url Here is my Routes.php

$routes->post('path', 'Mycontroller::method');
$routes->post('path/(:segment)', 'Mycontroller::method/$1');

When I make post request to localhost/path/ it return 404. But when I make post request to localhost/path (without trailing slash), it returns expected result. At first I think it because second route with segment, but it turns out after I delete the second route I still get the same result.

The "trailing slash in url problem" doesn't affect GET request

So I just remove all trailing slash on every post request

poetrasapoetra
  • 165
  • 1
  • 8