与$ request-> viaResource

时间:2019-06-24 19:59:32

标签: php laravel laravel-nova

  • Laravel版本:5.8
  • Nova版本:2.0.5
  • PHP版本:7.3
  • 操作系统和版本:MAC OS 10.14.4
  • 浏览器类型和版本:Google Chrome 75.0.3770.100

说明:

我有一个允许创建任务的应用程序。任务属于活动。

我在广告系列详细信息页面上有一个创建按钮,如果用户单击该按钮,则URL将如下所示: http://demo.test/nova/resources/tasks/new?viaResource=campaigns&viaResourceId=1&viaRelationship=

如您所见,我添加了resource id,因此在创建任务时可以使用它们。像这样:

$campaign = Campaign::find($request->viaResourceId);
...
Select::make('Campaign', 'campaign_id')
                ->options([$campaign->id => $campaign->name])
                ->displayUsingLabels()
                ->withMeta(['value' => $campaign->id])
                ->hideWhenUpdating()
                ->readonly(true),

该代码有效,除非我将BelongsTo字段用于其他关系(在本例中为任务组)。似乎BelongsTo字段发出了另一个请求,并且没有在URL中附加viaResourceId,因此我无法访问我的campaign变量。例如,$campaign->id->我收到错误:Trying to get property 'id' of non-object

1 个答案:

答案 0 :(得分:1)

将字段部分中的app \ Nova \ Task.php更改为此:

public function fields(Request $request)
{
    if($request->editMode=="create" && !empty($request->viaResource) && !empty($request->viaResourceId)){
        $campaign = Campaign::find($request->viaResourceId);
        return [
            ID::make()->sortable(),
            Text::make('Name')->sortable(),
            Select::make('Campaign', 'campaign_id')
                ->options([$campaign->id => $campaign->name])
                ->displayUsingLabels()
                ->withMeta(['value' => $campaign->id])
                ->hideWhenUpdating()
                ->readonly(true),
            BelongsTo::make('Group')->display('name'),
        ];
    }
    return [
        ID::make()->sortable(),
        Text::make('Name')->sortable(),
        BelongsTo::make('Campaign')->display('name'),
        BelongsTo::make('Group')->display('name'),
    ];
}

我在nova草案项目中检查了它,它运行良好,没有任何错误!