Yazdığınz kodda hiç bir şey anlaşılmıyor. NavigationContainer'ı App'in en başına koydunuz mu routeları güzel bir şekilde ayarladınız mı? Siz kendiniz bir data belirterek navigasyon işlemlerini halletmeye çalışmıssınız sanırım. Eğer burada sorun navigation propuna erişemiyorsanız bir function component'e çevirip useNavigation() hooku ile birlikte bu propu alabilirsiniz. Eğer react-navigation kullanmıyorsanız buradan projenize ekleyip daha kolay bir şekilde halledebilirsiniz.
burada sunucu tarafında render yapmayacağından php backendine api ile bağlanman lazım ve genellikle mounted kısmında verilerini php tarafından çekmen gerekiyor. Authentication olayını ise session olmadığından jwt token ile yapabilirsin.
bunun gibi rastgele bir token yerine session_id() fonksiyonu ile o session için her zaman aynı tokeni oluşturursan böyle bir sorun kalmayacaktır.
<?php
if(!$_POST['_token']) {
$_SESSION['_token'] = md5(session_id());
}
Mysql kullanıp her seferinde sorgu göndermek yerine gelen veriyi cacheleyerek kullanabilirsin.
eğer her taraftan kullanılabilen state'lerden bahsediyorsanız react redux tam aradığınız şey görecektir. Component bazlı state oluşturmak yerine global statelar oluşturuyorsunuz ve bunu her yerde kullanabiliyorsunuz. Bu sayede statei child componentlere geçirmene gerek kalmıyor. Örnek olarak bir counterımız olsun. Biz bunu hem header hem de footer componentinde gösterelim. Normal şartlarda bu ikisini kapsayan bir componentte stateimizi tanımlamamız gerekir ki iki component de bu state'e erişsin. Ancak redux ile bir tane counter oluşturuyoruz ve iki komponent içinden ayrı ayrı erişiyoruz buna.
bir link vs. versen daha iyi olur bu şekilde isteğin anlaşılmıyor
Güvenlik derken neyi kastediyorsunuz ? Eğer sorununuz kodu başkalarının görmesi ise private bir repo oluşturup sadece o kişiyi repoya ekleyerek başkasının görmesini engelleyebilirsiniz.
Sorunu aşağıdaki şekilde çözdüm
web.php
Route::get('/{product:slug}',[ProductController::class,'index'])
ProductController.php
public function index(Product $product)
{
return "ürün bulundu"
}
Bu şekilde yaptığım zaman laravel macbook-pro linkini Product modelinin slug kolonunda arayıp bulursa bunu direkt $product değişkenine aktarıyor.
Böyle bir şey yapmak istiyorsan büyük ihtimalle kullanıcının giriş yapıp yapmadığını ön yüzde yani javascript tarafında tutuyorsun ki eğer böyleyse aşağıdaki kod ile yapabilirsin.
if (!girisYapilmisMi()) {
document.querySelector('#hesabim').display = "none";
}
eğer React vb. frameworkler kullanıyorsan direkt rendlerlanmamasını sağlayabilirsin.
return (
<>
{girisYapilmisMi() && (
<li>
Hesabım
</li>)}
</>
)
Ancak eğer php ile sayfayı renderlıyorsan direkt olarak aşağıdaki gibi bir kod kullanabilrsin.
<?php if (girisYapilmisMi()): ?>
<li>Hesabım</li>
<?php endif;?>
Bunun için 2 yol göstereceğim.
İstersen product idsini get parametresi ile alıp o ürüne ait bilgileri veri tabanından çekerek yapabilirsin ki bunu önermem çünkü kötü bir link yapın olur.
Bunun yerine veritabanında links diye bir tablo oluşturup her ürün için ayrı bir link tutabilirsin örneğin www.site.com/iphone-12-plus. Bunun için de Routeları kontrol ettiğin sayfanda o anki route ile links tablosundaki bir route eşleşiyor mu diye bakıp o ürüne ait bilgileri çekebilirsin.