LoginSignup
0
1

More than 5 years have passed since last update.

concrete5の外部フォームでファイルアップロード

Last updated at Posted at 2017-09-07

お問い合わせフォームの添付ファイル機能などに。
フォームからアップロードされたファイルはファイルマネージャに追加されます。
日本語の情報があまりないので、ググりまくってなんとか辿り着いたやりかたです。

なんか間違ってたら教えてください。

そもそもの外部フォームの作り方についてはここがとても詳しいです。
concrete5.7対応 外部フォームブロックの作り方まとめ
https://www.cherrypieweb.com/weblog/technical/20161207104805.php

フォーム側

application/blocks/external_form/form/hoge.php
<form enctype='multipart/form-data' action="<?php echo $this->action('send'); ?>" >
  <?php echo $form->file('attachment'); ?> // attachmentのところは任意
</form>

これで<input type="file" name="attachment" id="attachment">みたいなタグが吐き出されます

コントローラ側

application/blocks/external_form/form/controller/hoge.php
namespace Application\Block\ExternalForm\Form\Controller;
use Concrete\Core\Controller\AbstractController;
use Core;
use FileImporter; // ←追加

// 中略

public function action_send($bID = false)
{
  // ファイルをとりこむ
  if (!empty($_FILES['attachment']['tmp_name'])) {
    $fi = new FileImporter();
    $file = $fi->import($_FILES['attachment']['tmp_name'], $_FILES['attachment']['name']);
    $this->file_name = $_FILES['attachment']['name']; // 必要ならファイル名が取得できる
    $this->file_url = $file->getDownloadURL(); // 必要ならダウンロードリンクが取得できる

    // ファイルセットを作ってそれに入れておくと自分で入れたファイルと区別がついてよいです
    // (事前に"Inquire Files"ファイルセットを作っておくこと)
    $set = \Concrete\Core\File\Set\Set::getByName('Inquire Files');
    $set->addFileToSet($file);
  }
}

これで僕はいけました。

設定の「許可されたファイル拡張子」に入ってないファイルが来るとエラーになるので注意!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1