我正在将我的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,那么它将起作用。
有人遇到过类似的事情吗?
我认为您必须尝试$ this-> request-> getJSON(),它对我有用。