2

extbaseを使用して何かを作成しようとしていますが、表示されるエラーメッセージはあまり役に立ちません。blog_example拡張機能をガイドとして使用しました。(おそらく)重要な違いは次のとおりです。RESTを介して外部サーバブに接続するカスタムドメインリポジトリを作成したいので、データベーステーブルがありません。

実際のエラーメッセージ(例外メッセージとしてではなく、プラグインの上に表示されます):

Tx_MyExt_Controller_SubscriptionController-> createAction()を呼び出そうとしたときにエラーが発生しました


Classes / Controller / SubscriptionController:
重要な部分に分解されます。

class Tx_MyExt_Controller_SubscriptionController extends Tx_Extbase_MVC_Controller_ActionController 
{
    /**
     * @var Tx_MyExt_Domain_Repository_SubscriberRepository
     */
    protected $subscriberRepository;


    /**
     * @return void
     */
    public function initializeAction()
    {
        $this->subscriberRepository = t3lib_div::makeInstance('Tx_MyExt_Domain_Repository_SubscriberRepository');
    }


    /**
     * @param Tx_MyExt_Domain_Model_Subscriber $subscriber
     * @dontvalidate $subscriber
     * @return  string      The rendered view
     */
    public function newAction(Tx_MyExt_Domain_Model_Subscriber $subscriber = null)
    {
            $this->view->assign('subscriber', $subscriber);
    }

    /**
     * @param Tx_MyExt_Domain_Model_Subscriber $subscriber
     * @return  string      The rendered view
     */
    public function createAction(Tx_MyExt_Domain_Model_Subscriber $subscriber)
    { }

}

クラス/ドメイン/モデル/サブスクライバー

class Tx_MyExt_Domain_Model_Subscriber extends Tx_Extbase_DomainObject_AbstractEntity 
{
    /**
     * @var string
     * @dontvalidate
     */
    protected $email = '';



    /**
     * @param string $email
     * @return void
     */
    public function setEmail($email) 
    {
        $this->email = $email;
    }

    /**
     * @return string
     */
    public function getEmail() 
    {
        return $this->email;
    }
}

リソース/プライベート/テンプレート/サブスクリプション/新規

<f:form action="create" controller="Subscription" objectName="Subscriber" object="{subscriber}" method="post">
    <f:form.textfield property="email"></f:form.textfield>
    <f:form.submit value="submit"></f:form.submit>
</f:form>

事実

  • 追加$subscriber = nullするとメッセージが削除されます。しかし$subscribernullそれでは
  • Avar_dump($this->request->getArguments());はフォームのフィールドを表示します
  • インデックスアクションがあり、それはで定義された最初のアクションでもありますext_localconf.php

私が見つけたヒントや解決策は私には役立たないので、誰かが私を正しい方向に導いてくれることを願っています。

4

4 に答える 4

7

同じバグがあります。

モデルを引数としてメソッドに渡すと、モデルフィールドも検証されます。

モデルプロパティに次のアノテーションを付けました。

/**
 *
 * @var \string
 * @validate NotEmpty
 */

「@validate」アノテーションを検証します。データベースのフィールドが空だったので、エラーメッセージが表示されました

An error occurred while trying to call ...

より良いエラーメッセージがあればいいのにと思います。検証アノテーションをカスタマイズするか、データベースでプロパティが空でないことを確認する必要があります

それが誰かを助けることを願っています

于 2014-01-31T08:56:11.130 に答える
3

さらに、モデルとTCAの検証を確認してください。フィールドが@validate NotEmptyモデルでマークされていて、TCAで適切にマークされていない場合、モデルの@validate設定を無視してレコードを保存できます。これは、レコードの作成後にモデルやTCAを変更した場合に発生する可能性があります。

例: フィールド'textfield'は、TCAとモデルの両方で検証しないように設定されています。新しいレコードを作成し、フィールド'textfield'に入力せずに保存します(検証するように設定されていません)。次に、モデル設定の「textfield」をに変更してから@validate NotEmpty、FEにレコードを表示しようとすると、エラーが発生します。

その例の解決策: モデルの検証を削除するか、TCAとモデルの検証をチェックして連携させます。

-

ドイツのブログ投稿がこの解決策をカバーしています:http://www.constantinmedia.com/2014/04/typo3-extbase-an-error-occurred-while-trying-to-call-anyaction/

于 2014-04-02T22:01:02.920 に答える
2

カスタムエラーメッセージを提供するには、youtコントローラーのテンプレートメソッドgetErrorFlashMessageをオーバーライドするだけです...

/**
 * A template method for displaying custom error flash messages, or to
 * display no flash message at all on errors. Override this to customize
 * the flash message in your action controller.
 *
 * @return string|boolean The flash message or FALSE if no flash message should be set
 * @api
 */
protected function getErrorFlashMessage() {
    return 'An error occurred while trying to call ' . get_class($this) . '->' . $this->actionMethodName . '()';
}
于 2012-03-28T15:45:21.557 に答える
1

「最初からやり直すと機能しますが、比較すると同じコードになります」という典型的なケースです。

私は質問のコードを更新しました、多分それは誰かを助けます。

于 2012-02-02T09:37:02.320 に答える