我正在将我的 CI3 应用程序重写为 CI4,实际上我面临很多问题。
现在,我有一个基于 CI4 构建的工作 API,get 请求适用于 Angular 前端和 Postman,但 post 请求仅适用于 Postman。
这是我的路线.php:
$routes->options('(:any)', 'LoginController::options');
$routes->get('/api/login', 'LoginController::index');
$routes->post('/api/login/login', 'LoginController::login');
这是我的登录控制器的一部分:
<?php
namespace AppControllers;
use CodeIgniterController;
use AppModelsLoginModel;
use CodeIgniterHTTPResponse;
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((,它对我有用。