【问题标题】:Cant access image data in cakephp 2.0 through custom form无法通过自定义表单访问 cakephp 2.0 中的图像数据
【发布时间】:2012-09-24 09:09:01
【问题描述】:

我创建了一个函数来添加用户。参数是用户名、电子邮件、密码和个人资料图像。

<form name="User" method="post" action="http://192.168.1.100/filmtastic/api/users/adduser" 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" /></td></tr></table>
</form>

现在在我的UserController 我有:

public function api_adduser() {

$this->layout = false;
$this->request->data['User']= $this->request->data;
if($this->request->data['User'] != array()) {
    pr($this->request->data); die();
    }
 }

在这里我调试该 HTML 表单传递的数据,optput 就像

Array
(
    [username] => jack roy
    [password] => jack
    [email] => jack@yahoo.com
    [submit] => Submit
    [User] => Array
        (
            [username] => jack roy
            [password] => jack
            [email] => jack@yahoo.com
            [submit] => Submit
        )

)

问题是它不会显示图像数组。你能告诉我如何得到那个看起来像的图像数组

Array
(
    [image] => Array
        (
            [name] => 06_01_2009_0692878001231258160_nanzig.jpg
            [type] => image/jpeg
            [tmp_name] => C:\wamp\tmp\php368F.tmp
            [error] => 0
            [size] => 81167
        )

)

【问题讨论】:

  • 可以显示表单的html吗?
  • 请停止编辑这个问题。我会为你做的
  • @mehul,看看我的回答。通过FormHelper 创建表单输入元素更方便

标签: html cakephp-2.0


【解决方案1】:

也许您只是忘记将表单 mime 类型设置为 multipart/form-data。这是我的演示视图,名为add.ctp

<?php
echo $this->Form->create('User', array('enctype' => 'multipart/form-data'));

echo $this->Form->input('name');
echo $this->Form->password('password');
echo $this->Form->input('email');
echo $this->Form->file('image');
echo $this->Form->submit();

echo $this->Form->end();

这里是UserController

class UserController extends AppController {

    public $helpers = array('Html', 'Form');

    public function add() {
        pr($this->request->data);
    }

}

这是提交表单时的结果

Array
(
    [User] => Array
        (
            [name] => admin
            [password] => admin
            [email] => asdf@qwerty.com
            [image] => Array
                (
                    [name] => cakephp-book.odt
                    [type] => application/vnd.oasis.opendocument.text
                    [tmp_name] => /tmp/phpKniokr
                    [error] => 0
                    [size] => 170247
                )

        )

)

这里是生成的 HTML 的转储,您可能希望在 external 页面上使用它(请问为什么???)。注意FormHelper 添加了多少东西...我想知道如果您的应用程序仍在直接访问您的服务器,为什么还要构建外部视图...

  <form action="/test/cakedemo/user/add" enctype="multipart/form-data" id="UserAddForm"
  method="post" accept-charset="utf-8">
    <div style="display:none;">
      <input type="hidden" name="_method" value="POST" />
    </div>

    <div class="input text">
      <label for="UserName">Name</label><input name="data[User][name]" 
        id="UserName" />
    </div><input name="data[User][password]" type="password" id="UserPassword" />

    <div class="input text">
      <label for="UserEmail">Email</label><input name="data[User][email]" type="text"
      id="UserEmail" />
    </div><input type="file" name="data[User][image]" id="UserImage" />

    <div class="submit">
      <input type="submit" value="Submit" />
    </div>
  </form>

【讨论】:

  • 调用这个函数我没有使用 cakephp 添加文件,如 .ctp 扩展名。我创建了一个不在我的“wamp/www”中的 HTML 表单,这意味着它在另一个驱动器上。我想从那个表单提交数据:表单语法是
    192.168.1.100/project/api/users/adduser" ENCTYPE="multipart/form-data">
  • @mehul 所以你最好遵循 Cake 对表单字段的命名约定,例如 &lt;input name="data[User][image]" /&gt;
  • 它的 iphone 应用程序后端和数据是从 iphone 发布的,所以当时可能是它的创建问题
  • @mehul 我转储了为表单生成的 HTML。 iPhone发帖没有任何意义,iPhone当然可以显示网页,所以你试图做的事情毫无意义。除非您构建本机 HTTP 客户端 - 恕我直言浪费资源。但是,如果您手动构建 POST 请求,您需要使用 前缀名称 来输入像 data[User][image] 这样的输入片段,而不是简单的 image
猜你喜欢
  • 2011-02-16
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多