You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopware 6自定义Admin API端点:新增资源实现方案

解决Shopware 6.4自定义实体API增删改的几种途径

针对你的需求,有三个可行方案实现自定义实体的API增删改操作:

1. 直接使用Shopware自动生成的Admin API端点

只要你的自定义实体是按Shopware规范创建(正确定义EntityDefinition并完成系统注册),Shopware的Admin API会自动为它生成完整的CRUD端点,无需额外开发:

  • 创建实体:POST /api/v3/{你的自定义实体名称},请求体传入实体字段数据
  • 更新实体:PATCH /api/v3/{你的自定义实体名称}/{实体ID},传入需修改的字段
  • 删除实体:DELETE /api/v3/{你的自定义实体名称}/{实体ID}

需要确保API用户拥有对应实体的操作权限(在Shopware后台用户权限中配置),请求时携带Admin API认证令牌即可。

2. 编写自定义Symfony控制器

如果自动生成的端点无法满足自定义业务逻辑需求,可以编写Symfony控制器处理POST请求:

<?php

namespace YourPlugin\Controller\Api;

use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

#[Route(defaults: ['_routeScope' => ['api']])]
class CustomEntityController extends AbstractController
{
    public function __construct(private EntityRepositoryInterface $customEntityRepository)
    {
    }

    #[Route(path: '/api/v3/custom-entity/create', methods: ['POST'])]
    public function create(Request $request, Context $context): JsonResponse
    {
        $data = $request->toArray();
        
        // 调用repository的upsert方法(支持创建和更新)
        $this->customEntityRepository->upsert([$data], $context);
        
        return new JsonResponse(['status' => 'success']);
    }

    #[Route(path: '/api/v3/custom-entity/delete/{id}', methods: ['DELETE'])]
    public function delete(string $id, Context $context): JsonResponse
    {
        $this->customEntityRepository->delete([['id' => $id]], $context);
        
        return new JsonResponse(['status' => 'deleted']);
    }
}

编写完成后,在插件的services.xml中注册该控制器,或利用Symfony自动配置完成注册。

3. 在App Script中获取完整的Repository实例

如果必须通过App Script实现,可以通过services.container获取包含增删改方法的完整EntityRepositoryInterface实例:

// 在App Script的POST端点逻辑中
const repository = services.container.get('your_custom_entity.repository');
const context = services.context;

// 创建实体
const newEntity = {
    name: 'Test Entity',
    // 其他字段...
};
repository.upsert([newEntity], context);

// 删除实体
repository.delete([{ id: '实体ID' }], context);

注意需在App的manifest文件中配置对应实体的操作权限,确保App拥有足够权限执行相关操作。

内容的提问来源于stack exchange,提问作者ciekals11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:17:25