$ _FILEおよび$ _POSTデータをフォームに渡すにはどうすればよいですか。

StackOverflow https://stackoverflow.com//questions/11690320

  •  12-12-2019
  •  | 
  •  

質問

これは、POSTからのデータをフォームに渡す方法であることを知っていることです。

$form->setData( $this->getRequest()->getPost() );
.

これは働くかもしれないと思いました

$form
    ->setData( $this->getRequest()->getPost() )
    ->setData( $this->getRequest()->getFiles() );
.

それはそうではありません。フレームワークの情報源を通して見ることはできないことを確認しました。だから私はファイルデータをPOSTデータにマージすることを考えていました。確かにこれは望ましい解決策になることはできませんか?getpost()とgetfiles()が簡単に合併可能な配列を返す範囲ではありません。

これはZend Framework 2特有のものです。

役に立ちましたか?

解決

今すぐ知っているか、Zendを使用しているという事実に心を払ってみましたか。通常、ファイルベースごとにgetFileInfoはアップロードされているファイルの情報に基づく配列です。FileName、Extensionなど。Zends $_FILEは、その情報を同様の方法で出力します。私はいつかそれと一緒にプレーしていないが、その価値がある価値がある

例の概念(複数のファイルのアップロードについては、私が知っていますが、1つだけで働くための良いコンセプトで、2秒以上のファイルを途中に追加したい)

$uploads = new Zend_File_Transfer_Adapter_Http();
$files  = $uploads->getFileInfo();

foreach($files as $file => $fileInfo) {
    if ($uploads->isUploaded($file)) {
        if ($uploads->isValid($file)) {
            if ($uploads->receive($file)) {
                $info = $uploads->getFileInfo($file);
                $tmp  = $info[$file]['tmp_name'];
                $data = file_get_contents($tmp);
                // here $tmp is the location of the uploaded file on the server
                // var_dump($info); to see all the fields you can use
            }
         }
     }
}
.

他のヒント

Zendのファイル転送アダプタを使用した後、私はコントローラ内の回避策を持って行きました。フォームクラスのSetData()は、それらを置き換えるのではなく、アイテムをデータにマージすると思います。(IMHO)

protected function getPostedData()
{
    if ( is_null($this->postedData) )
    {
        $this->postedData = array_merge(
            (array) $this->getRequest()->getPost(),
            (array) $this->getRequest()->getFiles()
        );
    }
    return $this->postedData;
}
.

array_merge

を使用しています。
    $form    = $this->getForm('my_form');
    $request = $this->getRequest();

    if($request->isPost())
    {

        $file    = $this->params()->fromFiles('name_of_file');
        $form->setData(array_merge(
            $request->getPost()->toArray(),
            array('arquivo' => $file['name'])
        ));

        if ($form->isValid()) {
        // now i can validate the form field
.

この記事では、変数を作成してから、各フォームエントリの値としてそれらをエコーします。

例:

// create array of GET/POST variables then convert each variable to a local variable
$fields = array_keys($_REQUEST);
foreach ($fields as $field) {
   $$field = $_REQUEST[$field];
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top