2024/8/1 13:32:45
为什么一定要通过http://localhost/index.php/users访问才能成功?我希望是通过http://localhost/api/users.php来访问,该如何修改?index.php在根目录下,users.php在根目录的api目录下
2024/8/1 13:32:45
如果你希望直接通过 `http://localhost/api/users.php` 来访问,那么你需要确保在 `users.php` 文件中能够正确初始化数据库连接。可以通过在 `users.php` 中直接包含数据库连接的初始化代码来实现。
以下是修改后的 `users.php`:
```php
require_once 'database.php'; // 确保路径正确,如果 users.php 在 api 目录下,而 database.php 在根目录下
// Instantiate database
$database = new Database();
$db = $database->getConnection();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// 处理 POST 请求
} elseif ($_SERVER['REQUEST_METHOD'] == 'GET') {
$query = "SELECT * FROM users";
$stmt = $db->prepare($query);
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($users);
}
```
请确保 `require_once 'database.php';` 的路径正确。如果 `users.php` 在 `api` 目录下,而 `database.php` 在根目录下,那么相对路径是正确的。另外,确保 `database.php` 文件的路径和名称都是正确的。
### 文件目录结构
确保你的文件目录结构如下:
```
project/
├── api/
│ └── users.php
├── database.php
└── index.php
```
如果目录结构没有问题,那么访问 `http://localhost/api/users.php` 应该能够正确初始化数据库连接,并且能够正常处理请求。
### 进一步改进
如果你有多个 API 文件(如 `users.php`、`classes.php` 等)都需要使用数据库连接,为了避免重复代码,可以创建一个公共的初始化文件,比如 `init.php`,然后在每个 API 文件中包含它。
以下是 `init.php` 的示例:
```php
require_once '../database.php'; // 根据你实际的目录结构调整路径
// Instantiate database
$database = new Database();
$db = $database->getConnection();
```
然后在 `users.php` 中包含这个初始化文件:
```php
require_once 'init.php'; // 确保路径正确
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// 处理 POST 请求
} elseif ($_SERVER['REQUEST_METHOD'] == 'GET') {
$query = "SELECT * FROM users";
$stmt = $db->prepare($query);
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($users);
}
```
通过这种方式,你可以方便地管理和初始化数据库连接,并且在多个 API 文件中共享相同的连接设置。