【发布时间】:2012-02-24 14:28:21
【问题描述】:
我正在尝试使用 Zend_Form 呈现登录表单,我希望调用 www.site.com/login 或 www.site.com/account/login 来呈现它,但是一旦我完成了以下所有步骤我尝试从我的浏览器调用 /login 或 /account/login 我得到一个 HTTP 500(内部服务器错误).. 即使网站的其余部分运行良好。请帮我找出我错在哪里..
(请注意,我使用的是 Zend Framework 1.11)
(1)通过ZF创建模型
zf 创建模型FormLogin
(2)在application/models/FormLogin.php中编辑新创建的模型
class Application_Model_FormLogin extends Zend_Form
{
public function __construct($options = null)
{
parent::__construct($options);
$this->setName('login');
$this->setMethod('post'); // GET O POST
$this->setAction('/account/login'); // form action=[..]
$email = new Zend_Form_Element_Text('email');
$email->setAttrib('size', 35);
$pswd = new Zend_Form_Element_Password('pswd');
$pswd->setAttrib('size', 35);
$submit = new Zend_Form_Element_Submit('submit'); // submit button
$this->setDecorators( array( array('ViewScript', array('viewScript' => '_form_login.phtml'))));
$this->addElements(array($email, $pswd, $submit));
}
}
(3) 将 loginAction 添加到 Account 控制器
class AccountController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
}
public function indexAction()
{
}
public function loginAction()
{
$form = new Application_Model_FormLogin();
$this->view->form = $form;
}
}
(4) 在 application/views/scripts/account/login.phtml 创建视图
<?php echo $this->form; ?>
(5)在第(2)点创建setDecorators()调用的页面application/views/scripts/_form_login.phtml
<form id="login" action="<?php echo $this->element->getAction(); ?>"
method="<?php echo $this->element->getMethod(); ?>">
<p>
E-mail Address<br />
<?php echo $this->element->email; ?>
</p>
<p>
Password<br />
<?php echo $this->element->pswd; ?>
</p>
<p>
<?php echo $this->element->submit; ?>
</p>
</form>
(6) 这是我的 Bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
public function _initRoutes()
{
$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$route = new Zend_Controller_Router_Route_Static (
'login',
array('controller' => 'Account', 'action' => 'login')
);
$router->addRoute('login', $route);
$route = new Zend_Controller_Router_Route (
'games/asin/:asin/',
array('controller' => 'Games',
'action' => 'view',
'asin' => 'B000TG530M' // default value
)
);
$router->addRoute('game-asin-view', $route);
}
}
【问题讨论】:
-
我认为您不需要为默认模块的
controller/action定义任何路由。 -
即使我删除我的路线它也不起作用
-
它应该可以工作,正如错误所说,这是一个“内部服务器错误”,你的代码对我来说没有问题。
-
查看您的 Apache 错误日志以了解实际错误是什么
-
查看此答案以了解一种无需使用 viewscript 装饰器即可单独呈现表单元素的方法:stackoverflow.com/questions/7589603/…