URL Yapısı
Merhaba.
Url yapısı ile ilgili bir sorum var.
Aşağıdaki gibi bir url yapım var
controller/method/params
Bu url'i / ile parçalıyorum. Çözemediğim bir nokta var.
Aşağıdaki yapıya göre birden fazla params gelirse ben bu paramsları nasıl alacağım.
Not: Yapı OOP değildir.
<?php
function parseUrl(){
if( isset($_GET["url"]) ){
return $url = explode('/', filter_var(rtrim($_GET["url"],'/'), FILTER_SANITIZE_URL));
}
}
$url = parseUrl();
echo $Controller = $url[0];
echo $Method = $url[1];
echo $Params = $url[2];
?>
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (6)
- $_SERVER["REQUEST_URI"] yardımı ile istemci tarafından gönderilen URL yakalanır
- trim() fonkisyonu ile URL sonunda bulunursa "/" karakteri temizlenir.
- explode() fonksiyonu ile URL "/" karakterine göre dizileştirilir
- $url değişkeni bir dizi olur. [0] => Controller Adı, [1] => Method Adı, [2} ve Sonrası => Parametreler
- unset() veya duruma göre array_shift() fonksiyonu ile $url değişkeninde varsa [0] ve [1] indis numaralı elemenlar temizlenir.
- Geriye kalan değerler parametrelerdir.
alıntı: yasinerarslan.com
@m100 hocam senin verdiğin kodu denedim ama şu hatayı verdi ama teşekkür ederim hocam.
Warning: count(): Parameter must be an array or an object that implements Countable in...
@ibrahimali hocam sizin kodu denedim istediğim sonucu veriyor teşekkür ederim.
Aşağıdaki gibi yapmış olsam buradaki parametreler nasıl alınabilir yine
controller/method/params yapısı olarak.
function parseUrl()
{
$dirname = dirname($_SERVER['SCRIPT_NAME']);
$dirname = $dirname != '/' ? $dirname : null;
$basename = basename($_SERVER['SCRIPT_NAME']);
$request_uri = str_replace([$dirname, $basename], null, $_SERVER['REQUEST_URI']);
return $request_uri;
}
$url = parseUrl();
echo $controller = $url[0];
echo $method = $url[1];
echo $params = $url[2];
Deneye bilirsin bence
<?php
$url = "controller/method/params/a/b/c";
$ex_url = explode("params/",$url);
$params = explode("/",$ex_url[1]);
print_r($params);
/*
Cikti:
Array
(
[0] => a
[1] => b
[2] => c
)
*/
?>
bir array oluşturalım
$array= array();
bu array bizim parametrelerimizi taşıyacak
bu parametreleri $url den alacağız şimdi
for ($i=2; $i < count($url)-1; $i++) {
$array[$i-2] = $url[$i];
}
print_r($array);
burada i değişkenimizi 2 den başlattık çünkü gördüğüm kadarıyla parametrelerin 2 den başlıyor bu yüzden arrayin 0. çekmecesine koyması için ise $i-2 yaptık bu şekilde sadece parametrelerini bir diziye alabilrisin
anladığım kadarıyla parametreleri tek bir arraye almak istiyordun denemedim fakat çalışacığını düşünüyorum
Merhaba.
Url yapımız bu
controller/method/params
Bu yapıya uygun örnek
kategoriler/kategori/1
kategoriler/kategori/ad
Yapımıza göre örnekte 1 yada ad yazan yer bizim params'ımız. Bu şekilde bir sorun yok
Ama bu params kısmı birden fazla olursa aşağıdaki örnekteki gibi
kategoriler/kategori/a/b/c
Bu örnekte a b c birer params. Ben bu paramsları otomatik olarak tek seferde almak istiyorum.
Yani aşağıdaki gibi $Params = $url[4] gibi sürekli dizi anahtarı vermeden almak istiyorum.
Yapıya göre $url[2] params'a denk geliyor. Ben $Params = $url[2]; dediğim zaman tüm paramsları almış olayım.
$url = parseUrl();
echo $Controller = $url[0];
echo $Method = $url[1];
echo $Params = $url[2];
echo $Params = $url[3];
echo $Params = $url[4];
Bu params kısmının bir array olabileceğini controller/method/params = [] ve içerisindeki değerleri / ile bölebiliriz diye düşündüm ama koda dökemedim.
Merhaba. Bu konuda sana yardım ede bilirim sadece sorunu anlamadım. yani örneğin şöyle
controller/method/params
" Aşağıdaki yapıya göre birden fazla params gelirse ben bu paramsları nasıl alacağım." burada ne demek istediğini örnekle göstersen yardımcı ola bilirim deye düşünüyorum