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

Laravel项目中Asana PHP API弃用警告问题求助

问题

我在Laravel项目中使用Asana PHP API编写了仅包含createTask方法的AsanaService类,代码如下:

public function createTask(Sale $sale,$short_payment){
    
    $headers = [
        'Asana-Enable: new_user_task_lists',
        'Asana-Disable: new_memberships,new_project_templates',
    ];

    $asana_client = Client::accessToken(
        env('ASANA_PERSONAL_ACCESS_TOKEN'),
        ['headers' => $headers]
    );

    $task_name = $sale->name;
 
    try {
        $result = $asana_client->tasks->create([
            'workspace' => env('ASANA_WORKSPACE_GID'),
            'name' => $task_name,
            'projects' => env('ASANA_PROJECT_GID'),
        ]);
    } catch (Asana\Errors\AsanaError $e) {
        echo 'Error: ' . $e->getMessage();
    }

    return $result;
}

目前收到「This request is affected by the "new_user_task_lists" deprecation」或「This request is affected by the "new_memberships" deprecation」的提示。我尝试调整Asana-Enable/Disable头的各种组合(启用、禁用或移除这三个头)均无效,仅设置log_asana_change_warnings => false能屏蔽提示,但认为这并非正确解决方式。我的需求是仅在单个工作区的单个项目中创建任务,此前功能正常,求正确的修复方案。


解决方案

1. 替换旧参数,解决new_memberships警告

你收到的new_memberships提示,是因为当前使用的projects参数属于旧版API规范,现在Asana要求用memberships数组来定义任务与项目的关联关系:

修改创建任务的核心代码块:

$result = $asana_client->tasks->create([
    'workspace' => env('ASANA_WORKSPACE_GID'),
    'name' => $task_name,
    'memberships' => [
        [
            'project' => env('ASANA_PROJECT_GID')
            // 若需要指定任务到项目的某个分区,可添加 'section' => '对应分区GID'
        ]
    ]
]);

2. 正确配置API头,解决new_user_task_lists警告

之前的头配置方式可能存在问题,建议通过客户端实例的setHeaders方法设置,同时明确禁用不需要的废弃特性:

调整客户端初始化代码:

// 初始化客户端,不在这里传递headers参数
$asana_client = Client::accessToken(env('ASANA_PERSONAL_ACCESS_TOKEN'));

// 明确禁用三个废弃特性
$asana_client->setHeaders([
    'Asana-Disable: new_user_task_lists, new_memberships, new_project_templates'
]);

3. 升级Asana PHP客户端(可选)

如果你的客户端版本较旧,建议升级到最新版,新版本会更好地适配API变更,减少兼容性问题:

composer require asana/asana:^3.0

完整修复后的createTask方法

public function createTask(Sale $sale, $short_payment)
{
    $asana_client = Client::accessToken(env('ASANA_PERSONAL_ACCESS_TOKEN'));
    
    // 设置正确的废弃特性禁用头
    $asana_client->setHeaders([
        'Asana-Disable: new_user_task_lists, new_memberships, new_project_templates'
    ]);

    $task_name = $sale->name;
 
    try {
        $result = $asana_client->tasks->create([
            'workspace' => env('ASANA_WORKSPACE_GID'),
            'name' => $task_name,
            'memberships' => [
                ['project' => env('ASANA_PROJECT_GID')]
            ]
        ]);
    } catch (Asana\Errors\AsanaError $e) {
        echo 'Error: ' . $e->getMessage();
    }

    return $result;
}

这样修改后,既符合Asana最新的API规范,又能从根源上消除废弃警告,而非简单屏蔽日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:16