【问题标题】:Cakephp 2.0 form helper issueCakephp 2.0 表单助手问题
【发布时间】:2012-09-25 06:46:19
【问题描述】:

我是 CakePHP 2.0 的新手。它与以前的版本相比有太多的变化。在 CakePHP 2.0 中实现基本功能时我遇到了很多问题。我在 CakePHP 1.3 和 2.0 中做了相同的代码,但输出不同,所以这给我带来了问题。

我创建了一个表格,如下所示:

<form name="User" method="post" action="http://192.168.1.24/project/api/documents/sub" ENCTYPE="multipart/form-data"> 
 <table>
  <tr><td><label>username:</label></td><td><input type="text" name="username"></td></tr>
  <tr><td><label>password:</label></td><td><input type="text" name="password"></td></tr>
  <tr><td><label>email:</label></td><td><input type="text" name="email"></td></tr>
  <tr><td><label>Image:</label></td><td><input type="file" name="image"></td></tr>
  <tr><td colspan="2" align="center"><input type="submit" name="submit" value="Submit" />

我在 CakePHP 1.3 和 2.0 的应用程序中都使用了这个表单。 CakePHP 1.3 的控制器代码为:

function api_sub()
{
  $this->layout = false;
  $this->data['Document'] = $this->params['form'];
  pr($this->data); die();
}

以上代码的输出为:

Array
(
    [Document] => Array
        (
            [username] => mack
            [password] => meack
            [email] => mack@gmail.com
            [submit] => Submit
            [image] => Array
                (
                    [name] => 01manta.jpg
                    [type] => image/jpeg
                    [tmp_name] => C:\wamp\tmp\phpF586.tmp
                    [error] => 0
                    [size] => 636306
                )
        )
)

CakePHP 2.0 中的控制器代码如下所示:

public function api_sub()
{
  //$this->layout = false;
  $this->request->data['Document']= $this->request->data;
  pr($this->request->data); die();
}

以上代码的输出如下图:

Array
(
    [username] => mack
    [password] => meack
    [email] => mack@gmail.com
    [submit] => Submit
    [User] => Array
        (
            [username] => mack
            [password] => meack
            [email] => mack@gmail.com
            [submit] => Submit
        )
)

现在的问题是,在 CakePHP 2.0 中,输出中缺少图像数组。 谁能告诉我如何在 CakePHP 2.0 中获取该图像数组?我必须对编码进行哪些更改?

【问题讨论】:

    标签: html forms cakephp-2.0


    【解决方案1】:

    我可能是因为你没有使用the FormHelper。如果您使用所述助手,数据可能会正确填充到$this-&gt;data$this-&gt;request-&gt;data。不过,我在文档中找不到任何明确的信息。

    在任何情况下,通用表单数据始终存在于 $this-&gt;request-&gt;params['form'] 中,因此您的表单的文件数据将位于 $this-&gt;request-&gt;params['form']['file'] 中。

    【讨论】:

      【解决方案2】:

      不要为表单编写 HTML 代码,您应该执行以下操作:

      echo $this->Form->create('ModelName');
      echo $this->Form->input('username');
      echo $this->Form->input('password');
      echo $this->Form->input('email');
      echo $this->Form->input('image');
      echo $this->Form->end('Submit!');
      

      请注意,在此示例中,假设您将在模型中验证图像,并且它可能会存储在您的数据库中。 如果您不想将图像存储在数据库中,您可以将最后一个输入替换为:

      echo $this->Form->input('image', array('type' => 'file'));
      

      所有这些都可以通过以下方式在您的控制器中访问:

      $this->request->data
      

      这将是一个如下所示的数组:

      array(
          'ModelName' => array(
              'username' => 'whatever_the_user_wrote',
              'password'=> '********',
              'email' => 'foo@bar.baz',
              'image' => the image
          )
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-22
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多