2012-02-01 46 views
1

我試圖用extbase創建一些東西,但是我得到的錯誤消息並不是很有幫助。我將blog_example擴展作爲指導。 (可能)重要的區別是:我沒有數據庫表,因爲我想編寫一個通過REST連接到外部服務器的自定義域存儲庫。嘗試調用Controller-> createAction()時發生錯誤

實際的錯誤信息(插件上面顯示,而不是作爲一個例外消息):試圖調用Tx_MyExt_Controller_SubscriptionController-> createAction()


發生

錯誤類/控制器/ 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然後
  • 一個var_dump($this->request->getArguments());顯示錶單中的字段
  • 有一個索引操作,並且它也是ext_localconf.php

的提示,我發現大家還不解決方案定義的第一個動作爲我工作,所以我希望有人能指導我走向正確的方向。

+0

只是爲了驗證:你有你的'Subscriber'模型中的getter和setter? – konsolenfreddy 2012-02-01 10:59:33

+0

是。在問題中添加了setter/getter – pduersteler 2012-02-01 11:37:17

回答

1

「從頭開始,它的工作原理,如果你比較它,你有相同的代碼,雖然」的經典案例。

我更新了問題中的代碼,也許它有助於某人。

+0

這意味着您發佈的代碼目前有效嗎? – Mateng 2013-05-15 17:43:32

+0

是的,你只需要確保相應的TCA存在,除了有效的ext _ *。php文件。 – pduersteler 2013-05-15 20:18:13

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 . '()'; 
} 
+0

問題不在於我想擺脫閃光燈,而是爲了擺脫停止插件工作的錯誤。 – pduersteler 2012-04-13 21:38:42

6

我已經得到了同樣的錯誤。

如果您將模型作爲參數傳遞給方法,它也會驗證模型字段。

我有這個註釋對我的模型屬性:

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

它驗證了 「@Validate」 的註釋。 在數據庫中的字段是空的,所以我得到了錯誤信息

An error occurred while trying to call ... 

,如果有更好的錯誤消息,這將是一件好事。 您需要自定義的驗證註解或驗證屬性是不是在數據庫

希望它可以幫助空有人

+0

這就是我的問題。 – lufi 2014-03-18 21:50:28

+0

這也幫助了我。一個字段沒有按照TCA的要求設置,但在模型中仍然有'* @validate NotEmpty'。詳細視圖失敗,嘗試調用NAMESPACE \ Myext \ Controller \ ItemController-> listAction()'時發生錯誤。 (它顯示'listAction'爲詳細視圖的原因是控制器中有一個來自list - > detail的轉發器) – Urs 2014-05-06 08:24:33

3

在addtion:在檢查您的模型和TCA任何驗證。如果一個字段在您的模型中被標記爲@validate NotEmpty,並且未在TCA中進行適當標記,則可以保存一條記錄,忽略模型中的@validate設置。如果您在創建記錄後更改模型和/或TCA,則會發生這種情況。

示例: 字段'textfield'在TCA和模型中都設置爲無法驗證。你創建一個新記錄並保存它而不填寫'textfield'字段(你可以,它沒有設置爲驗證)。然後,您將模型設置'textfield'更改爲@validate NotEmpty,然後嘗試在FE上顯示記錄,您將看到該錯誤。

該示例的解決方案: 只需刪除模型中的驗證或檢查TCA和Model中的驗證,以使它們一起工作。

-

一家德國的博客文章涵蓋了此解決方案:http://www.constantinmedia.com/2014/04/typo3-extbase-an-error-occurred-while-trying-to-call-anyaction/

相關問題