Sunucu
Laravel
viveEditor'ü Laravel'e Blade bileşeni, yerel editör dosyaları, @viveHtml yönergesi ve temiz HTML için ViveHtml cast ile ekleyin.
viveeditor/laravel, viveEditor’ü PHP 8.4 ve üzerindeki Laravel 12 ve üzeri sürümlere getirir. Editör için bir Blade bileşeni ekler, editör dosyalarını kendi sitenizden sunar ve HTML’i kaydederken de gösterirken de PHP temizleyicisiyle temizler.
Kurulum
- Paketi ekleyin:
composer require viveeditor/laravel. Laravel hizmet sağlayıcısını veViveEditorfacade’ını kendisi bulur. - Editör dosyalarını
public/vendor/viveeditorklasörüne yayımlayın:php artisan vendor:publish --tag=viveeditor-assets. - İsterseniz ayar dosyasını da yayımlayın:
php artisan vendor:publish --tag=viveeditor-config.
composer require viveeditor/laravel
php artisan vendor:publish --tag=viveeditor-assets
Editör dosyaları kopya olarak yayımlanır. Paketi güncelledikten sonra yeni sürümle eşleşmeleri için onları --force ile yeniden yayımlayın. Dosyalar laravel-assets etiketiyle de yayımlanır.
Editörü gösterme
Sayfanın <head> bölümüne @viveeditorScripts koyun. Bu yönerge stil dosyasını ve editör betiğini kendi public/vendor/viveeditor klasörünüzden basar. Ardından bileşeni formunuzun içinde kullanın:
<head>
@viveeditorScripts
</head>
<form method="post">
@csrf
<label for="body">Makale</label>
<x-viveeditor::editor name="body" id="body" :value="old('body', $post->body)" required />
<button type="submit">Kaydet</button>
</form>
Bileşen, editörün devraldığı bir <textarea> üretir. Form, HTML’i alanın name değeriyle gönderir.
| Öznitelik | Anlamı |
|---|---|
name |
Zorunlu. Form alanının adı. |
value |
Başlangıç HTML’i. Sizin için kaçışlanır. |
label |
İsteğe bağlı. Görünür bir <label> yoksa alanın aria-label değeri olur. |
id, required ya da Dosya menüsünü gizleyen data-files="false" gibi diğer öznitelikler textarea’ya aktarılır.
Bileşen tek betikli sürümü kullanır; bu yüzden yalnızca npm ile gelen ekler (bahsetme, emoji, formül, dipnot, şablonlar ve yapay zekâ yardımı) onda yoktur.
Saklanan HTML’i gösterme
Saklanan HTML’i @viveHtml(...) ile basın. Basarken temizler; böylece temizlemeyi eklemeden önce yazılmış ya da formlarınızın dışında yazılmış kayıtlar da güvende kalır.
<article>@viveHtml($post->body)</article>
Kaçışsız çıktı kullanmayın
Editör HTML’ini hiçbir zaman {!! !!} ile basmayın; bu yol temizlemeyi atlar.
Kaydederken temizleme
ViveHtml cast’ı kaydederken temizler, okurken yeniden temizler. Böylece cast’tan önce ya da ham sorgularla yazılmış kayıtlar da temiz gelir.
use Illuminate\Database\Eloquent\Model;
use Viveeditor\Laravel\Casts\ViveHtml;
class Post extends Model
{
protected function casts(): array
{
return ['body' => ViveHtml::class];
}
}
Cast’ın okurken temizleyemediği bir kayıt (çok büyük ya da çok karmaşık) boş metin olarak okunur ve hata, istisna işleyicinize gider. Kaydederken ise hata fırlatılır.
Başka bir yerde temizlemek için facade’ı kullanın. İkinci bağımsız değişken, o çağrı için ayar dosyasındaki seçenekleri ezer:
use Viveeditor\Laravel\Facades\ViveEditor;
$clean = ViveEditor::sanitize($request->input('body'));
$withEmbeds = ViveEditor::sanitize($html, ['embeds' => true]);
ViveEditor::sanitize() ve @viveHtml, çok büyük ya da çok karmaşık HTML için Viveeditor\Sanitizer\SanitizeException fırlatır. Sınırlar için Sunucuda temizleme sayfasına bakın.
Ayarlar
config/viveeditor.php, dosya klasörünü ve @viveHtml, cast ve facade’ın kullandığı temizleyici seçeneklerini tutar:
return [
'asset_path' => env('VIVEEDITOR_ASSET_PATH', 'vendor/viveeditor'),
'sanitize' => [
'embeds' => false,
'allowBase64' => false,
'allowRelativeImages' => false,
],
];
Editörde video yerleştirmeyi açtıysanız burada embeds değerini true yapın; yoksa HTML temizlenirken yerleştirmeler kaldırılır.
İçerik Güvenliği Politikası (CSP)
Vite::useCspNonce() kullandığınızda @viveeditorScripts’in bastığı etiketler nonce alır. Editör bu nonce’ı ilk kullanımda yüklediği ek betiklere (Word ve Markdown çeviricileri ile paneller) de aktarır; bu betikler aynı klasördedir. script-src yönergeniz bu klasöre izin vermelidir. Nonce’ı ayarlamak için Laravel’in Vite belgelerine, politikanın geri kalanı için Güvenlik ve CSP sayfasına bakın.
Dil
Editör dilini <html lang="..."> değerinden alır. Bunu düzen dosyanızda uygulamanın diline göre ayarlayın:
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
İlgili sayfalar
Laravel paketi bir CDN'den bir şey yüklüyor mu?
Hayır. Editör dosyaları kendi public/vendor/viveeditor klasörünüze yayımlanır ve oradan sunulur.
Saklanan HTML'i kaçışsız Blade çıktısıyla basabilir miyim?
Hayır. Saklanan HTML'i, basarken temizleyen @viveHtml ile gösterin; böylece eski kayıtlar ve formlarınızın dışında yazılmış kayıtlar da güvende kalır.