【问题标题】:Zend Form instantiation failing silently in white screen of deathZend Form 实例化在白屏死机中静默失败
【发布时间】:2010-12-05 05:14:02
【问题描述】:

Zend 新手尝试配置和使用 Zend_Form。

仅作记录,我使用的是 Zend Framework 版本:在 Win XP 上运行 Apache 2.something 的 1.11.1。我正在一个网站上工作,该网站大部分都可以正常工作。 (别人启动的。我必须扩展它)。

我在表单领域遇到了麻烦,我正在尝试引入 Zend_Form,希望这能以某种方式简化问题。但是尝试使用 Zend_Form 会带来它自己的问题。

当我尝试实例化第一个测试表单时,我得到了白屏死机——甚至没有错误消息。

数据如下:

Dir Structure:  
MYAPPNAME  
....controllers  
....forms  
....models  
....services  
....views  

Bootstrap.php 包含:

protected function _initAutoLoading()
{
$loader = new Zend_Loader_Autoloader_Resource(array(
'namespace' => 'MYAPPNAME',
'basePath' => APPLICATION_PATH . '/modules/MYAPPNAME',
));
$loader->addResourceTypes(array(
  'model' => array(
'path' => 'models',
'namespace' => 'Model'),
  'form' => array(
'path' => 'forms',
'namespace' => 'Form'),
  'service' => array(
'path' => 'services',
'namespace' => 'Service')));
}

这适用于名称如下的模型:

class MYAPPNAME_Model_DataRecordName extends Doctrine_Record
{
 etc...

但它似乎在表单方面失败得很惨......虽然请注意,这是我第一次使用 Zend_Form。

我的表单在文件 MYAPPNAME/forms/Formtest.php 中定义:

<?php

class MYAPPNAME_Form_Formtest extends Zend_Form
{
 public function init($action){

  $this->setAction($action)
   ->setMethod('post')
   ->setAttrib('id', 'formtestForm');

  $email = $this->addElement( 'text', 'email',
   array('label', => 'EMail'));
  )

  $submit = $this->addElement('submit', 'Submit and Be Free!');
 }// End init
} // End class def

表单正在显示在定义为的视图中:

<div class=""testForm">
<p style="margin-top:20px; margin-bottom:10px"">Explanatory Text</p>
<h2>This is a Form Test</h2>

<?php echo $this->formResponse; ?>
<?php echo $this->form; ?>

<hr>
<p>FORM ABOVE THIS BAR</p>
</div>

视图工作正常。

它由一个动作(在工作控制器中)管理,定义为:

 public function formtestAction(){
  echo "formtestAction: ENTERED";

  $form = new MYAPPNAME_Form_Formtest('ThisController/formtest2');    
  //$form =  "<p>GARBAGE DATA</p>";

  if(!empty($form)){$this->view->form = $form;}
  else{
   $form = "<p>THE FORM VAR IS EMPTY</p>";
   $this->view->form = $form;

   $formResponse = "<p>INSTANTIATION FAILED</p>";
   $this->view->formResponse = $formResponse;
  }
 }
 public function formtest2Action(){
  echo "formtest2Action: ENTERED";
 }

如果我同时注释掉表单实例化和垃圾数据行,我会在视图中得到有效的输出。如果我将 $form 设置为“GARBAGE DATA”,我也会得到有效的可预测输出。

但是,当我尝试实例化表单对象时,我得到的死机白屏仅包含“formtestAction: ENTERED”(来自顶部的 echo 语句。)

我要慢慢发疯了。

我不知道这是自动加载器问题、路由问题、对象实例化问题还是什么。

我非常乐意提供任何建议。

感谢阅读。

【问题讨论】:

  • 你检查你的 PHP 日志了吗?如果您遇到一些 PHP 致命错误,您很可能会以空白屏幕结束。此外,致命错误不会出现在您的应用程序日志中(就像未捕获的异常一样),它们会直接进入 PHP 日志。

标签: zend-framework zend-form autoload router


【解决方案1】:

在 Zends 中,我已经多次遇到这种情况,而且它通常会因为多余的逗号而令人讨厌。在

... 'basePath' => APPLICATION_PATH 。 '/modules/MYAPPNAME',));

它看起来就像那些。只是快速浏览一下,但您还是可以检查一下。

HTH, 马库斯

【讨论】:

  • 你能接受我的帖子作为答案吗(为了我们的内部声誉搜索);)问候,
【解决方案2】:

mtoepper:非常接近。好收获!

这确实是一个额外的逗号,只是它在 Form 类定义中——阻止了成功的对象实例化。

这些无声的故障非常烦人。

【讨论】:

    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 2011-02-24
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2013-11-20
    • 2017-06-12
    相关资源
    最近更新 更多