Request ile iletilen tanımlama bilgilerini gizlemek istiyorum. Örneğin bir tablodaki veriyi güncellemek için güncellemek istediğim alanı belirtmek için bir id iletiyorum.
Bu idler kullanicilarin tariyici penceresinde görünüyor ,bunun olmasını istemiyorum, bunu yapmanın bir yolu var mı.
Request tanımlama bilgilerini gizlemek
id'lerin görünmesini istemiyorsanız bunun yerine uuid4 kullanabilirsiniz, bu tahmin edilmesi imkânsızdır ancak id'ye nispetle daha fazla alan kaplar, hızlı erişim için indexlenmesi gerekeceğinden bu alan iki katına çıkar. yani 123 gibi bir id yerine 36 x 2 karakter yer tutar.
- Düzenlendi
aeneas sineld dediği gibi uuid kullanılabilir ama bazı problemleri var. Uuid string bir ifade, veri tabanında binary tutulması gerekiyor. Yer ve hız konusunda integer kadar iyi olmayacaktır. O yüzden kullandığınız veri tabanının uuid desteğini, uuid'ye nasıl yaklaştığını araştırıp mutlaka öğrenin, sonra sürpriz yaşamayın.
Benim bu konudaki tavsiyem hem id hem de uuid ikisi birlikte kullanmak. id yine auto increment primary key olacak, uuid ise unique index'e sahip bir alan olacak; alan tipi desteği varsa uuid (PostgreSQL'in var) yoksa binary(16) olacak. Binary olursa veri tabanına yazarken önce binary'ye dönüştürmeniz gerekecek demektir; okurken de binary'den uuid'ye. Binary olursa hem hızlı çalışır hem de az yer kaplar. Kendi iç işlemlerinizi klasik id ile yapacaksınız, mesela ilişkileri id ile kuracaksınız ama normal kullanıcıların göreceği yerleri uuid ile yapacaksınız. Mesela bir kullanıcının bilgisine ulaşmak için:
Route::get('user/{uuid}', [UserController::class, 'show']);
public function show($uuid)
{
return UserResource::make(
User::where('uuid', $uuid)->firstOrFail()
);
}
GET users/43f036bb-99de-4258-bfa6-e28ee9969b7a
yapacaksınız ama bu kullanıcının Order modeli ile bağı varsa:
public function orders(): HasMany
{
return $this->hasMany(Order::class, 'user_id'); // Yani ilişkiyi user_uuid ile kurmayacaksınız.
}
şeklinde ilişkiyi yine id ile kuracaksınız. Böylece dış kullanıcılar uuid görecek ama sizin internal yapı klasik id ile çalışmaya devam edecek.
- Düzenlendi
aeneas Url Rewrite yapabilirsin arka planda o id olur yine ama kullanıcının gördüğü url farklı olur forexample/user/5 yerine forexample/user görür.
https://github.com/ruthgeridema/laravel-url-rewrites şöyle bir paket buldum kullanabilirsin veya Laravel URL Rewrite diye araştırma yapabilirsin
.htaccess için de böyle bir şey denenebilir
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Özel URL yeniden yazma kuralları
RewriteRule ^forexample/user/([0-9]+)$ /forexample/user/profile [L]
# Diğer Laravel kuralları buraya ekleyebilirsiniz
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>