První projekt s nette – pár dotazů
- n.u.r.v.
- Člen | 485
Ahoj, chtěl jsem začít s nette, ale mám pár problém/dotazů:
- Jelikož PHP vyvíjím v netbeans (7.3 česká verze), tak jsem si chtěl nainstalovat plugin nette, ale instalace nejde spustit – vypsaná následující hláška: „Zásuvný modul PHP Annotation API je požadovaný v provedení verze 201302132200“ – Co s tím?
- Používám vertrigoserv, kde jsou všechny projekty uložené ve složce „www“. Ok, stáhl jsem si nette a „nainstaloval“ – Složku nette jsem si dal do složky www – ok, přiložené ukázkové aplikace fungují, jenže teď jsem trochu nepobral následující:
- když budu teď začínat nový projekt (název např. prj1), tak si ve složce vertrigoserv-www vytvořím složku pro projekt (název složky „prj1“), ale už nevím, co vše z nette tam musím zkopírovat
- když už ve složce s projektem budu mít nette, tak ještě nevím, kam mám umisťovat vlastní php soubory – nebo to je jedno?
Díky za rady
Edit:
do teď jsem byl zvyklý, mít ve složce s projektem tuto strukturu:
- složka pages – pro všechny php
- složka css
- složka js
- případně složky pro další knihovny (gen PDF, phpmailer,…)
- images
- index.php
Ale teď vůbec nevím, kam co dát…
Edit2:
Nebo stačí pouze v mé složce s projektem vytvořit složku „libs“ a
do ní zkopírovat složku nette?
A pak stačí v indexu volat libs/loader.php ?
Editoval n.u.r.v. (7. 6. 2013 15:52)
- Oli
- Člen | 1215
V podstatě:
v balíčku je sandbox, ten můžeš použít jako kostru. Vidíš tam
i strukturu (www/js, www/css, app/presenter, …) Pokud máš napsaný napsaný
vlastní php v třídách, tak stačí ty soubory umístit někam kam vidí
loader.php (já je dávám do libs/ nebo do app/).
Případně si projdi: píšeme první aplikaci, tam je to všechno ukázáno/vysvětleno
Nejsem si jistej jestli to je tohle netbeansModule, ale myslím, že jsem něco takového stahoval a šlo to. Případně zkus Netbeans 7.4 (už te je celkem stabilní)
- n.u.r.v.
- Člen | 485
Aha, takže když mám např. soubor „funkce.php“ do kterého si píšu všechny funkce, které moje app. využívá (generování bezp. kodů, vyhodnocení dat, atd…), tak stačí tento soubor hodit do složky app? Ale pak ho asi musím někam zapsat – aby se includoval do každého scriptu – nebo ne?
- Filip Procházka
- Moderator | 4668
Nette je jedna složka, kterou vložíš do projektu a zavoláš
require_once '/cesta/k/Nette/loader.php';
a používáš. To je celé :)
V typické Nette applikaci pak máš soubory www/index.php
, na
který jsou směřovány všechny requesty. Tento index načítá
app/bootstrap.php
. Ten se zase stará o načtení knihoven (tedy
načte Nette a zapne robotloader
například) a pak „spustí aplikaci“, což probublá k nějakému
presenteru a ten se stará o komunikaci s uživatelem.
Všechno si můžeš proklikat ve staženém sandboxu, nebo na githubu
Měl by sis také nastudovat autoloading tříd, který nefunguje na funkce (php to vůbec neumí, musí se to řešit „ručně“).
Takže jaký je závěr? Pokud chceš používat funkce (spíše by jsi se měl začít poohlížet po objektovém programování), stačí ti přidat řádek
require_once __DIR__ . '/functions.php';
za tenhle
řádek a všechny funkce které zapíšeš do souboru
app/functions.php
budou přístupné všude, ve všech modelech a
presenterech.
Ovšem kdyby jsi začal používat objekty, budeš to mít řádově jednodušší, protože o ty se stará robotloader a navíc je můžeš registrovat do Systémového DI Container a ten ti je pomůže propojit (například třída na práci s články potřebuje připojení k databázi, tak DIC ti s tím pomůže).
A ještě bych tě za všechny co tady dnem i nocí radí na fóru poprosil, aby jsi si přečetl co nejvíc dokumentace a zkoušel příklady co jsou v ní různě poházené. Přecejenom, to co jsem právě napsal je i v dokumentaci, věděl by jsi to, kdyby sis ji přečetl :)
Začni tedy tady a ptej se až narazíš na něco, co nebude jasné a rádi ti odpovíme, díky! :)
- n.u.r.v.
- Člen | 485
Ahoj, díky za info…takto jsem to potřeboval…
Dokumentaci jsem četl – (je ale pravda, že ne všechny kapitoly – z časových důvodů = doženu)…Ale zkusil jsem „píšeme první aplikaci“ a z první kapitoly jsem dostal pocit, že když dělám nette, tak musím mít přesně rozvrženou strukturu, jak bylo na tom schématu a skoro se mi zdálo, že si ani nemůžu vytvořit nic vlastního…
Ohledně OOP x funkce: Ano, mám v plánu OOP, ale přeci jen i ze starých projektů používám osvědčené funkce, které např. často potřebuji, ale zdá se mi na ně tvořit třídu, když samotná fce. má jen např 5 řádků…
- Filip Procházka
- Moderator | 4668
Struktura není vůbec pevně svázaná, je jenom předpřipravená, aby jsi pomocí ní mohl rychle vytvořit projekt, začít programovat a neřešit kam dáš jaký soubor, v tom ti má výchozí struktura pomoci :)
Brzy zjistíš, že Nette samo o sobě obsahuje většinu těchto tvých funkcí :) A ano souhlasím, že je zbytečné psát třídu, když funkce má pět řádků.
- Šaman
- Člen | 2666
Tak to sorry, ale s tím nesouhlasím. Nejen kvůli robotloaderu, ale i kvůli zamezení kolizí jmen maličko i kvůli dobrému pocitu (i když naznačený use case ho zase trochu zchladí).
Tak si ty funkce napiš do třídy, prostě v tom tvém
functions.php
přidej pár řádek definujících třídu a funkce
dělej statické. Přistupovat k tomu pak budeš
Functions::mojeFunkce('foo', 'bar')
a nebudeš muset řešit
includování, budeš vždy vědět odkud se ti ta funkce vzala (v případě
víc souborů/tříd) a nedojde k neočekávanému chování, pokud stejně
pojmenovanou funkci budeš mít includovanou vícekrát.
- Filip Procházka
- Moderator | 4668
Když pomineme autoloading, existuje jediný důvod mít funkce ve třídách, kromě „dobrého pocitu“? Kolize jmen je paranoia :)
- Šaman
- Člen | 2666
Přehlednost? Zařazení do namespace? Co, až těch funkcí bude víc, budou
se dělit do několika souborů, nebo bys je nechal v jednom přerostlém
souboru? Pokud se rozdělí, jak jednoduše v kódu zjistíš, kde jsi danou
funkci vlastně vzal?
A dobrý návyk do budoucna? Pomalé seznamování se s OOP na
nejjednodušším příkladu?
Samozřejmě se dá programovat procedurálně. Dá se to i míchat s OOP, ale když už používám objektový framework, objektovou architekturu, tak by mě spíš zajímalo proč vytvářet neobjektové PHP scripty. Vždyť definice třídy zabere několik řádků a vejde se do ní spousta funkcí.
P.S. Pochopím definici aliasů (zkratek). Sám používám bd()
definovanou v bootstrapu. Pro rychlý výpis do panelu. Ale systematicky
používat neobjektové php soubory, to se mi nelíbí.
- Ondřej Brejla
- Člen | 746
n.u.r.v. napsal(a):
- Jelikož PHP vyvíjím v netbeans (7.3 česká verze), tak jsem si chtěl nainstalovat plugin nette, ale instalace nejde spustit – vypsaná následující hláška: „Zásuvný modul PHP Annotation API je požadovaný v provedení verze 201302132200“ – Co s tím?
Za pár dní vyjde 7.4 beta, která bude obsahovat nativní Nette support.
- n.u.r.v.
- Člen | 485
Ahoj, tak jsem si zkoušel tu první aplikaci dle dokumentace a jaksi jsem se zasekl na kapitole „Presentery a šablony“
Dostanu se až sem: obrázek
Ale jakmile kliknu na položku v menu, tak mi to hodí chybu:
„Argument 1 passed to Todo\Repository::findBy() must be an array, string given, called in C:\Program Files (x86)\VertrigoServ\www\pokus_nette\app\presenters\TaskPresenter.php on line 18 and defined“
a označený řádek: „public function findBy(array $by) {“
Co s tím? Zatím kontroluju obsah mých php s tím, co je na githubu, ale zdá se, že mám vše stejné…
EDIT:
Už to funguje-doplnit do Repository.php:
public function find($id) {
return $this->getTable()->get($id);
}
Editoval n.u.r.v. (10. 6. 2013 11:43)
- Filip Procházka
- Moderator | 4668
Šaman napsal(a):
Přehlednost? Zařazení do namespace?
Funkce jde zařadit do namespace a nepotřebuješ k tomu třídu.
Co, až těch funkcí bude víc, budou se dělit do několika souborů, nebo bys je nechal v jednom přerostlém souboru?
Jasně, člověka co píše procedurálně tohle stejně trápit nebude.
A dobrý návyk do budoucna? Pomalé seznamování se s OOP na nejjednodušším příkladu?
S OOP? To je vtip? To že naflákáš funkce do tříd nemá s OOP absolutně nic společného.
Samozřejmě se dá programovat procedurálně. Dá se to i míchat s OOP, ale když už používám objektový framework, objektovou architekturu, tak by mě spíš zajímalo proč vytvářet neobjektové PHP scripty. Vždyť definice třídy zabere několik řádků a vejde se do ní spousta funkcí.
Dle mého je daleko efektivnější když zůstane u svých funkcí a postupně se bude učit OOP. Alespoň nepodlehne mylné představě „funkce je ve třídě = dělám OOP“.
- n.u.r.v.
- Člen | 485
Tak nevím, asi je nette na mě moc…: zkusil jsem si udělat vlastní autentifikátor, ale jaksi se nedokážu připojit k databázi…
V config.neon mám toto:
nette:
application:
errorPresenter: Error
database:
dsn: 'mysql:host=localhost;dbname=pokus_nette'
user: uzivatel
password: heslo
session:
expiration: 14 days
services:
authenticator:
class: Authenticator
arguments: [@database]
database:
class: Nette\Database\Connection
arguments: [localhost, uzivatel, heslo]
Ale co pak? Nepřišel jsem na to, co předat v „new Authenticator()“:
$overeni = new Authenticator();
$data=array();
$data["email"] = "email@email.cz";
$data["heslo"]="1234";
$overeni->authenticate($data);
Díky…
- James_Scott
- Člen | 55
n.u.r.v. napsal(a):
Ok, zkusil jsem použít php ze složky Nette-minified, ale nevím, jak spustit a nastavit laděnku a logování?
Co vše ještě musím zkopírovat?Díky…
- n.u.r.v.
- Člen | 485
jj, to jsem zkoušel…dostal jsem se skoro na konec a pak to přestalo fungovat – i když jsem zkopíroval z githubu všechny zdrojáky…
Stejně jsem z toho „tutorialu“ nepobral jak např. udělat aby se při otevření úvodní stránky zobrazil formulář a hlavně jak pak provést jeho zpracování a přihlášení uživatele…
Budu to tedy dělat postaru a z nette použiji možná to generování formulářů a laděnku…
- n.u.r.v.
- Člen | 485
Ok, zkusil jsem znova „tutorial“…trochu už se v tom začínám orientovat, jen mi nejsou jasné následující dvě věci:
- v config.neon je „položka“ „services:“ proč jsem v tutorialu musel pod services vkládat ty repozitáře?
- jak se přiřadil k homepagepresenter-u.php soubor default.latte? To jenom stačí, aby default.latte byl ve složce „homepage“, nebo se cesta k latte musí někde nastavit?
Díky
- David Matějka
- Moderator | 6445
1. do sekce services zapisujes sluzby dostupne v depedency injection
containeru. viz https://doc.nette.org/…introduction
sluzba takto definovana je potom pristupna v presenteru, v dalsich sluzbach
atd.
pr.
definujes si UserRepository
class UserRepository
{
public function insert()
//....
}
v configu ji registrujes jako sluzbu
services:
userRepository: UserRepository #nazevSluzby: nazevTridy
a kdyz budes chtit v presenteru repository pouzit, staci napsat
class FooPresenter extends BasePresenter
{
protected $userRepository;
public function injectUserRepository(UserRepository $userRepository)
{
$this->userRepository = $userRepository;
}
public function actionDefault()
{
$this->userRepository->....;
}
}
nette vidi metodu zacinajici slovem inject a vidi, ze obsahuje parametr s typehintem UserRepository, koukne do DI containeru a zjisti, ze je tam takto definovana sluzba a injectne ji do presenteru, kde ji muzes pouzivat
stejne tak UserRepository muze mit zavislost napr. na Nette\Database\Connection. treba takovyhle konstruktor:
public function __construct(Nette\Database\Connection $connection)
{
$this->connection = $connection;
}
a tim, ze UserRepository mas registrovano jako sluzbu a tim, ze Connection je take registrovano jako sluzba (o to se postara nette samo kdyz konfigurujes databazi), tak nette provede tzv. autowiring, tedy doplni pozadovane zavislosti
2. ano, takhle to staci. v presenteru jsou metody formatTemplateFiles(), kterym muzes tuto strukturu zmenit, ale pokud vytvoris sablonu v app/templates/NazevPresenteru/nazevAkce.latte tak to bude fungovat
Editoval matej21 (11. 6. 2013 15:55)
- Glottis
- Člen | 129
n.u.r.v. napsal(a):
Ok, zkusil jsem znova „tutorial“…trochu už se v tom začínám orientovat, jen mi nejsou jasné následující dvě věci:
- v config.neon je „položka“ „services:“ proč jsem v tutorialu musel pod services vkládat ty repozitáře?
protoze tu sluzbu pak pouzivas v presenteru a nete ti ji tam vstrikne (DI) pres construktor, pokud to napises tak jak v tutorialu
<?php
// upravíme konstruktor
public function __construct(Todo\UserRepository $repository)
{
$this->repository = $repository;
}
?>
- jak se přiřadil k homepagepresenter-u.php soubor default.latte? To jenom stačí, aby default.latte byl ve složce „homepage“, nebo se cesta k latte musí někde nastavit?
presne tak, stacijen aby tam byl (existuje totiz akce default – metoda renderDefault). tahle konvence svazuje sablonu s akci presenteru. kdyz budes mit metodu/akci renderEdit nette se pokusi nacist edit.latte ve slozce daneho presenteru
Díky
edit: to jsme se krasne zduplikovali :/
Editoval Glottis (11. 6. 2013 15:57)
- n.u.r.v.
- Člen | 485
už se tím prokousávám, jen jsem se zasekl u přihlašování – když jsem dle kapitoly „přihlašování uživatelů – tutorial“ udělal vše až po nadpis „Výpis úkolů uživatele“, tak přestala aplikace fungovat a laděnka vypisuje v BasePresenter chybu:
Fatal Error
Call to a member function findAll() on a non-object:
public function beforeRender() {
$this->template->lists = $this->listRepository->findAll()->order('title ASC');
}
co s tím?díky…
edit:
Když ten řádek zakomentuju, tak se přihlašovací form zobrazí, ale při jeho odeslání to hodí další chybu v Authenticator:
Fatal Error
Call to a member function findByName() on a non-object:
public function authenticate(array $credentials) {
list($username, $password) = $credentials;
$row = $this->userRepository->findByName($username);
...
Editoval n.u.r.v. (12. 6. 2013 9:50)
- jiri.pudil
- Nette Blogger | 1032
A jakým způsobem si do těch tříd předáváš ony závislosti? Jinými
slovy, kde plníš $this->(list|user)Repository
?
- n.u.r.v.
- Člen | 485
No v SignPresenter se vygeneruje přihlašovací formulář – to funguje, když zakomentuju v Basepresenter toto:
public function beforeRender() {
$this->template->lists = $this->listRepository->findAll()->order('title ASC');
}
Pak je v SignPresenter metoda pro zpracování formuláře:
public function signInFormSubmitted(Form $form) {
try {
$user = $this->getUser();
$values = $form->getValues();
if ($values->persistent) {
$user->setExpiration('+30 days', FALSE);
}
$user->login($values->username, $values->password);
$this->flashMessage('Přihlášení bylo úspěšné.', 'success');
$this->redirect('Homepage:');
} catch (NS\AuthenticationException $e) {
$form->addError('Neplatné uživatelské jméno nebo heslo.');
}
}
Takže asi toto:
$user->login($values->username, $values->password);
jen nevím, co dělá toto:
$user = $this->getUser();
- ViPEr*CZ*
- Člen | 818
Nevíte to nebo si chcete nechat raději poradit.
Logicky co by to mohlo znamenat: $user = $this->getUser();
Co je asi v this… no to by jste měl vědět… bude to instance na nějaký
objekt… co takhle objekt, ve kterém to this volám? Super… jdu do
dokumentace API a hledám metodu getUser() daného objektu. A ejhle…
zjišťuji, že ta metoda vrací instanci Nette\Security\User.
Jak prosté.
Editoval ViPEr*CZ* (12. 6. 2013 11:04)
- vitkutny
- Člen | 73
n.u.r.v. napsal(a):
jo, to musím zjistit – dělám to dle postupu v tutorialu – krok za krokem…čekal jsem, že to tam bude správně…
nejsi sám kdo to čekal, taky jsem s tím měl problémy, ale tak v dokumentaci je toho dost a to nejde jen tak rychle upravovat s každou verzí
Edit: mě pomohlo si prohlížet kód Nette\Quickstart na githubu, třeba ti to taky pomůže
Editoval vitkutny (12. 6. 2013 12:19)
- n.u.r.v.
- Člen | 485
ViPErCZ napsal(a):
Nevíte to nebo si chcete nechat raději poradit.
Logicky co by to mohlo znamenat: $user = $this->getUser();
Co je asi v this… no to by jste měl vědět… bude to instance na nějaký objekt… co takhle objekt, ve kterém to this volám? Super… jdu do dokumentace API a hledám metodu getUser() daného objektu. A ejhle… zjišťuji, že ta metoda vrací instanci Nette\Security\User. Jak prosté.
JJ, to jsem zjistil pár minut po té, co jsem to sem napsal… :-)
- Etch
- Člen | 403
Ondřej Brejla napsal(a):
Za pár dní vyjde 7.4 beta, která bude obsahovat nativní Nette support.
Minimálně v aktuální DEV verzi NetBeans mě poněkud „štve“, že pokud se v .latte definují nějaké CSS styly
<style type="text/css">
body { color: #FFF; }
</style>
tak NetBeans okamžitě začne řvát:
Unexpected token WS found
Unexpected token SEMI found
Unexpected token IDENT found
Ne že by to byl až tak velký problém, ale minimálně mě ten „červenej vykřičník“ u těch řádků znervózňuje. :)
Editoval Etch (14. 6. 2013 6:48)
- n.u.r.v.
- Člen | 485
JJ, taky mi to vadí… Jo a netbeans mi také při každém zakládání projektu s nette (když zaškrtnu možnost „Copy nette Framewor source files to the new project?“) vyhodí chybu: "":http://statistics.netbeans.org/…exception.do?…
Ale projekt lze vytvořit, když to odkliknu…
- Ondřej Brejla
- Člen | 746
Etch napsal(a):
<style type="text/css"> body { color: #FFF; } </style>
Odzkoušeno v dnešním buildu a žádný error nevidím (imho to ani nebylo latte issue…).
Product Version: NetBeans IDE Dev (Build 20130617–2dd7e935b9bb)
Java: 1.7.0_21; Java HotSpot™ Client VM 23.21-b01
Runtime: Java™ SE Runtime Environment 1.7.0_21-b11
System: Linux version 3.8.0–23-generic running on i386; UTF-8; cs_CZ (nb)
n.u.r.v. napsal(a):
…
To se ke mně ještě nedostalo, kouknu na to. Jinak prosím, reportujte bugy do Bugzilly, NE sem. Zaprvé sem vůbec nepatří a zadruhé nemám tolik času zkoumat všechny posty. Díky.
- Etch
- Člen | 403
Ondřej Brejla napsal(a):
Odzkoušeno v dnešním buildu a žádný error nevidím (imho to ani nebylo latte issue…).
Dnešní build:
Product Version: NetBeans IDE Dev (Build
nbms-and-javadoc-11138-on-20130617)
Java: 1.7.0_21; Java HotSpot™ 64-Bit Server VM 23.21-b01
Runtime: Java™ SE Runtime Environment 1.7.0_21-b11
System: Windows 7 version 6.1 running on amd64; Cp1250; cs_CZ (nb)
Pro jistotu ti to pošlu i do Bugzilly, ale je nutno říci, že ono se to projevuje dost záhadně.
Editoval Etch (17. 6. 2013 12:08)
- n.u.r.v.
- Člen | 485
Ahoj, ještě potřebuji nakopnout u tohoto problému:
Mám několik xxxRepository.php a teď jsem chtěl vytvořit repository pro zapisování do DBS do LOGu:
Takže
LogRepository:
<?php
namespace Todo;
use Nette;
class LogRepository extends Repository {
private $datum;
protected function startup() {
parent::startup();
}
public function zapis_log($udalost) {
$this->datum = Date("YmdHis", Time());
$data = array("Datum" => $this->datum, "Udalost" => $udalost,atd...);
$zapis = $this->insert("log", $data);
}
Ale zatím jsem nepřišel na to, jak využívat tuto metodu (zapis_log) v jiných repozitářích. Když jsem chtěl udělat toto:
<?php
namespace Todo;
use Nette;
class PokusRepository extends Repository {
private $logRepository;
protected function startup() {
parent::startup();
//$this->logRepository = $this->context->logRepository;
}
public function nejaka_metoda() {
...
...
...
$this->logRepository->zapis_log("xxx");
...
}
}
Tak to hodí chybu „Call to a member function zapis_log() on a non-object“
Pozn: V config.neon mám repository „zaregistrované“ jako „services“ (dle quickstart)
Díky za radu…
P.S.: Jediné, co mě zatím funguje: dát metodu zapis_log() do hlavního Repository.php
- Glottis
- Člen | 129
podobne jako to je tady
services:
database:
class: DibiConnection
create: dibi::connect(%database%)
run: true
addresses: \App\AddressBook\Addresses(@database, 'address_book')
invoices: \App\Invoice\Invoices(@database, 'invoice')
a ty sluzby (repo) muzou pak mit neco jako
/** @var \DibiConnection */
protected $db;
/** @var \Nette\Utils\Strings */
protected $table;
public function __construct(\DibiConnection $connection, $table) {
$this->db = $connection;
$this->table = $table;
}
- Etch
- Člen | 403
Zhruba nějak takto:
abstract class Repository extends Nette\Object{
/** @var Nette\Database\Connection */
protected $connection;
protected $log;
public function __construct(Nette\Database\Connection $db, \Todo\LogRepository $log){
$this->connection = $db;
$this->log = $log;
}
}
- n.u.r.v.
- Člen | 485
No v Basepresenteru mám vytvořenou session:
$uzivatel = $this->getSession('uzivatel'); //pristup do session
A do ní vkládám nějaká data:
např
$uzivatel->jmeno="něco"
A teď se potřebuji dostat do té session v LogRepository, tak jsem dal:
$uzivatel = $this->getSession('uzivatel');
ale hodilo to chybu
A teď jsem zjistil, že taky nejde např. toto:
$this->getUser()->isLoggedIn()
EDIT:
Už to asi jde, musím dát do konstruktoru Nette\Http\Session $sess…
Editoval n.u.r.v. (20. 6. 2013 14:34)
- ViPEr*CZ*
- Člen | 818
Zřejmě chcete použít metodu z Presenteru (https://api.nette.org/…esenter.html#…)… alias pro metodu getSection z Nette\Http\Session. No je to opět základ… předejte si tam tu závyslost na Nette\Http\Session.
n.u.r.v. napsal(a):
Hups, teď jsem ale zjistil, že se nedostanu na session v LogRepository:
Když dám:
$uzivatel = $this->getSession('uzivatel'); //pristup do session
Tak to hodí chybu „Call to undefined method Todo\LogRepository::getSession()“
- n.u.r.v.
- Člen | 485
Mno, vše funguje, takže se přesunu na další problém:
- Mám stránku (presenter), kde může admin vybrat uživatele, kterého chce editovat (formulář se selectem) – to mám
- ale teď bych po vybrání a submitu v prvním formuláři potřeboval vykreslit druhý formulář, který bude mít vyplněny data z dbs a to je problém – když dám do toho mého presenteru dvakrát metodu „createComponentFormVyber“ a „createComponentFormUzivatel“, a do latte dám „{control formVyber}“ a „{control formUzivatel}“, tak mi to vykreslí oba formuláře naráz, takže bych se chtěl zeptat, jak se to řeší…
Napadají mě dva způsoby, ale nevím, který je lepší:
- Po odeslání formuláře vykreslit druhý v nějakém repositáři (ale nevím co dám do latte)
- V presenteru mít výše uvedené metody pro vykreslení obou formulářů a při odeslání prvního formuláře se ten druhý vykreslí v jiném latte, ale nevím, zda to tak jde…
- EDIT – ještě mě napadlo, že ten druhý formulář bude velice podobný formuláři, který používám k registraci uživatele, takže možná bych mohl po výběru uživatele v prvním formu přesměrovat na tu registraci a předat parametr, že se jedná o editaci, pak dát u vykreslení formu „if(editace){vyplnit form}“
- jiný způsob?
Díky za radu…
Editoval n.u.r.v. (21. 6. 2013 10:01)
- ViPEr*CZ*
- Člen | 818
Nikdy nevíte kolik jich tam přibude. Nikdy nevíte, jestli se to nepoužije někde jinde, kde bude více uživatelů. Furt to je lepší než selectbox a dva formuláře. ;-)
n.u.r.v. napsal(a):
Ou, to je hustý – vidím, že mám na víkend co studovat…
Edit, jen jestli to řešit takto, když tam bude jen pár uživatelů (max 4 odhaduji)
- n.u.r.v.
- Člen | 485
Ahoj, jsem zase tu – mám problém s přihlášením uživatele:
– ve Firefoxu, v Opeře, v Chrome fungujhe vše bez problémů, ale v IE10 login nejde – když vyplním formulář pro login a odešlu ho, vrátí mě to zpět na přihlašovací form, ale žádná hláška se neukáže – nevíte na co se zaměřit-kde může být problém? Díky
Edit: Když dám do formuláře chybné přihlašovací údaje, tak to chybovou hlášku ukáže…
Editoval n.u.r.v. (24. 6. 2013 14:45)