if / else v modelu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
radvis
Začátečník | 110
+
0
-

Ahoj, mohl by mi někdo prosím poradit jak bych mohl řešit situaci v modelu:

if(…){

}else → a zde potrebuju errorovou hlášku.

Díky za rady.

redhead
Člen | 1313
+
0
-

Cesty ně napadají dvě, ovšem model by neměl nic s výpisem chybových zpráv dělat takže:

  1. vyhazovat Exceptionu:
public function modelMethod()
{
	if(...)
		...
	else
		throw new BadRequestException;
}
//PRESENTER
//...
	try {
		$model->modelMethod();
	}
	catch(BadRequestException $e) {
		$this->flashMessage($e->message);
	}
//...
  1. 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)

radvis
Začátečník | 110
+
0
-

Mám, ale více podmínek.

Editoval radvis (2. 1. 2010 17:44)

Kenn
Člen | 110
+
0
-

Potom bych viděl jako lepší možnost použít 1. metodu :-)

A nebo si ukládat stav (bool) do proměnné a tu pak vracet podle potřeby.

o5
Člen | 416
+
0
-

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
+
0
-

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
+
0
-

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.
radvis
Začátečník | 110
+
0
-

A nemohl by jsi to prosím upravit?

Ondřej Mirtes
Člen | 1536
+
0
-

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);
	}

}
radvis
Začátečník | 110
+
0
-

Udělal jsem to podle toho posledního příkladu a nefunguje. Neudělá to nic jen zůstane input vyplněný.

Filip Procházka
Moderator | 4668
+
0
-

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)

radvis
Začátečník | 110
+
0
-

Už jsem to „hackl“ :D díky všem!

Honza Marek
Člen | 1664
+
0
-

Znáte někdo kvalitní učebnici programování pro začátečníky, kterou byste mohli radvisovi doporučit? :)

radvis
Začátečník | 110
+
0
-

Programováni v nette aby to bylo přesné:).

Ivorius
Nette Blogger | 119
+
0
-

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 ?