Vkladanie pola do selectu
- Tabetha
- Člen | 140
Ahoj,
neviem či tu niekto toto riešil alebo nie a po pravde pri hladaní som nič
nenašiel.
Tak by som sa rád spýtal…
mám štruktúru
…\app
\forms
\CompanyForm.php (továrnička na základnú formu formulára na
registráciu)
\models
\conf.php (registrované ako služba)
v conf.php mám
public $krajiny = array(
'AFG' => 'Afghanistan',
'ALB' => 'Albania',
'ALG' => 'Algeria',
'ANG' => 'Angola',
'ARA' => 'Arab Federation',
'ARG' => 'Argentina',
'ARM' => 'Armenia',
'AST' => 'Australia',
);
a v CompanyForm.php mám select
$form = new NAppForm();
$form->addSelect('krajina', 'Krajina: ', /* tu potrebujem dostať array krajín */);
a moja otázka znie…viete mi poradiť ako dostať tie údaju do CompanyForm.php z conf.php?
Dakujem
- Jan Endel
- Člen | 1016
V podstatě s využitím dependency injection nevím jak je ten formulář psaný, ale pokud se selectbox „krajiny“ zobrazuje v každém případě a bez nich ten formulář je k ničemu, pak bych volil cestu takzvaného construct injection ->
class CompanyForm extends ...
{
private $countries;
public function __construct(array $countries)
{
parent::construct();
$this->countries = $countries;
}
.....
function .....
{
....
$form->addSelect('country', 'Krajina: ', $this->countries);
}
}
- Tabetha
- Člen | 140
formulár mám písaný…toto riešenie je jediné čo mi funguje -.- takže som tam určite čosi zle urobil
class CompanyForm extends NAppForm
{
public function __construct(IContainer $parent = NULL, $name = NULL)
{
parent::__construct($parent, $name);
$registracne_udaje = $this->addContainer('registracne_udaje');
$registracne_udaje->addText('username', 'Registračný e-mail: ')
->setRequired('Zadajte registračný e-mail.')
->addCondition(NForm::FILLED)
->addRule(NForm::EMAIL, "Musí byť E-MAILová adresa");
$registracne_udaje->addPassword('password', 'Heslo: ')
->addRule(NForm::MIN_LENGTH, "Heslo musí mať najmenej %d znakov", 6)
->setRequired('Prosím zadajte heslo.');
$registracne_udaje->addPassword('password2', 'Zopakovať heslo: ')
->setRequired("Prosím zopakujte heslo.")
->addRule(NForm::EQUAL, "Heslá sa musia zhodovať!", $registracne_udaje['password']);
$this->addText('obch_meno', 'Obchodné meno: ');
$zakladne_udaje = $this->addContainer('zakladne_udaje');
$zakladne_udaje->addText('ico', 'IČO: ')
->addCondition(NForm::FILLED)
->addRule(NForm::MAX_LENGTH, 'Maximálna dĺžka %d znakov', 16);
$zakladne_udaje->addText('dic', 'DIČ: ');
$zakladne_udaje->addText('icdph', 'IČ DPH: ');
$zakladne_udaje->addRadioList('typ_spolocnosti', 'Typ spoločnosti: ', $this->typ_osoby);
$adresne_udaje = $this->addContainer('adresne_udaje');
$adresne_udaje->addText('ulica', 'Ulica + číslo: ');
$adresne_udaje->addText('psc', 'PSČ: ')
->addCondition(NForm::FILLED)
->addRule(NForm::PATTERN, 'Musí byť PSČ', '.*[0-9].*');
$adresne_udaje->addText('mesto', 'Mesto: ');
$adresne_udaje->addSelect('krajina', 'Krajina: ', $this->krajiny);
$kontaktne_udaje = $this->addContainer('kontaktne_udaje');
$kontaktne_udaje->addText('telefon', 'Telefón: ');
$kontaktne_udaje->addText('mobil', 'Mobilné číslo: ')
->addCondition(NForm::FILLED)
->addRule(NForm::PATTERN, 'Musí byť číslo.', '.*[0-9].*');
$kontaktne_udaje->addText('fax', 'Fax: ');
$kontaktna_osoba = $this->addContainer('kontaktna_osoba');
$kontaktna_osoba->addSelect('titul_preffix', 'Titul pred menom', $this->preffixované_tituly);
$kontaktna_osoba->addText('meno_osoby', 'Meno: ');
$kontaktna_osoba->addText('priezvisko_osoby', 'Priezvisko: ');
$kontaktna_osoba->addSelect('titul_suffix', 'Titul za menom: ', $this->suffixované_tituly);
$this->addCheckbox('obch_podmienky', 'Obchodné podmienky')
->setRequired('Je potrebné súhlasiť s obchodnými podmienkami');
$this->addSubmit('potvrdit', 'Potvrdiť');
$this->addProtection('Vypršal časový limit');
$this['adresne_udaje']->setDefaults(array(
'krajina' => 'SVK',
));
}
public $krajiny = array(
'AFG' => 'Afghanistan',
'ALB' => 'Albania',
'ALG' => 'Algeria',
'ANG' => 'Angola',
'ARA' => 'Arab Federation',
'ARG' => 'Argentina',
'ARM' => 'Armenia',
'AST' => 'Australia',
);
}
- Jan Endel
- Člen | 1016
Jak jsem řekl, přes konstruktor ho tam vstříknout, jenom doplním, že by se instance třídy vytvářela takto:
protected function createComponentCompanyForm($parent, $name)
{
$form = new CompanyForm($parent, $name, $this->context->params['countries']);
return $form;
}
pokud tedy by ty counties byly v konfiguráku.
- vvoody
- Člen | 910
To by bol asi hodne dlhy konfigurak :). Predpokladam, ze tam nema len krajiny zacinajuce na A, sice myslim ze sa da spravit oddeleny konfigurak, ktory by len includol, ale ono to neni moc pekne cpat take udaje do konfigu.
Jednoducho si sprav z toho pola triedu – model
class Krajiny{
private $krajiny = array(
'AFG' => 'Afghanistan',
'ALB' => 'Albania',
'ALG' => 'Algeria',
'ANG' => 'Angola',
'ARA' => 'Arab Federation',
'ARG' => 'Argentina',
'ARM' => 'Armenia',
'AST' => 'Australia'
);
public funcion getKrajiny(){
return $this->krajiny;
}
}
ktory zadefinujes v configu ako sluzbu, ktoru mozes predat tvojmu formularu.
Editoval vvoody (5. 5. 2012 22:45)
- Tabetha
- Člen | 140
dobre díky za rady… :) v tých krajín je A-Z ale dávať to sem by bolo asi trochu dlhé :D …v configu je to momentálne preto, lebo som ešte neriešil získavanie automaticky IP a následne krajiny z ktorej je pripojené cez GEOIP…čo je v DB tabuľka takže to pôjde v neskoršej fáze cez nu, ale dovtedy to mám v conf.php kvôli tomu aby boli takéto veci pokope :)
a ešte raz díky za váš čas a rady