v2.5.2
Giriş yap

URL Yapısı

coder
606 defa görüntülendi

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];
?>
Cevap yaz
Cevaplar (6)
smack
1032 gün önce
  • $_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

coder
1195 gün önce

@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];

ibrahimali
1197 gün önce

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
)
*/

?>

m100
1197 gün önce

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

coder
1197 gün önce

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.

ibrahimali
1197 gün önce

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