intro
The example to use Zend_Session and create confirmation screen is shown in this article. You can download the source code of this article from here.
1.Create bootstrap.php and config.ini
Create the file
Create the file
Please modify
In this article, we will use the following sql.
application/bootstrap.php
with the following content.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php set_include_path('../library' . PATH_SEPARATOR . get_include_path()); define('APP_BASE', '../application'); define('CONFIG_PATH', APP_BASE . '/config.ini'); require_once 'Zend/Controller/Front.php'; require_once 'Zend/Layout.php'; require_once 'Zend/Db.php'; require_once 'Zend/Config/Ini.php'; require_once 'Zend/Db/Table/Abstract.php'; $layout = Zend_Layout::startMvc(); //$layout->getView()->baseUrl = '/yourBaseUrl'; $config = new Zend_Config_Ini(CONFIG_PATH, 'staging'); $params = $config->database->params->toArray(); $params['options'][Zend_Db::CASE_FOLDING] = Zend_Db::CASE_LOWER; $dbAdapter = Zend_Db::factory($config->database->adapter, $params); Zend_Db_Table_Abstract::setDefaultAdapter($dbAdapter); Zend_Controller_Front::run(APP_BASE . '/controllers'); |
Create the file
application/config.ini
with the following content.Please modify
database.params.*
properly.
1 2 3 4 5 6 |
[staging] database.adapter = pdo_mysql database.params.host = localhost database.params.username = db_user database.params.password = db_password database.params.dbname = db_name |
In this article, we will use the following sql.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
CREATE TABLE profiles ( id integer auto_increment NOT NULL PRIMARY KEY, user_id integer NOT NULL, first_name varchar(100) NOT NULL, last_name varchar(100) NOT NULL, email varchar(200) NOT NULL, url varchar(200) NOT NULL ); INSERT INTO profiles (user_id, first_name, last_name, email, url) values (1, 'Myfirstname', 'Mylastname', 'my@emailaddress', 'http://myurl/my/page'); |
2.Create Model
Create the file
application/models/Profiles.php
with the following content.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<?php require_once 'Zend/Db/Table/Abstract.php'; require_once 'Zend/Form.php'; class Profiles extends Zend_Db_Table_Abstract { protected $_name = 'profiles'; public function getForm() { $form = new Zend_Form(); $first_name = $form->createElement('text', 'first_name'); $first_name->setLabel('First Name') ->setRequired(true) ->addFilter('stringTrim') ->addValidator('stringLength', false, array(1,100)); $last_name = $form->createElement('text', 'last_name'); $last_name->setLabel('Last Name') ->setRequired(true) ->addFilter('stringTrim') ->addValidator('stringLength', false, array(1,100)); $email = $form->createElement('text', 'email'); $email->setLabel('E-Mail') ->setRequired(true) ->addFilter('stringTrim') ->addValidator('emailAddress', false) ->addValidator('stringLength', false, array(1,200)); $url = $form->createElement('text', 'url'); $url->setLabel('URL') ->setRequired(false) ->addFilter('stringTrim') ->addValidator('stringLength', false, array(1,200)); $form->addElements(array( $first_name, $last_name, $email, $url )); return $form; } public function findByUserId($user_id) { $select = $this->select()->where('user_id = ?', $user_id); return $this->fetchAll($select); } } |
3.Create Controller
Create the file
application/constorllers/IndexController.php
with the following content.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
<?php require_once 'Zend/Controller/Action.php'; require_once 'Zend/Session/Namespace.php'; require_once APP_BASE . '/models/Profiles.php'; class IndexController extends Zend_Controller_Action { protected $_user_id = 1; protected function prepareForm($form, $label, $back) { $form->setAction($this->_request->getBaseUrl() . '/index/index') ->setMethod('post'); $submit = $form->createElement('submit', $label); $submit->setLabel($label); $form->addElement($submit); if ($back) { $back = $form->createElement('submit', 'back'); $back->setLabel('Back'); $form->addElement($back); } return $form; } public function indexAction() { // get default form values $session = new Zend_Session_Namespace('index'); $profiles = new Profiles(); $form = $profiles->getForm(); $label = 'confirm'; $back = false; if ($this->getRequest()->isPost()) { if (isset($_POST['confirm'])) { if ($form->isValid($_POST)) { // confirm $session->values = $form->getValues(); $this->view->profile = $form->getValues(); $form = new Zend_Form(); $label = 'save'; $back = true; } } else if (isset($_POST['save'])) { // save profile $row =$profiles->findByUserId($this->_user_id)->current(); if (!$row) { $row = $profiles->createRow(array('user_id' => $this->_user_id)); } $values = $session->values; $session->values = null; $row->setFromArray($values); $row->save(); return $this->render('finish'); } else if (isset($_POST['back'])) { // restore values if (isset($session->values)) { $form->setDefaults($session->values); $session->values = null; } } } else { // set default values $values = array(); $row =$profiles->findByUserId($this->_user_id)->current(); if (isset($session->values)) { $values = $session->values; } else if ($row) { $values = $row->toArray(); } $form->setDefaults($values); } $this->view->form = $this->prepareForm($form, $label, $back); } } |
4.Create View
Create the file
Create the file
application/views/scripts/index/index.phtml
with the following content.
1 2 3 4 5 6 7 8 9 10 |
<h1><?= $this->translate('Your Profile') ?></h1> <?php if ($this->profile) : ?> <dl> <?php foreach($this->profile as $key => $value) : ?> <dt><?= $this->translate($key) ?></dt> <dd><?= $this->escape($value) ?></dd> <?php endforeach; ?> </dl> <?php endif; ?> <?= $this->form ?> |
Create the file
application/views/scripts/index/finish.phtml
with the following content.
1 2 |
<h1><?=$this->translate('Profile Edited')?><h1> <a href="<?= $this->baseUrl?>/index/index"><?= $this->translate('Back') ?></a> |
5.Check
Access the web server and check the screen flow.
Next
I will extend this controller.
Hi,
I’m getting the error:
Fatal error: Call to a member function getMessage() on a non-object
on error.phtml
thanks
Sorry. I’ve modified error controller(please see history of Error Handling of Zend Framework).
I updated the source code of this article.
And I guess It’s 404 error.
Did you change properly baseUrl of bootstrap.php?
Thanks