Autor Zpráva
joe
Profil
Ahoj,

řeším stránky v Code Igniteru a narazil jsem na problém. Pokud mám friendly URL a adresa je třeba

../neco/neco2?parameter=4


Jak pak dostanu v Code Igniteru tu hodnotu 4?

$this->input->get('parameter');
vrací false a celé pole $_GET je prázdné. Je jiná možnost, než si to parsovat z request stringu?

(a neposílejte mě na oficiální fórum CI, musel bych se tam pro zaslání příspěvku registrovat, tak třeba tu je nějaký šťastlivec s tímto frameworkem, který bude vědět)
jso
Profil *
joe
parse_str($_SERVER['QUERY_STRING'],$_GET);
Aesir
Profil
joe:
A co oficiální dokumentac? Ta je bez registrace. Zejména poslední odstavec v kapitole o URL by vám mohl pomoci. Jinak by to chtělo příště taky uvést v jakém contextu ten kód voláte (co je $this?).
joe
Profil
Aesir
Ne, to mi nepomůže, na to jsem se už myslím díval. Já chci zachovat friendly url a nechci vytvářet url jinak, jen chci mít možnost získat si tuto proměnnou. Zřejmě se jedná o bug, protože pokud jsou url řešené takhle, tak jak se všechno posílá na index rewritem a tohle autoři nedomysleli.

jso
To mi taky nepomůže.
1. V $_GET nic není, je to prázdné pole, protože je použit rewrite, nevím teď jak přesně tam je to pravidlo, ale zřejmě to vše posílá na index.php a do žádného parametru v url, to by vysvětlovalo, proč to pole je prázdné, pokud ho tam někde nepromazávají (ale proč by to dělali).
V CI je téměř jedno v jakém contextu se to volá, nefunguje to nikde (model, view, controller)

2. QUERY_STRING mám prázdný.

Pokud je adresa treba

../foo/bar?param=5

a použiju parse_str, tak klíč bude celý toto /foo/bar?param a to taky nechci :-)
Aesir
Profil
joe
V $_GET nic není, je to prázdné pole, protože je použit rewrite, nevím teď jak přesně tam je to pravidlo, ale zřejmě to vše posílá na index.php
Ano tohle bude ten problém, ale není to problém Code Igniteru :)
Zkopírujte sem všechna rewrite pravidla, řekl, že bude problém opravdu tam.
joe
Profil
Aesir
A koho jiného by to byl problém? ;-) Prostě si myslím, že s tím nepočítali... Ale je možné, že to nějak jde.
.htaccess, který se má podle dokumentace vytvořit zkráceně

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]


Pokud by adresy byly "normálně", tj. s ? a následně &, pak by nebyl žádný problém. Hlavní problém je v tom, že nikde do $_GETu neukládají zpátky parametry z URL, které začíná otazníkem, pak by se asi problém vyřešil.
Aesir
Profil
joe:

RewriteRule ^(.*)$ index.php?/$1 [L]


Předáváte celou cestu jako query string. Nestačilo by to takhle? Tím si jej nepřepíšete

RewriteRule ^(.*)$ /index.php/$1 [L]
joe
Profil
Ne, tak to nejde, pak to totiž nefunguje vůbec.

EDIT: Navíc tohle moc měnit nemůžu, to jsou pravidla daná pro CI, na které je CI vytvořen, je to prostě nedomyšlené pro cool url :-)
Aesir
Profil
joe:
je to prostě nedomyšlené pro cool url

Nesouhlasím. Je to sice už docela dost dlouhá doba, co jsem potkal tenhle framework, ale neměl jsem s GET parametry žádný problém. Stačilo správné nastavení enable_query_strings, uri_protocol, routování (resp. rewritu) a fungovalo to bez problémů.
Pokud ani to nepomáhá, tak vám asi nic jiného než oficiální fórum nezbývá.
joe
Profil
Aesir
To jste ale možná neměl podporu pro rewrite a byl použitý query string ve smyslu, že adresa byla ve tvaru ..?c=Controller&m=model&v=view&param

V tomhle případě zjištování fungovat bude. Nicméně jsem si to už obešel sám, kdyby to někdo potřeboval, tak jednoduše
$get = explode('?', $_SERVER['REQUEST_URI']);
if(isset($get[1])) {
	parse_str($get[1], $get);
	if(is_array($get)) {
		foreach($get as $param => $value) {
			$_GET[$param] = $value;
		}
	}
}
Aesir
Profil
joe
To jste ale možná neměl podporu pro rewrite a byl použitý query string ve smyslu, že adresa byla ve tvaru ..?c=Controller&m=model&v=view&param
Nikoliv, bylo to s nastavením rewritů na "cool URI". Pro podporu mého tvrzení dávám další odkazy, na googlu se dá také najít poměrně velké množství řešení.
joe
Profil
Aesir
Nevím, nefungovalo mi to. Nejsem žádný odborník na tento fw, dělám v něm pár dní, ale mít problémy při obyčejném zjišťování parametru z GET ... každopádně děkuji za pomoc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: