url'yi parçalayıp dosya adı ve fonksiyon olarak çağırma
klasör dosya yapısı
-app
--controller
---profil.php
index.php
profil.php içindeki kod
<?php
function index()
{
echo "burası profil sayfası";
}
function ekle()
{
echo "Burası profil ekleme sayfası";
}
ben link olarak /profil/HasanERYILMAZ
bu şekilde girinde index fonksiyonu çalışsın
link olarak /profil/ekle
şeklinde girincede ekle fonksiyonu çalışsın istiyorum
bu yapıyı nasıl kodlayabilirim.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
hocam çok sağolasın uğraştın o kadar lakin genel bir class oluşturup
<?php
class URL {
public function ekle()
{
echo "ekle çalıştı";
}
public function goster()
{
echo "göster çalıştı";
}
}
$degisken = "goster"; <-- urlden gelen veya elle girilen fonksion ismi
URL::$degisken();
bu şekilde yazınca çözebiliyormuşuz.
//kopyalayarak kodu denemen için birde fonksiyon oluşturdum
function ekle(){
echo 'ekle calisti';
}
//Fonksiyonların isimlerini bir dizide tutuyoruz ben ekle ve deneme adında 2 eleman ekledim
$fonksiyonlarim = [
'ekle','deneme'
];
//$url büyük ihtimalle $route[1] olacaktır
$url = 'ekle';
// in_array() ile fonksiyonlarimde aradığımız fonksiyon varmı diye kontorl ediyoruz
if(in_array($url,$fonksiyonlarim)){
//var ise bu şekilde çalıştıra biliyormuşuz
$url();
}
//denerken galiba php 7.4.7 de denedim online bir php çalıştırma sitesinde denedim
Tamamdır hocam diyelim bu şekilde yazdık atıyorum benim 100 tane 200 tane dosya içinde fonksiyonum yar
her defasında else if ekleyip sonuna mı eklemem gerekiyor.
daha kolay bir mantığı vardır büyük ihtimal
$hangifonksiyon = "ekle";
$hangifonksiyon(); <-- burada ekle fonksiyonunu çağırcak
gibi
$routeExplode = explode('?', $_SERVER['REQUEST_URI']);
$route = array_values(array_filter(explode('/', $routeExplode[0])));
//$route değişkenine sitenin url kısmını '/'lardan bölerek ayırıyoruz $route[0] büyük ihtimalle profilbuyüzden $route[1] için denetim yapcağız
//ilk denetimi bütük ihtimalle yapmana gerek yok ama genede eklemek istedim
if($route[0]=='profil'){
if($route[1]=='ekle'){
//eğer profilden sonra gelen yer ekle ise ekle fonksiyonunu çalıştırıyoruz
ekle();
}else{
//ekleden farklı bir değer alırsa index fonksiyonu çalışıyor indexten farklı bir fonksiyon ekleyeceksen else if kullanarak onunda denetimini yapman gerekecektir
index();
}
}