$ _GET Parametreleri kullanarak değil

4 Cevap php

CodeIgniter ile çalışırken, varsayılan olarak devre dışıdır $ _GET görünür. Bu yüzden merak ediyorum.

Bir çok kez, çok uzun arama sorguları oluşturmak istiyorum. Yani, örneğin, ben N farklı alanlara göre veritabanında arama sağlayan bir form var. Kod ateşleyici, benim arama sonucunu görüntülemek için url olacaktır:

http://mysite.com/field1/field2/field3/.../fieldN-1/fieldN

Yani bir örnek url olurdu

http://mysite.com/shopping/toys/educational/age6-8/page1/sortbypriceinascendingorder/

Ben yapmak değil, özellikle bu gibi çünkü:

1) ne ben biz gibi bir şey var, öyle ki bir sonraki seferde daha fazla arama parametrelerini eklemek istiyorsanız:

http://mysite.com/shopping/toys/education/age6-8/page1/sortbypriceinascendingorder/boys-only/in-stock

Ben "erkek-sadece" ve "stokta" url sayfa / sortby segmentleri sonunda ekleyerek kulüpler nasıl sevmiyorum. Bu doğru gelmiyor.

2) ne bir kişi "oyuncak" segmentini ve "eğitim" bölümünü kullanmak değilse? Sonra url tür beceriksiz görünüyor

http://mysite.com/shopping/all%5Fproducts/all%5Fcategories/age6-8/page1/sortbypriceinascendingorder/

O zaman sorgu dizesi parametrelerini yerleştirdiğiniz sipariş (ve alan = değer) farketmez çünkü $ _GET arama için parametreleri kullanmak daha mantıklı değil mi? Ve bir sorgu dizesi parametresi kullanılmazsa otomatik olarak "seçili değil" anlamına gelir.

4 Cevap

(Birçok sistem gibi) da + gibi arama parametreleri için farklı bir sınırlayıcı kullanabilirsiniz. Bunlar explode() gerekli gibi, tek bir kontrol yoluna, geçirilmektedir. Örnek: http://http://mysite.com/shopping/toys+education+age8+etc

Isterseniz Öncelikle, her zaman $ _GET değişkenleri etkinleştirebilirsiniz.

Ayrıca, ../shopping/type:toys/cat:education/age:6-8/sort:price_asc gibi params kullanın ve sonra kontrolör kod onları ayrıştırmak:

function shopping() {
  $args = func_get_args();
  foreach ($args AS $arg) {
    list($filter_name, $filter_value) = explode(':', $arg, 2);
    if ($filter_name == 'cat') {
      // set category filter to $filter_value (education)
    } elseif ($filter_name == 'type') {
      // set type filter to toys
    }
    // etc etc
  }
}

Onlar bunu NEDEN nedeni kontrolörleri, fonksiyonları ve parametreleri arama müdahale olmasıdır.

CI ne "programını" anlatmak için URI dizesini kullanır. Bu kılan etkinleştirebilirsiniz bir mod var:

www.example.com/controller/method/parameter

Bu içine:

www.example.com/?c=controller&m=methods&p=parameter1&yourgetitem=yourgetvalue

Sanki güzel, ama emin misin CI ile dilediğini yapmak CAN değil; Sadece bazı verdiği alır.

Bu CodeIgniter'daki sorgu dizeleri ve segmentleri hem de kullanmak mümkündür, burada nasıl:

Config.php setinde:

  • $ Config ['uri_protocol'] = "PATH_INFO'yu";
  • $ Config ['enable_query_strings'] = TRUE;

. Htaccess içinde index.php yerine bir / sonra kullanabilir? CI kuralına: (. *) RewriteRule ^ $ index.php / $ 1 [L]