0

CakePHP2.0は初めてです。以前のバージョンからの変更が多すぎます。CakePHP2.0の基本的な機能の実装に多くの問題があります。CakePHP 1.3と2.0で同じコードを実行しましたが、出力が異なるため、問題が発生します。

以下に示すように1つのフォームを作成しました。

<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" />

このフォームは、CakePHP1.3と2.0の両方のアプリケーションに使用しました。CakePHP1.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
                )
        )
)

CakePHP2.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でその画像配列を取得する方法を教えてもらえますか?コーディングでどのような変更を行う必要がありますか?

4

2 に答える 2

1

FormHelperを使用していない可能性があります。上記のヘルパーを使用すると、データはおそらく$this->dataまたはに適切に入力され$this->request->dataます。ただし、ドキュメントの問題について決定的なものは見つかりません。

いずれにせよ、一般的なフォーム データは常に に存在する$this->request->params['form']ため、フォームのファイル データは にあります$this->request->params['form']['file']

于 2012-09-25T14:38:53.673 に答える
1

フォームの 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
    )
)
于 2012-10-17T16:21:26.370 に答える