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 關注
- 99 瀏覽
添加回答
舉報