Diskuze: Žádné ověření duplicitního jména
Tvůrce
Zobrazeno 10 zpráv z 10.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
Ahoj, patrně máš tu exception v jiném namespace.
Např. pokud UserManager je v namespace App\Model, pak danou
výjimku máš patrně také tam, tedy
App\Model\DuplicateNameException.
No a továrnu na formulář máš patrně jinde, např. v
App\Forms, a pokud v ní zachytáváš
catch (DuplicateNameException)
tak se to bude snažit zachytávat výjimku v daném namespace, tedy
App\Forms\DuplicateNameException, kterou to pochopitelně
nezachytí, jelikož taková se nevyhazuje.
Osobně výjimky řeším tak, že mám pro ně samotný namespace např.
App\Exceptions a v souborech, kde výjimky vyhazuji/zachycuji,
mám
use App\Exceptions;
v takovém případě poté všude píšu
throw new Exceptions\DuplicateNameException;
catch (Exceptions\DuplicateNameException)
Nestane se mi tedy, že bych omylem zachytával výjimku ve špatném
namespace a zároveň mám v kódu přehled o tom, o jakou třídu jde, jelikož
v use nepoužívám celou cestu ke třídě, ale jen k jejímu
namespace. Tedy pak píšu např.
Entities\User
Facades\UserManager
Exceptions\DuplicateNameException
// atd.
Edit: Ještě taková drobnost - unikátní index ve výchozím stavu
neřeší velká a malá písmena, tedy ti půjde registrovat uživatel
"Lukáš" i "lukáš", což možná nechceš (závisí na typu aplikace), tak na
to dej pozor 
I když jsem asi špatně pochopil problém
Pokud ti to do databáze vloží
řádek se stejným jménem, pak patrně vůbec na tom sloupci s 'username'
nemáš unikátní index.
Super, díky.. Neměl jsem v databázi přidanej ten unikátní index. 
A k tomu předchozímu komentu, takže ty si uděláš soubor např. Exceptions
a tam dáš
namespace App\Exceptions
a necháš to prázdný nebo tam i nějak zpracováváš ty výjimky?
V namespace App\Exceptions mám jednotlivé výjimky, tzn. 1
soubor = 1 výjimka, kdy to nejčastěji vypadá
namespace App\Exceptions;
class DuplicateNameException extends \RuntimeException
{
}
Jen výjimečně potřebuji ve třídě výjimky něco mít, takže naprostá
většina jich jenom dědí a nic víc.
A potom ve třídách, které výjimky používají, to řeším jednoduše
namespace App\Model\Facades;
use Nette;
use App\Exceptions;
class UserManager
{
public function addUser($data)
{
try {
$this->db->insert($data);
} catch (Nette\Database\UniqueConstraintViolationException $e) {
throw new Exceptions\DuplicateNameException();
}
}
}
namespace App\Forms;
use Nette;
use App\Exceptions;
class RegistrationFormFactory
{
public function create()
{
$form = new Form();
// ...
$form->onSuccess[] = array($this, "submitted");
return $form;
}
public function submitted($form, $values)
{
try {
$this->userManager->addUser($values);
} catch (Exceptions\DuplicateNameException $e) {
$form->addError("Jméno již existuje");
}
}
}
Ten kód je jen ukázkový pro představu.
Dobrá, díky moc a ještě jestli mohu jeden dotaz
Když mám formulář s
->addTextArea
a pak to chci dále zpracovávat, tak mi to napíše: Object of class
Nette\Forms\Controls\TextArea could not be converted to string. Jak to mohu
tedy převést do stringu?
Do text area někdo vloží text a já ho chci rozkouskovat podle svého pomocí preg_split()
A to nejde jednoduše nějak takhle?
public function create()
{
$form = new Form();
$form->addTexarea("content", "Obsah");
return $form;
}
public function formSubmitted(Form $form, $values)
{
$content = $values->content;
preg_split(..., $content);
}
Zobrazeno 10 zpráv z 10.