zend形式给出错误

时间:2012-01-26 13:05:21

标签: zend-framework zend-form zend-form-element

我是ZF的新手。我已经创建了一个基本上使Form成为代码的函数

 require_once 'Zend/Form.php';
  function getLoginForm(){
$username = new Zend_Form_Element_Text('username');
$username->setLabel('Username:')
        ->setRequired(true);

$password = new Zend_Form_Element_Password('password');
$password->setLabel('Password:')
        ->setRequired(true);

$submit = new Zend_Form_Element_Submit('login');
$submit->setLabel('Login');

$loginForm = new Zend_Form();
$loginForm->setAction('/login/index/')
        ->setMethod('post')
        ->addElement($username)
        ->addElement($password)
        ->addElement($submit);
 return $loginForm;
}

这是错误

Fatal error: Class 'Zend_Form_Element_Text' not found in C:\xampp\htdocs\phoggi\application\controllers\LoginController.php on line 68

第68行指的是这一行

 $username = new Zend_Form_Element_Text('username');

此外,我如何为表单中的每个元素添加css类,以及如何添加我自己的错误消息 .plz获取一个元素并添加自定义错误消息和css class.Thanking你们所有人。 已编辑这是我的index.php

<?php
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', true);
$rootDir = dirname(dirname(__FILE__));
set_include_path($rootDir . '/library' . PATH_SEPARATOR . get_include_path());
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Registry.php';
require_once 'Zend/Paginator.php';
include_once 'Zend/Db/Adapter/Pdo/Mysql.php';
require_once 'Zend/View.php';
require_once 'Zend/Controller/Action/Helper/ViewRenderer.php';
$params = array('host'         => 'localhost',
        'username'  => 'root',
        'password'    => '',
        'dbname'        => 'xyz'
       );

     $DB      = new Zend_Db_Adapter_Pdo_Mysql($params);
       $DB->setFetchMode(Zend_Db::FETCH_OBJ);
     Zend_Registry::set('DB',$DB);

 $view = new Zend_View();
 $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
 $viewRenderer->setView($view);
 Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
 Zend_Controller_Front::run('../application/controllers');
 ?>

4 个答案:

答案 0 :(得分:1)

由于您的错误发生在'application \ controllers \ LoginController.php'中,您似乎正在运行Zend应用程序。如果是这样,您永远不需要调用require()或require_once()。 zend自动加载器将为您完成。

您的代码应该按原样运行。您是否正确地将框架设置为包含路径?在创建应用程序对象之前,index.php(Web根目录中的真实文件)应该调用set_include_path({zend的库here})。

答案 1 :(得分:1)

  

此外,我如何将css类添加到表单中的每个元素   和

当显示表单元素时,它们将具有id,并且该类将反映所需的设置。例如,这是股票Zend_Form_Element_Text:

<dt id="name-label"><label for="name" class="required">Page Name:</label></dt>
<dd id="name-element">
<input type="text" name="name" id="name" value="" size="40"></dd>
<dt id="headline-label"><label for="headline" class="required">Headline:</label></dt>

这种行为可以通过使用装饰器来改变,但我会让其他人解决这个问题。

  

还如何添加我自己的错误消息.plz采取一个元素并添加   自定义错误消息和css类。谢谢大家。

大多数Zend_Validation类允许您指定客户消息。

另一个例子:

$id = new Zend_Form_Element_Text('id');
        $id->setLabel('Employee Number:')
                 ->setOptions(array('size' => '6'))
                 ->setRequired(TRUE)
                 ->addValidator('regex', TRUE, array(
                     'pattern' => '/^[0-9]{6}$/',
                     'messages' => array(
                         Zend_Validate_Regex::INVALID => '\'%value\' is not a valid Employee Number.',
                         Zend_Validate_Regex::NOT_MATCH => '\'%value\' does not match, requires a 6 digit Employee Number'
                         )))
                 ->addFilter('Digits')
                 ->addFilter('HtmlEntities')
                 ->addFilter('StringTrim')
                 ->removeDecorator('HtmlTag');

答案 2 :(得分:1)

这是标准的index.php文件看起来像是由Zend_Tool版本1.11创建的:
    

// Define path to application directory
defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

这与application.ini一起是使Zend Framework工作所需的全部内容。

//application.ini

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0

;database setup
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = username
resources.db.params.password = password
resources.db.params.dbname = databasename

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

看起来你的index.php中的很多内容应该在你的application.ini或你的bootstrap.php中。我认为这就是你的自动加载器无法正常工作的原因。

//bootstrap.php

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

}

帮助自己并运行几个教程,这些教程将帮助您在几分钟内设置ZF应用程序。
Zend Framework Quickstart
Rob Allen's Zf 1.11 tutorial
您可以在一两个小时内完成这些工作,但它们将为ZF设置和基本功能提供坚实的基础。

答案 3 :(得分:0)

require_once 'Zend/Form/Element/Text.php';