前提
concrete5の外部フォームについて
■■な機能を実装中に以下のエラーメッセージが発生しました。
BlockController' not found
実現したいこと
メール送信したいです。
発生している問題・エラーメッセージ
"Class 'Application\Block\ExternalForm\Form\Controller\BlockController' not found"
該当のソースコード
1つ目のファイル form/mail_mag_complete.php <?php // おまじない $form = Loader::helper('form'); defined('C5_EXECUTE') or die("Access Denied."); // フォームヘルパー読み込み if(isset($response)){ ?> <?php echo $resonse?> <?php } ?> <form method='post" action="<?php echo $this->action('test_searcj')?>"> <p><?php echo t("this is an example of how a custom form works.")?></p> <?php echo $form->text('test_text_field')?> <input type="submit" name="submit" value="submit"/> </form> 2つ目のファイル コントローラー form/controller/mail_mag_complete.php <?php // おまじない namespace Application\Block\ExternalForm\Form\Controller; use Concrete\Core\Controller\AbstractController; use Core; use Page; defined('C5_EXECUTE') or die("Access Denied."); // フォームヘルパー読み込み //$form = Core::make('helper/form'); //class mail_mag_complete extends BlockController{ class MailmagExternalFormBlockController extends BlockController{ // フォームヘルパー読み込み //$form = Core::make('helper/form'); //$form = Loader::helper('form'); public function action_mail_mag_submit(){ $val = Loder::helper('validation/form'); $val->setData($this->post()); $val->addRequired('magazine','1つ以上のメルマガを選択してください'); $val->addRequiredEmail('email','有効なメールアドレスを入力してください'); if(!$val->test()){ $errorArray=$val->getError()->getlist(); $this->set('errorArray',$errorArray); }else{ $mh = Loader::helpler('mail'); $adminUserinfo=userInfo::getByID(User_SUPER_ID); if(is_object($adminUserInfo)){ $mh->bcc($adminUserInfo->getuserEmail()); } $mh->addParameter('magazine',$this->post('magazine')); $mh->load('mail_mag_complete'); $mh->sendMail(); $this->set('response','お申込みありがとうございました。'); } return true; } }
試したこと
以下を追加しました、
namespace Application\Block\ExternalForm\Form\Controller;
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
名前空間なしで読み込んだりはできるのでしょうか。
※それができてない状態で名前空間使うのは難しいと思います。
名前空案なしで試しましたが、以下のエラーメッセージが表示されました。
"Class 'BlockController' not found"
そのクラス定義のあるファイルをrequiireしてないのでは。
5.6(レガシー)版ではblockが使えましたが、
5.7以降 (モダン)からAbstractControllerに変わりました。
以下のように書き換えました。
<?php
namespace Application\Block\ExternalForm\Form\Controller;
use Concrete\Core\Controller\AbstractController;
use Core;
use Page;
class MailMagExternalForm extends AbstractController
{
エラーメッセージ
"Cannot declare class Application\Block\ExternalForm\Form\Controller\MailMagExternalForm, because the name is already in use"
<?php
namespace Application\Block\ExternalForm\Form\Controller;
use Concrete\Core\Controller\AbstractController;
use Core;
use Page;
class MailMag extends AbstractController
ビューは表示されましたが、以下のエラーメッセージが表示されました。
Arguments
"Class 'Application\Block\ExternalForm\Form\Controller\Loader' not found"
--------------------------------------------------
class MailMag extends AbstractController
{
public function action_mail_mag_submit() {
// validation/form ヘルパーを呼び出し
$val = Loader::helper('validation/form');
// postデータをバリデーションに登録
$val->setData($this->post());
// 必須項目ルールの追加
$val->addRequired('magazine', '1つ以上のメルマガを選択してください。');
// メールアドレスの検証
$val->addRequiredEmail('email', '有効なメールアドレスを入力してください。');
// テスト実行
if (!$val->test()) {
// テストに通らなかった場合はビューにエラーを渡す
$errorArray = $val->getError()->getList();
$this->set('errorArray', $errorArray);
} else {
// テストに通った場合の処理
$mh = Loader::helper('mail');
// FROMアドレスの設定
$mh->from(EMAIL_DEFAULT_FROM_ADDRESS, SITE);
// Toアドレスの設定
$mh->to($this->post('email'));
// 管理者ユーザー情報を取得
$adminUserInfo = UserInfo::getByID(USER_SUPER_ID);
if (is_object($adminUserInfo)) {
// 管理者メールアドレスをBCCに設定
Arguments
"Class 'Application\Block\ExternalForm\Form\Controller\Loader' not found"
編集しました。
解決したように見えないのですが、自己解決としてよかったのでしょうか。
※解決済みは受付中に戻すこともできたはずなので
あと質問は編集できるので、コメントに書かずに本文調整を。
そういえばCMSですか。
その改修となれば結構自己責任なところがあるし、特異なので回答つきにくいかもしれません。
公式もしくは有志のフォーラムを探したほうが良いと思う

回答1件
あなたの回答
tips
プレビュー