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
相关产品推荐
相关产品推荐

