Re: 外部フォームからExpressへのファイル保存について

2021年5月28日 at 13:03

いつもお世話になります。
昨日質問させていただきました、外部フォームからの
ファイル添付につきまして、進展がございましたので、
ご報告いたします。

ファイルマネージャからのファイルアップロードを
コードに追加して、ファイルをローカルコンピュータ
からアップロードすると、Expressに登録できました。

理由は不明ですが、取り急ぎご報告いたします。

【ビュー側】
<p><label>添付ファイル1:<?php
   $fm = Core::make('helper/concrete/asset_library');?>
<div class="ccm-attribute ccm-attribute-image-file">
<?php echo $fm->file('f1', 'file1', 'ファイルを選択してください');?>
</div>
</label></p>

Re: 外部フォームからExpressへのファイル保存について

2021年5月28日 at 14:25
添付ファイルをファイルマネージャから選択して、
Expressエントリーとして登録すると、

Expected value of type "Concrete\Core\Entity\File\File" for association field "Concrete\Core\Entity\Attribute\Value\Value\ImageFileValue#$file", got "string" instead.

のエラーが出ました。
ただし、Expressにはデータは正常に保存されております。
このエラーは何を意味するのでしょうか?

デバッグでは
public static function invalidAssociation(ClassMetadata $targetClass, $assoc, $actualValue)
{
$expectedType = 'Doctrine\Common\Collections\Collection|array';

if (($assoc['type'] & ClassMetadata::TO_ONE) > 0) {
$expectedType = $targetClass->getName();
}

return new self(sprintf(
'Expected value of type "%s" for association field "%s#$%s", got "%s" instead.',
$expectedType,
$assoc['sourceEntity'],
$assoc['fieldName'],
is_object($actualValue) ? get_class($actualValue) : gettype($actualValue)
));
}
のボールド部分がハイライトされております。
 

Re: 外部フォームからExpressへのファイル保存について

2021年5月28日 at 21:35
katzさん、本日は週刊concrete5でご教示いただきまして
ありがとうございました。

ローカルPCからダイレクトにExpressへファイルを取り込める
http://documentation.concrete5.org/developers/working-with-files-and-the-file-manager/importing-new-files も大変勉強になりました。

また、ファイルマネージャからExpressへ登録する方法については、
次のコードで実現できました。

【ビュー側】
<p><label>添付ファイル1:<?php
  $fm = Core::make('helper/concrete/asset_library');?>
<div class="ccm-attribute ccm-attribute-image-file">
<?php echo $fm->file('f1', 'file1', 'ファイルを選択してください');?>
</div>
</label></p>

【コントローラ側】
use File;
$f1 = File::getById($this->post('file1'));
$entry = Express::buildEntry( 'autumn' )
->setAFiles1($f1)
->save();

これで例外が発生せず、ファイルマネージャからファイル情報を
Expressへ登録することができました。
本当にありがとうございました。