Wohin Mit Logik Für Suchformular Im Header

Guten Tag

Ich habe in der Layout/Main.php ein Suchformular mit Yiibooster integriert. Diese ist nun in jeder view, da ja im Header hinterlegt, sichtbar.


<? $model = new Demo;?>

<?php $form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(

	'id'=>'searchForm',

	'type'=>'search',

	'htmlOptions'=>array('class'=>'well'),

)); ?>

<?php

Wo muss ich den Code für die Formularverarbeitung platzieren damit dieser in jedem Controller aufgerufen wird? Oder sollte ich das Formular auf jeder view und in jedem Controller integrieren?

Ich hoffe ich konnte mein Problem verständlich formulieren.

Gruss Beat




class MainController extends CController

{

  public function beforeAction($action)

  {

    //deine Formularverarbeitung

  }

}


class PostController extends MainController

{

  public function actionIndex()

  {

  }

}




Ich habe zur Zeit keinen MainController. Gehe davon aus, dass ich eine solche beforAction in jedem meiner Controller einbaue? oder ist das wie ein FrontController zu verstehen?

http://www.yiiframework.com/doc/api/1.1/CController/#beforeAction-detail

achja, vergiss das return true nicht

Genial!!! Funktioniert.

Ist es auch korrekt umgesetzt?

Layout/Main.php


	<? $model1 = new Demo;?>

	<?php $form = $this->beginWidget('bootstrap.widgets.TbActiveForm', array(

		'id'=>'searchForm',

		'type'=>'search',

		'htmlOptions'=>array('class'=>'well'),

		)); ?>

		<?php echo $form->textFieldRow($model1, 'suchen', array('class'=>'input-medium', 'prepend'=>'<i class="icon-search"></i>')); ?>	

		<?php $this->widget('bootstrap.widgets.TbButton', array('buttonType'=>'submit', 'label'=>'Go')); ?>

	<?php $this->endWidget(); ?>

TestController.php


<?php


class TetsController extends Controller {


	public function beforeAction($Action)  {

      

		$model1 = new Demo;

		

		if(isset($_POST['Demo'])) {

			$model1->attributes=$_POST['Demo'];

			echo $model1->suchen;

		}

	return true;

	}

 }  

in dem du alle deine controller von einem controller ableitest, der beforeAction() implementiert, musst du beforeAction() nicht in jedem deiner controller definieren, das nennt sich vererbung

für mich ist ein FrontController die index.php, also CWebApplication

du kannst das Formular aber auch in einem Widget in deinem Layout platzieren

ist glaub ich die bessere Wahl

Super danke, dann ist mir der Begriff Vererbung nun auch endlich klar

Ich seh das etwas anders: Nur weil das Suchformular überall zu sehen sein soll, heißt das doch noch lange nicht, dass auch die zugehörige Action in jedem Controller vorhanden sein muss. Ich würde das Suchformular immer zur selben Action submitten lassen. Das Suchergebnis soll doch vermutlich auch immer gleich aussehen. Da tust du dich mit einer dedizierten Action dafür doch wesentlich leichter.