modifikace metody HttpRequest->isAjax

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
sharkcz
Člen | 28
+
0
-

Poprosil bych o změnu metody HttpRequest->isAjax, aby pokud není nastavená hlavička X-Requested-With detekovala, zdali požadavek neobsahuje nastavení nějaké vlastnosti v GET/POST. Vlastnost by se mohla jmenovat například isAjax, ale jméno by mohlo být konfigurovatelné.

Důvod:
Prohlížeč Chrome má problém se self signed certifikátem. Po odsouhlasení, že si přeji pokračovat na zabezpečených stránkách se tento souhlas nevztahuje na AJAXový požadavek odeslaný z HTTP stránky na HTTPS s preflight requestem. Nelze tedy propagovat hlavičku X-Requested-With.

Obecně předpokládám, že by se změna mohla hodit i v jiných situacích, kdy například JS framework nevkládá hlavičku sám od sebe. (Což není moje situace.)

smasty
Člen | 90
+
0
-

sharkcz:

Môžeš si vytvoriť vlastnú implementáciu rozhrania Nette\Http\IRequest (napr. podedením Nette\Http\Request), kde si správanie prispôsobíš tvojím potrebám.

Edit:
Tú si potom zaregistruješ ako službu httpRequest do Dependency Injection Containeru.

Tvoja implementácia by mohla vyzerať napr. takto:

class MyHttpRequest extends Nette\Http\Request
{

	public function isAjax()
	{
		return parent::isAjax()	|| $this->getQuery('is_ajax') === 'true';
	}

}

Editoval smasty (9. 9. 2011 17:27)

nanuqcz
Člen | 822
+
0
-

Mělo by i fungovat metodu isAjax přepsat v BasePresenteru

class BasePresenter extends Presenter
{
        public function isAjax()
        {
                return parent::isAjax() || $this->getParam('is_ajax');
        }
}