$ _FILEおよび$ _POSTデータをフォームに渡すにはどうすればよいですか。
-
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];
}
. 所属していません StackOverflow