[addon captcha] Captcha form control
- jirka
- Člen | 1
Zdravím, jsem v Nette úplně nový a neznalý, ale hledal jsem a nenalezl.
Mám problém s captchou (zkouším verzi Panda v úpravě Ondřej Mirtes, PHP 5.2.6, Nette 0.9.4):
Captcha se mi zobrazí, ale po odeslání (ať už ji chci validovat nebo ne,
resp. ať dám ->addRule(Captcha::validateValid) nebo nedám), mi vyskočí
chyba Call to a member function invoke() on a non-object
v TextBase.php, řádek 54 (fce getValue).
Je třeba někde (kde a jak?) přidat do TextBase nějaký (‚Captcha‘?)
filter?
Nebo co jsem přehlédnul a co dělám špatně?
- pjoter
- Člen | 118
Zkusil jsem to, ale stále:
Obrázek “view-source:http://.../captcha/show/?…” nelze zobrazit, protože
obsahuje chyby.
- Endrju
- Člen | 147
jirka napsal(a):
Zdravím, jsem v Nette úplně nový a neznalý, ale hledal jsem a nenalezl.
Mám problém s captchou (zkouším verzi Panda v úpravě Ondřej Mirtes, PHP 5.2.6, Nette 0.9.4):
Captcha se mi zobrazí, ale po odeslání (ať už ji chci validovat nebo ne, resp. ať dám ->addRule(Captcha::validateValid) nebo nedám), mi vyskočí chyba Call to a member function invoke() on a non-object v TextBase.php, řádek 54 (fce getValue).
Je třeba někde (kde a jak?) přidat do TextBase nějaký (‚Captcha‘?) filter?
Nebo co jsem přehlédnul a co dělám špatně?
Stejný problém u mě. Běhám na NetteFramework-0.9.4-PHP5.2
Věděl by někdo co s tím prosím?
Chyba je na radku
$value = (string) $filter->invoke($value);
/**
* Returns control's value.
* @return string
*/
public function getValue()
{
$value = $this->value;
foreach ($this->filters as $filter) {
$value = (string) $filter->invoke($value);
}
return $value === $this->translate($this->emptyValue) ? '' : $value;
}
Editoval Endrju (16. 6. 2010 23:55)
- assassik
- Člen | 43
Tady je upravená verze pro aktuální (25.6.2010) Nette 5.3
github.com/PavelMaca/CaptchaControl
Navíc jsem to upravil tak, že při špatném opsání se vygeneruje obrázek s novým textem.
Font included
Editoval assassik (27. 11. 2010 17:51)
- ViPEr*CZ*
- Člen | 817
Už to někdo vyřešil… pokud ne tak navrhuji captcha stáhnout z doplňků… osobně jsem to zkoušel a bez úspěchu… chybu mi to vyhazuje v metodě getLink a konkrétně v lookup funkci, kde by mělo dojít ke vrácení nějaké url adresy… bohužel ještě jsem to úplně nepochopil a podle popisků to není jasné.
- ViPEr*CZ*
- Člen | 817
Tak už jsem kapku dál… konečně se mi podařilo vykreslit obrázek… no jo ale k čemu mi to je když se mi neporovná při odeslání… když si vypíšu getValue, tak mi to nic nevrací…
public static function validateValid(IFormControl $control)
{
$values = $control->getValue();
var_dump($values);
return false;
}
A nevím jak přesně upravit loadHttpData… kde v originále co je ke stažení je parametr, ale s parametrem ta funkce v mém Nette již není.
Editoval ViPEr*CZ* (27. 11. 2010 0:27)
- assassik
- Člen | 43
díky, nevšiml jsem si github.com/PavelMaca/CaptchaControl
Editoval assassik (27. 11. 2010 17:51)
- ViPEr*CZ*
- Člen | 817
Ee nezkoušel… bohužel jedu ještě pod 5.2 PHP… toto mi nepojede.
Stále mám jen obrázek… a po odeslání mi to nezvaliduje… prostě stále,
že jsem neopsal správný obrázek. Už jsem si vše vypsal… vidím co je
v sessions… a jak se to tam vše ukládá… ale stále se mi neodesílá
formulář… použít POST pro zjištění z formuláře se mi nechce teda…
ale nechápu některé metody nejspíš… z dokumentace toho moc nevyčtu ..
např. loadHttpData nevím co ve skutečnosti má dělat.
- ViPEr*CZ*
- Člen | 817
Tak jsem se pohnul dále… ta metoda loadHttpData se vůbec nevolala… tak jsem ji zavolal z validateValid a hle… již se mi odesílá input. Další problém ovšem nastane v tom, že stará třída měla parametr v loadHttpData, který vracel zřejmě hodnotu z hidden fieldu… a jak se teď k té hodnotě vlastně dostanu, když teď je ta funkce bez parametru?
- ViPEr*CZ*
- Člen | 817
Tak možná to někomu pomůže… musel jsem rozšířit takto:
public static function validateValid(IFormControl $control)
{
$control->loadHttpData(); //++
return $control->getValue() === $control->getWord();
}
Dále pak přepsat loadHttpData takto:
public function loadHttpData()
{
$path = strtr(str_replace(']', '', $this->getHtmlName()), '.', '_'); //++
$token = ArrayTools::get($this->getForm()->getHttpData(), explode('[', $this->getKeyName())); //++
if (isset($token)) {
$key = $token;
if ($this->loadState($key)) {
$session = $this->getStateSession();
unset($session->$key);
parent::loadHttpData();
if ($this->tmpValue !== $this->word) {
$this->tmpValue = '';
}
}
}
}
Zde zmizel parametr funkce public function loadHttpData() a ty dva řádky co přibyli zjistí hodnotu z HiddenFieldu… ten je potřeba, aby se našlo správné slovo v sessions. Ve funkci getImage jsem si navolil proměnnou $link na svůj link, kde se zobrazí captcha obrázek místo $this->getLink, které mi nenašlo přidaný presenter (možná kvůli mým rourám v bootstrapu – možná uvést do příkladu jak mají být nastaveny roury, aby to z toho návodu šlo hned). Pokud se Vám negenerují obrázky tak ještě by mohlo pomoci zakomentování těchto dvou řádků:
$second->filter(IMG_FILTER_SMOOTH, 1);
$second->filter(IMG_FILTER_CONTRAST, -60);
Editoval ViPEr*CZ* (27. 11. 2010 20:35)
- ViPEr*CZ*
- Člen | 817
Děkuji. Používám starší verzi Nette 1.0 a k PHP 5.3 jsem ještě nemigroval… to přijde ještě někdy v budoucnu. Každopádně děkuji. Moje úpravy fungují 100%. Ještě jsem si generování obrázku přepsal do ImageMagick komponenty pro PHP. Takže pokud by někdo používal starší Nette a měl problémy s rozšířením Captcha co je ke stažení v rozšířeních, tak mu ten návod výše doufám pomůže.
@assassik: až přejdu k namespace a PHP 5.3 tak určitě využiji tvojí komponentu ;-)
- japlavaren
- Člen | 404
Dobry den,
nakopirval som si captchu do stranky a mam problem – hadze mi to
Declaration of Captcha::loadHttpData() must be compatible with that of
IFormControl::loadHttpData()
pouzivam nette prefixovanu v 2.0
viete mi niekto poradit, co sa mu nepaci?
dakujem
- japlavaren
- Člen | 404
stiahol som si najnovsiu verziu od assasika a je tam pravdepodobne bug.
vo funkcii addCaptcha na riadku 178 je zapis
<?php
return $form[$name] = new static;
?>
co je zapis co mne a php nic nehovori. dokazete mi niekto poradit, ako to upravit?
dakujem
- ViPEr*CZ*
- Člen | 817
No mě to moc nefunguje teda. Máte to bez prefixů. A i když si
přípíšu tam co má být velké N, tak to nefunguje. Moje verze co jsem tu
upravoval již taktéž nefunguje pod 2.0.
Bohužel nevím proč… proč naopak teď loadHttpData úplně aplikaci kousne
a bílá obrazovka (log prázdný). To je nepochopitelné, zvlášť když ta
metoda je stále v API dokumentaci, tak proč to teď vyhazuje chybu
(respektive nedělá absolutně nic)?
// Tak mi chyběl v té metodě ještě prefix NArrayTools::get … zajmavý, že to nikde nic nevyhodilo… pak se to blbě hledá :-D
Editoval ViPEr*CZ* (2. 3. 2011 13:23)
- live.to.ride
- Člen | 1
Pro ty jemž se obrázek nezobrazuje
framework 1.0 alpha
Call to undefined function get_called_class()
Captcha – 743:
- FormContainer::extensionMethod(‚addCaptcha‘, array(‚Captcha‘, ‚addCaptcha‘)); // stara hodnota
- FormContainer::extensionMethod(‚FormContainer::addCaptcha‘, array(‚Captcha‘, ‚addCaptcha‘)); // funkcni
Obrázek se nezobrazuje – chyba v Captcha:show
Captcha – 550:
- $this->getHttpResponse()->expire(0); // stara hodnota
- $this->getHttpResponse()->setExpiration(0); // funkcni
Call to a member function invoke() on a non-object @ TextBase.php
Line: 54
Captcha – 101:
- $this->filters[] = ‚strtolower‘ // stara hodnota
- $this->filters[] = callback(‚strtolower‘); // funkcni
Použil jsem tipy z dřívějších příspěvků, takže rekapitulace
Mě to jede, pokud nepomohlo good luck and read the fuckin` sources ;)
Editoval live.to.ride (30. 3. 2011 13:54)
- Podbor
- Člen | 19
Zdravím,
používám výbornou Captchu od Pavla Máci, ale narazil jsem na fakt, že
načítání stránky, ve které je formulář s danou Captchou mi trvá snad
20 ms. Je to běžná „čekací“ doba ?
Stroj pravda není nejnovější, ale takovou čekací dobu jsem nikde
nezaznamenal. Používám nejnovější Google Chrome.
- assassik
- Člen | 43
Běžný to určitě není, kdyžtak mi pošli konfiguraci Captchy a já se na to mrknu.
PS: repo updatnutý na nový namespace, github.com/PavelMaca/CaptchaControl
Editoval assassik (22. 4. 2011 22:14)
- Aurielle
- Člen | 1281
Nové namespaces, stáhni si novou verzi z GitHubu… https://github.com/…ptchaControl
- assassik
- Člen | 43
pro NetteFramework-2.0alpha-PHP5.3 potřebuješ verzi se starýma NS viz: https://github.com/…e-2.0-Alpha2
Editoval assassik (23. 4. 2011 19:23)
- Felix
- Nette Core | 1196
Pokud chcete pouzivat Seznam captchu
nebo
reCaptchu
, zkuste CaptchaExtension
treba vam to neco usetri =)
- xDexter
- Člen | 13
assassik napsal(a):
ViPErCZ napsal(a):
A zkoušel jsi mojí verzi?
Dneska jsem jí updatnul a měla by bez problému jít na Nette 2.0.a2 i na 0.9.7Odkaz je kousek výše.
Zdravím,
dnes jsem vyzkoušel tuto verzi a funguje skvěle! Jen jsem objevil problém při zobrazení v IE 6 a 7, captcha se nezobrazí. Víte o tom nebo IE6 a 7 nejsou podporovány?
Problém jsem důkladněji nezkoumal, ale ještě upozorním v kompatibilním režimu IE 8 nebo 9 se captcha zobrazí, ale v samotném IE 7 či 6 ne!
- pidiclovek
- Člen | 91
czhDavid napsal(a):
Jenom bych zde chtěl sdělit svůj menší postřeh.
Pokud chcete vypsat formulář s captchou ručně nezapomeňte vypsat i její skryté pole obsahující _uid_captcha
Ahoj, přesně o toto se pokouším, _uid_captcha i samotný captcha input vypisuji, ale nedaří se mi nijak vypsat obrázek :( Poradíte prosím?
v šabloně:
{form newNewsletterContactForm}
<ul class="errors" n:if="$form->hasErrors()">
<li n:foreach="$form->errors as $error">{$error}</li>
</ul>
<div id="newsletterH">NEWSLETTER</div>
<div id="newsletterFirstRow">
{input name}
{input email}
</div>
<div id="newsletterSecondRow">
{input captcha}
{}
</div>
<div>
{input _uid_captcha}
</div>
{/form newNewsletterContactForm}