2 回答

TA贡献1828条经验 获得超3个赞
在Laravel中执行此操作的一个好方法是使用表单请求。您可以为请求创建一个扩展 FormRequest 类的类(假设您在此示例中调用它)。StorePost
在此类中,可以使用该方法放置验证规则,如下所示:rules
public function rules()
{
return [
'name_en' => 'required',
'name_de' => 'required',
];
}
若要添加密钥,可以使用 prepareForValidation 方法。此方法可用于通过该方法向请求添加数据,例如:slug_merge
protected function prepareForValidation()
{
$this->merge([
'slug_en' => Str::slug($this->name_en),
'slug_de' => Str::slug($this->name_de)
]);
}
由于这发生在验证之前,因此您甚至可以在方法中向密钥添加验证。slug_rules()
因此,要实际使用此类,只需使用Laravel魔术在控制器方法中键入类名即可。您真正整洁的控制器现在可以如下所示:
public function store(StorePost $request)
{
Post::create($request->all()); // or specify the keys you want inside the `all()` method
// ...
}
就这么简单!表单请求的验证实际上将在控制器方法运行之前进行,因此您可以确保验证的数据是正确的。
当然,您可以在表单请求类中添加所需的任何方法,因此可以通过许多不同的方法实现这一点,例如,使用返回包含slug值的数组的方法。getPostData

TA贡献1921条经验 获得超9个赞
Laravel有一个名为TransformsRequest的类;
它可以自动过滤和处理您请求中的每个字段。
我认为你可以创建一个中间件,就像TransformesRequest一样。SlugStrings.php
因此,每个请求的键值都将通过 slug 进行转换。
创建文件:app/Http/Middleware/SlugStrings.php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TransformsRequest;
use Illuminate\Support\Str;
class SlugStrings extends TransformsRequest
{
/**
* The names of the attributes that should be slug.
*
* @var array
*/
protected $only = [
'name_en',
'name_de',
];
/**
* Transform the given value.
*
* @param string $key
* @param mixed $value
* @return mixed
*/
protected function transform($key, $value)
{
if (in_array($key, $this->only, true)) {
return is_string($value) ? Str::slug($value) : $value;
} else {
return $value;
}
}
}
将此中间件添加到 :app/Http/Kernel.php
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
...
// Add it here:
\App\Http\Middleware\SlugStrings::class,
...
];
现在,您不能对字段执行任何操作,只需从请求创建它们:name_enname_de
public function store()
{
Post::create( request()->validate([
'name_en' => 'required',
'name_de' => 'required'
]) );
}
这很容易。
所以下次你有另一个字段,你想把它弄脏。只需将其添加到属性中即可。$only
- 2 回答
- 0 关注
- 115 浏览
添加回答
举报