Controller - Verständnisfrage

Hallo,

ich habe eine Verständnisfrage zu Controllern.

  1. Meine URL wird aufgerufen, z.B.:

http://localhost/blog/suche/anzeigen/1

  1. Die Rule heißt demnach

'suche/anzeigen/<value:[0-9]>' => 'search/show',

  1. Die Action wird aufgerufen (hier nun meine Frage)
  • Wir nehmen an, wir benutzen keine Datenbank, wir greifen auf ein Array zu [0] => ‘Hallo’, [1] => ‘Bye’, etc.

  • Es soll eine Fehlermeldung ausgegeben werden

Folgender Aufruf, search heißt der Controller, gibt ein leeres Objekt zurück (nicht die übergebene Variable


public function actionShow ()

{

	$x = new search;

	echo "<pre>";

	print_r($x);

	echo "</pre>";

}


search Object

(

    [_validators:private] => 

    [_errors:private] => Array

        (

        )


    [_va:private] => 

    [_se:private] => 

    [_e:private] => 

    [_m:private] => 

)



Um auf die Variable zuzugreifen benutze ich folgende, vielleicht sehr unnützlichen Aufruf




<?php

public function actionShow ()

{

	$searchword = $_GET['value'];

	if ( $search->model()->checkSearchWord( $searchword ) )

	{

		$this->render('xxx', 'etc.');

	}

	else

	{

		throw .... <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/huh.gif' class='bbc_emoticon' alt='???' />? (eigene Fehlerseite eingebettet im Layout)

	}

}

?>



Folgende Verständnisfragen habe ich nun:

[list=1]

[*]Gibt es einen anderen Weg auf die URL - Parameter zuzugreifen?

[*]Ins Model gehören normalerweise doch nur Funktionen die auf die Datenbank zugreifen, oder dürfen / sollen dort auch Funktionen hinein geschrieben werden, mit denen man Strings modifiziert.

[*]Wie kann ich meine eigene Fehlerexception mit Code 404 erstellen, falls kein gültiger Wert übergeben wurde.

[/list]

Fragen zur Fehlerseite

[list=1]

[*]Wie leite ich auf eine eigene Fehlerseite mit dem Layout, wenn die Rule fehlschlägt

[*]Wie leite ich auf eine eigene Fehlerseite mit dem Layout, wenn im Controller etwas fehlschlägt

[/list]

eigene Fehlerseite:

http://www.yiiframework.com/doc/cookbook/47/

ich würde hier statt mycontroller den SiteController nehmen und eine actionError-Methode erstellen

wie man auf Request-Variablen zugreift:


$id = intval(Yii::app()->request->getParam('id', 0));

if(!$id) {

    throw new CHttpException(404, 'Page not found');

}

Funktionen, die Daten des Models manipulieren, gehören entweder ins Model oder in eigene Bibliothek ausgelagert.

Thema: ErrorHandling

Ich habe folgenden Code in meine main.php eingefügt




	'errorHandler'	=> array(

		'errorAction'	=> 'engine/error',

	),



Anschließend habe ich in der views/engine/error.php folgenden Code geschrieben




<?php $this->pageTitle= $error['code'] . " Ihre Eingabe ist ungültig"; ?>

<h2><?php echo $error['code'] ?> Seite existiert nicht.</h2>


Die von Ihnen aufgeforderter URL, <b><?php echo Url::getUrl() ;?></b>, konnte nicht aufgelöst werden.




Gründe



In meinen Engine-Controller habe ich folgende Action definiert




	public function actionError()

	{

		$error = Yii::app()->errorHandler->error;

		print_r(Yii::app()->request);

		if ($error)

		{

			$this->pageTitle = $error['code'] . " Seite konnte nicht aufgerufen werden. ";

			$this->render('error', array('error'=>$error));

		}

		else

			throw new CHttpException(404, 'Page not found.');

	}



Das Problem ist nun jedoch, dass egal welche falsche Seite ich aufrufe immer diese Error-Seite angezeigt wird.

Die Seite sollte jedoch nur aufgerufen werden, wenn ich den Engine Controller falsch aufrufe, sprich falsche Parameter eingegeben worden sind.