带有Angular 10的CodeIgniter 4 API:$ this-> request-> getPost()始终为空

发布时间:2020-07-07 10:31

我正在将我的CI3应用程序重写为CI4,实际上,我遇到了很多问题。

现在,我有一个基于CI4的有效API,并且get请求对Angular前端和Postman非常有效,但是post请求仅对Postman有效。

这是我的Routes.php:

$routes->options('(:any)', 'LoginController::options');
$routes->get('/api/login', 'LoginController::index');
$routes->post('/api/login/login', 'LoginController::login');

这是我的LoginController的一部分:

<?php
    namespace App\Controllers;

    use CodeIgniter\Controller;
    use App\Models\LoginModel;
    use CodeIgniter\HTTP\Response;

    class LoginController extends Controller
    {

    protected $login_model;

    public function __construct()
    {
        $this->login_model = new LoginModel();
    }

    public function options(): Response
    {
        return $this->response->setStatusCode(Response::HTTP_OK); // Status code for CORS
    }

    public function index()
    {
        return;
    }

    public function login()
    {

    try {
        $data = $this->request->getPost();

        $username = $data['username'];
        $password = $data['password'];

        list($user, $status) = $this->login_model->login($username, $password);
    }
    [...]

这是Angular服务的一部分,它发送请求:

login(username: string, password: string) {
    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type': 'application/json'
      })
    };
    
    let body = {
         username: username,
         password: password
    }

    return this.http.post<any>(
      `${this.API_URL}/login/login`, 
      body,
      httpOptions
    ).pipe [...]

在邮递员上,一切都像魅力一样。使用Angluar,我可以触碰端点,而在调试时,可以看到正在调用登录功能,但是$this->request->getPost();始终为空。

如果我在不更改Angular代码的情况下将端点改回CI3,那么它将起作用。

有人遇到过类似的事情吗?

回答1

我认为您必须尝试$ this-> request-> getJSON(),它对我有用。