Laravel nova action -在fields()上获取当前模型示例

icomxhvb  于 2023-05-01  发布在  其他
关注(0)|答案(6)|浏览(164)

Laravel 5.8 Nova 2.0
在nova行动中

public function fields()
{
    return [];
}

是否有任何方法可以访问当前选中的行?

xpszyzbs

xpszyzbs1#

您可以从NovaRequest获取当前模型示例。你可以从传递给方法的\Illuminate\Http\Request创建NovaRequest:

use Laravel\Nova\Http\Requests\NovaRequest;
use Illuminate\Http\Request;

/**
 * Get the fields displayed by the resource.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function fields(Request $request)
{
   // Model instance or null
   $model = NovaRequest::createFrom($request)
      ->findModelQuery()
      ->first();

   return [
     // Your fields here
   ];
}
bgibtngc

bgibtngc2#

不,有两个原因:
1)fields在资源加载时调用,而不是在显示操作对话框时调用
2)“当前选定”的概念实际上只存在于客户端(浏览器)端
您只能在handle PHP方法中访问选定的行(即。即,提交后,您有$models)。

pzfprimi

pzfprimi3#

有时候,当我在详细信息视图上想对该记录执行操作,但也想在字段中包含当前记录数据(可能是帮助文本)时,我会从URL中获取它。

//Get the URL
    $explodeUrl = explode('/', strrev($_SERVER['HTTP_REFERER']), 2);
7fyelxc5

7fyelxc54#

我只在细节页面上运行操作,然后像这样获取单个模型数据:

$model = DB::table('something')->where('id', request()->resourceId)->first();
hvvq6cgz

hvvq6cgz5#

不知道是否有人解决了这个问题,但我得到了同样的问题,并找到了一个article
根据本文,你可以在action类中创建一个公共方法setResource,当在nova资源中注册action时,设置每行的当前资源:$action->setResource($this->resource)。然后,在fields方法中,您可以使用$this ->resource添加您的逻辑资源。
这个方法需要注意的是,$this->resource可以是nullnull模型(一个模型类,但没有属性)。因此,在添加任何逻辑之前,必须检查资源属性是否为null

disho6za

disho6za6#

您可以定义一个handleRequest函数并以这种方式检索模型。比如说

public function handleRequest(ActionRequest $request)
    {
        $this->model = $request->targetModel(); //I am setting a custom variable here.
        parent::handleRequest($request);
    }

然后可以在handle()方法中使用$this->model()
对于独立操作非常有用。

相关问题