PHP 怎么PHP Directus

wen PHP项目 2

本文目录导读:

PHP 怎么PHP Directus

  1. 理解关系
  2. 在 PHP 中调用 Directus API
  3. 身份验证(获取 Token)
  4. 常见操作示例
  5. 使用 SDK 或封装库(推荐)
  6. 注意事项
  7. 完整示例(Laravel 项目中)

PHP 与 Directus,通常是指 在 PHP 项目中使用 Directus 作为无头 CMS(Headless CMS)后台,Directus 本身是一个后端 API 管理工具(基于 Node.js),而你的 PHP 项目则作为客户端通过 HTTP 请求调用 Directus 提供的 REST 或 GraphQL API 来获取/管理数据。

下面分场景说明:


理解关系

  • Directus:安装在自己的服务器上(Node.js + 数据库),提供管理后台和 API。
  • PHP:你的 Web 应用(如 Laravel、Symfony、原生 PHP)通过 cURL / Guzzle 等 HTTP 客户端请求 Directus API。

数据流
PHP 应用 → (HTTP请求) → Directus APIDirectus 数据库(MySQL/PostgreSQL)


在 PHP 中调用 Directus API

假设你的 Directus 已安装并配置好(访问地址:https://your-directus.com),用户 token 已获取。

1 用 Guzzle(推荐)

<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
$client = new Client([
    'base_uri' => 'https://your-directus.com',
    'headers'  => [
        'Authorization' => 'Bearer YOUR_STATIC_TOKEN',
        'Content-Type'  => 'application/json',
    ]
]);
// 读取文章集合
$response = $client->get('/items/articles', [
    'query' => [
        'fields' => 'id,title,content',
        'limit'  => 10,
    ]
]);
$data = json_decode($response->getBody(), true);
print_r($data['data']); // 输出文章列表

2 用 cURL(无框架)

<?php
$url = "https://your-directus.com/items/articles?fields=id,title,content";
$token = "YOUR_STATIC_TOKEN";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $token",
    "Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data['data']);

身份验证(获取 Token)

Directus 支持几种认证方式,PHP 中常用:

1 静态 Token(永久有效)

在 Directus 后台用户设置中生成静态 token,直接写在代码里(注意安全)。

2 登录获取临时 Token

$client = new Client(['base_uri' => 'https://your-directus.com']);
$response = $client->post('/auth/login', [
    'json' => [
        'email'    => 'admin@example.com',
        'password' => 'your-password'
    ]
]);
$token = json_decode($response->getBody())->data->access_token;
// 后续请求使用这个 token

常见操作示例

查询单个文章

$response = $client->get('/items/articles/1');

创建新文章

$response = $client->post('/items/articles', [
    'json' => [
        'title'   => 'Hello Directus',
        'content' => 'Content here...',
        'status'  => 'published'
    ]
]);

上传文件

$response = $client->post('/files', [
    'multipart' => [
        [
            'name'     => 'file',
            'contents' => fopen('/path/to/image.jpg', 'r'),
            'filename' => 'image.jpg'
        ],
        [
            'name'     => 'data',
            'contents' => json_encode(['title' => 'My Image'])
        ]
    ]
]);

使用 SDK 或封装库(推荐)

可以用官方或社区 PHP SDK 简化开发:

  • Directus PHP SDK(非官方但成熟):alexdresco/directus-php-sdk

    composer require alexdresco/directus-php-sdk
  • 自定义封装类:将 API 调用封装成 Service 类,便于维护。


注意事项

事项 说明
Token 安全性 静态 token 写入代码有风险,建议使用环境变量(.env)或临时 token。
API 版本 检查你的 Directus 版本(v9/v10 API 略有不同),最新版使用 /items/auth 等标准路径。
字段映射 Directus 会自动添加 iddate_createddate_updated,自定义字段名建议用下划线。
权限 确保 PHP 请求使用的用户/角色拥有足够的 API 权限。

完整示例(Laravel 项目中)

// config/directus.php
return [
    'url'   => env('DIRECTUS_URL'),
    'token' => env('DIRECTUS_TOKEN'),
];
// app/Services/DirectusService.php
class DirectusService {
    protected $client;
    public function __construct() {
        $this->client = new Client([
            'base_uri' => config('directus.url'),
            'headers'  => [
                'Authorization' => 'Bearer ' . config('directus.token')
            ]
        ]);
    }
    public function getArticles() {
        $response = $this->client->get('/items/articles');
        return json_decode($response->getBody(), true)['data'];
    }
}

这样你的 Laravel 控制器就可以 $articles = $directusService->getArticles(); 获取数据了。


如果你问的是 在 Directus 中编写 PHP 扩展/插件,那是另一种情况(Directus 扩展通常用 JavaScript/Vue,不支持 PHP),如果是指这个方向,请进一步说明你的需求。

抱歉,评论功能暂时关闭!