- 2008-04-19 (Sat) 7:00
- Zend_Form
application/bootstrap.php with the following content.Please modify
yourBaseUrl properly.
<?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.
[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.
CREATE TABLE users ( id integer AUTO_INCREMENT NOT NULL PRIMARY KEY, username varchar(20) NOT NULL, password varchar(20) NOT NULL ); 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 );
application/models/Users.php with the following content.
<?php require_once 'Zend/Db/Table/Abstract.php'; require_once 'Zend/Form.php'; class Users extends Zend_Db_Table_Abstract { protected $_name = 'users'; protected $_dependentTables = array('Profiles'); static public function getForm() { $form = new Zend_Form(); $username = $form->createElement('text', 'username'); $username->setLabel('Account Name') ->setRequired(true) ->addFilter('stringTrim') ->addValidator('stringLength', false, array(1,20)); $password = $form->createElement('password', 'password'); $password->setLabel('Password') ->setRequired(true) ->addFilter('stringTrim') ->addValidator('stringLength', false, array(1,20)); $form->addElements(array( $username, $password )); return $form; } }
Create the file application/models/Profiles.php with the following content.
<?php require_once 'Zend/Db/Table/Abstract.php'; require_once 'Zend/Form.php'; class Profiles extends Zend_Db_Table_Abstract { protected $_name = 'profiles'; protected $_referenceMap = array( 'Account' => array( 'columns' => 'user_id', 'refTableClass' => 'Users', 'refColumns' => 'id' ) ); static 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; } }
application/constorllers/ComputerController.php with the following content.
<?php require_once 'Zend/Controller/Action.php'; require_once APP_BASE . '/models/Users.php'; require_once APP_BASE . '/models/Profiles.php'; require_once 'My/Form/MultiPage.php'; class IndexController extends Zend_Controller_Action { protected $_user_id = 1; public function preDispatch() { $this->view->baseUrl = $this->_request->getBaseUrl(); } public function getForm() { $form = new My_Form_MultiPage('UserProfileForm'); $form->addForm('Users', Users::getForm()); $form->addForm('Profiles', Profiles::getForm()); return $form; } public function indexAction() { $this->_forward('list'); } public function listAction() { $users = new Users(); $userlist = $users->fetchAll(); $this->view->userlist = $userlist; } public function viewAction() { $users = new Users(); if (isset($_GET['id']) && intval($_GET['id'])) { $user = $users->find(intval($_GET['id']))->current(); if ($user) { $profile = $user->findProfiles()->current(); if ($profile) { $this->view->profile = $profile->toArray(); } $this->view->user = $user->toArray(); } } } public function addAction() { $action = $this->_request->getBaseUrl() . '/index/add'; $form = $this->getForm(); if ($this->getRequest()->isPost()) { if (isset($_POST['next']) && $form->isValid($_POST)) { if ($form->isConfirm()) { // confirm values $values = $form->getValues(); $this->view->user = $values['Users']; $this->view->profile = $values['Profiles']; $this->view->form = $form->prepareForm($action, 'add'); return $this->render('confirm'); } } else if (isset($_POST['add'])) { // save & finish $values = $form->getValues(); $userValues = $values['Users']; $profileValues = $values['Profiles']; $form->clear(); $users = new Users(); $user = $users->createRow($userValues); $user_id = $user->save(); $profiles = new Profiles(); $profileValues['user_id'] = $user_id; $profile = $profiles->createRow($profileValues); $profile->save(); return $this->render('finish'); } else if (isset($_POST['back'])) { $form->back(); } else if (isset($_POST['cancel'])) { $form->clear(); return $this->_forward('list'); } } $this->view->form = $form->prepareForm($action, 'next'); $this->view->title = $form->getCurrentFormName(); } }
application/views/scripts/computer/list.phtml with the following content.
<h1><?= $this->translate('User List') ?></h1> <a href="<?=$this->url(array('action'=>'add'))?>"> <?= $this->translate('Add User') ?></a> <table> <tr> <th><?= $this->translate('username') ?></th> <th><?= $this->translate('action') ?></th> </tr> <?php foreach($this->userlist as $user) : ?> <tr> <td><?= $this->escape($user->username) ?></td> <td><a href="<?=$this->url(array('action'=>'view')) . '?id=' . $user->id?>"> <?= $this->translate('View') ?></a></td> </tr> <?php endforeach; ?> </table>
Create the file application/views/scripts/computer/view.phtml with the following content.
<h1><?= $this->translate('User Detail') ?></h1> <a href="<?=$this->url(array('action'=>'list'))?>"> <?= $this->translate('Back') ?></a> <h2><?= $this->translate('User Account') ?></h2> <?php if (!$this->user) : ?> <span><?= $this->translate('No User Account Found') ?></span> <?php else : ?> <dl> <?php foreach($this->user as $key => $value) : ?> <dt><?= $this->translate($key) ?></dt> <dd><?= $this->escape($value) ?></dd> <?php endforeach; ?> </dl> <?php endif; ?> <h2><?= $this->translate('User Profile') ?></h2> <?php if (!$this->profile) : ?> <span><?= $this->translate('No Profile Found') ?></span> <?php else : ?> <dl> <?php foreach($this->profile as $key => $value) : ?> <dt><?= $this->translate($key) ?></dt> <dd><?= $this->escape($value) ?></dd> <?php endforeach; ?> </dl> <?php endif; ?>
Create the file application/views/scripts/computer/add.phtml with the following content.
<h1><?= $this->translate($this->title)?></h1> <?= $this->form ?>
Create the file application/views/scripts/computer/confirm.phtml with the following content.
<h1><?= $this->translate('Add User') ?></h1> <h2><?= $this->translate('User Account') ?></h2> <?php if (!$this->user) : ?> <span><?= $this->translate('No User Account Found') ?></span> <?php else : ?> <dl> <?php foreach($this->user as $key => $value) : ?> <dt><?= $this->translate($key) ?></dt> <dd><?= $this->escape($value) ?></dd> <?php endforeach; ?> </dl> <?php endif; ?> <h2><?= $this->translate('User Profile') ?></h2> <?php if (!$this->profile) : ?> <span><?= $this->translate('No Profile Found') ?></span> <?php else : ?> <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/computer/finish.phtml with the following content.
<h1><?=$this->translate('User Added')?></h1> <a href="<?=$this->url(array('action'=>'list'))?>"> <?= $this->translate('Back') ?></a>
| Date | Content |
|---|---|
| 2008/4/19 | Published |
| 2008/4/26 | The controller was modified for modification of My_Form_MultiPage. Views were modified to use URL helper. |
- Newer: Creating Multi Page Add/Update/Delete/View Action Controller
- Older: Creating Multi Page Form that extends Zend_Form
Comments:2
- Patrick 09-08-25 (Tue) 8:21
-
I am having these errors when I run you sample:
Strict Standards: Declaration of Mylib_Form_MultiPage::setDefaults() should be compatible with that of Zend_Form::setDefaults() in C:\Inetpub\wwwroot\library\Mylib\Form\MultiPage.php on line 202
Strict Standards: Declaration of Mylib_Controller_MultiPage::_executeFind() should be compatible with that of Mylib_Controller_Simple::_executeFind() in C:\Inetpub\wwwroot\library\Mylib\Controller\MultiPage.php on line 6
Notice: Undefined index: Profiles in C:\Inetpub\wwwroot\library\Mylib\Form\MultiPage.php on line 37
I just want this same functionality on the demo page. Maybe I downloaded the wrong codes.
Any assistance would be appreciated.
Thanks
- oplabo 09-08-26 (Wed) 23:13
-
I’m sorry, but I created the program with the following php configuration.
error_reporting = E_ALL & ~E_NOTICEIf you can change your php.ini, please change it.
Trackbacks:0
- Trackback URL for this entry
- http://www.oplabo.com/article/27/trackback
- Listed below are links to weblogs that reference
- Using Multi Page Form that extends Zend_Form from Open Programming Laboratory