如何从控制器方法中的请求类调用验证器?Laravel 8



我需要在这两个方法中使用验证:

public function store(ResourceRequest $request)
{
$page = new Page();
$page->create([
'content'     => request('content'),
'title'       => request('title'),
'slug'        => $this->metadataHandler->generateSlug(request('slug')),
// etc.
]);
return redirect()->route('pages');
}
public function update(ResourceRequest $request, Page $page)
{
$page->update([
'content'     => request('content'),
'title'       => request('title'),
'slug'        => $this->metadataHandler->generateSlug(request('slug')),
// etc.
]);
return redirect()->route('pages');
}

但是我没有看到地方,我可以调用变量$request。该变量在方法参数中声明,并且保持不使用。我不能只写$request->all(),因为我需要对一些输入字段应用不同的处理程序方法。

而且,我在这个字段列表中重复自己。两种方法都是一样的。有什么建议吗,如何避免重复?

您正在使用辅助函数,即request(),您可以使用以下命令:

# Helper function    # $request object
request('content') = $request->content
request('title') = $request->title

你可以把它改短一些,比如:

public function store(ResourceRequest $request)
{
$page = new Page();
$page->create($request->except('_token'));
return redirect()->route('pages');
}

您可以通过定义一个Accessor来在Page模型中使用generateSlug()。

class Pageextends Model
{
public function getSlugAttribute($value)
{
// Use meta data handler here $this->metadataHandler->generateSlug
}
}

最新更新