public function run($locator) { $request = $locator->get('Request'); if (!$this->state_name) { $this->state_name = $this->state_name_init; } // register states managed by this controller if (is_array($this->state_handlers)) { foreach (array_keys($this->state_handlers) as $state) { $this->addState(new A_Controller_App_State($state, $this->state_handlers[$state])); } } // register register transitions with from state, to states and rule $this->addTransition(new A_Controller_App_Transition('init', 'submit', new A_Rule_Notnull($this->submit_param_name, 'submit'))); $this->addTransition(new A_Controller_App_Transition('submit', 'done', $this)); $this->processRequest($request); return parent::run($locator); }
function run($locator) { $request = $locator->get('Request'); $response = $locator->get('Response'); $response->setRenderer(new A_Template_Strreplace('templates/layout.html')); $number_rule = new A_Filter_Regexp('/[^0-9]/'); $letter_rule = new A_Filter_Regexp('/[^A-Z]/'); $param = new A_Controller_Input_Field('level'); $param->addFilter($number_rule); $this->addField($param); $param = new A_Controller_Input_Field('word'); $param->addFilter($letter_rule); $this->addField($param); $param = new A_Controller_Input_Field('guesses'); $param->addFilter($letter_rule); $this->addField($param); $param = new A_Controller_Input_Field('misses'); $param->addFilter($number_rule); $this->addField($param); $letter = new A_Controller_Input_Field('letter'); $letter->addFilter($letter_rule); $this->addField($letter); $this->processRequest($request); $game = new HangmanGame(); $locator->set('Game', $game); $game->word = $request->get('word'); $game->guesses = $request->get('guesses'); $game->misses = $request->get('misses'); $game->level = $request->get('level'); $game->guess($letter->value); $this->addState(new A_Controller_App_State('start', array(new StartView(), 'render'))); $this->addState(new A_Controller_App_State('game', array(new GameView(), 'render'))); $this->addState(new A_Controller_App_State('win', array(new WinView(), 'render'))); $this->addState(new A_Controller_App_State('lose', array(new LoseView(), 'render'))); $this->addTransition(new A_Controller_App_Transition('start', 'game', new A_Rule_Notnull('level', ''))); $this->addTransition(new A_Controller_App_Transition('start', 'lose', new A_Rule_Notnull('giveup', ''))); $this->addTransition(new A_Controller_App_Transition('game', 'lose', new LoseRule($game))); $this->addTransition(new A_Controller_App_Transition('game', 'win', new WinRule($game))); parent::run($locator); }