if / else v modelu
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- redhead
- Člen | 1313
Cesty ně napadají dvě, ovšem model by neměl nic s výpisem chybových zpráv dělat takže:
- vyhazovat Exceptionu:
public function modelMethod()
{
if(...)
...
else
throw new BadRequestException;
}
//PRESENTER
//...
try {
$model->modelMethod();
}
catch(BadRequestException $e) {
$this->flashMessage($e->message);
}
//...
- vracet boolean
public function modelMethod()
{
if(...)
...
return true;
else
return false;
}
//PRESENTER
//...
if(!$model->modelMethod())
$this->flashMessage($e->message);
Editoval redhead (2. 1. 2010 17:00)
- o5
- Člen | 416
resim to pres exception, jak psal redhead..
<?php
class MyException extends Exception
{
const ERROR_1 = 1;
const ERROR_2 = 2;
...
}
class MyModel extends BaseModel
{
if(...)
throw new MyException('Error 1', MyException::ERROR_1);
elseif(...)
throw new MyException('Error 2', MyException::ERROR_2);
else
...
}
?>
nebo lze (coz tedy nedelam)
<?php
class MyModel extends BaseModel
{
if(...)
return array ('result'=>false, 'error'=>1);
elseif(...)
return array ('result'=>false, 'error'=>2);
else
...
}
?>
Editoval o5 (2. 1. 2010 17:55)
- radvis
- Začátečník | 110
Stále mi to nefunguje
Presenter:
public function Error()
{
$error = new Zpravy;
if( $error->insert() === false )
$this->flashMessage( $error['error'], 'error' );
}
Model:
public function insert(array $data, $prezdivka = null)
{
$prezdivka = 3;
if(!empty($prezdivka)){
return array( false, 'error' => 'Chybova hlaska' );
}
}
A pořád nic ani error.
- Ondřej Mirtes
- Člen | 1536
To máš nějaký divný kód :o)
- Jak můžeš volat insert() bez parametru, když první je povinný?
- Kde se ti volá metoda „Error()“ ? (podle konvence mají metody začínat malým písmenem)
- v metodě insert nikdy nevracíš false, jen pole, jehož první hodnota je false.
- Ondřej Mirtes
- Člen | 1536
Odesílací metoda formuláře (předpokládám):
public function formSubmitted(AppForm $form) {
try {
$model = new SampleModel;
$model->insert($form->values);
$this->flashMessage('Úspěch!');
$this->redirect('this');
} catch (IOException $e) {
$form->addError($e->getMessage());
}
}
Model:
class SampleModel extends BaseModel {
public function insert(array $values) {
//priklad zjisteni chyby - nevim, co chces "validovat"
if ($values['nick'] == 'nick') { //zakazany nick
throw new IOException('Chybova hlaska.');
}
dibi::query('INSERT INTO [table]', $values);
}
}
- Filip Procházka
- Moderator | 4668
Protože ve formuláři přibyla chyba. IMHO by se měla vypsat pokud nepoužíváš vlastní templatu na formulář
Editoval HosipLan (3. 1. 2010 1:28)
- Honza Marek
- Člen | 1664
Znáte někdo kvalitní učebnici programování pro začátečníky, kterou byste mohli radvisovi doporučit? :)
- Ivorius
- Nette Blogger | 119
Ta by se mi také líbila – co kdyby někdo udělal nějaký podobný tutoriál pro nette – http://blackhole.sk/…v-php-part-2 ?