0

関数のどこで問題が発生したかを特定するのに問題があります。NetBeansを使用するか、関数の実行中に関数がどこで機能しなくなるのかを知ることができるかどうかを知りたいのですが。

関数を見たい場合は、ここにそのコピーがあります:

             public function archive($id = null) {
    if ($this->request->is('post')) {
        $event =  $this->Event->read(null, $id);
        $archive['Archive'] = $event['Event'];
        $archive['Archive']['archiveID'] = $event['Event']['eventID'];
        unset($archive['Archive']['archiveID']);
        $this->loadModel('Archive');
        $this->Archive->create();
        if ($this->Archive->save($archive)) {
           // $this->Archive->invalidFields();
            $this->redirect(array('action' => 'eventmanage'));
            $this->Session->setFlash(__('The event has been archived'));
          //  $this->Event->delete($id);  
        } else {
            $this->redirect(array('action' => 'eventmanage'));
            $this->Session->setFlash(__('The event could not be archived, Please, contact the administrator.'));
        }
    }
}

so far i have tried using the `$errors = $this->Archive->validationErrors;` function but all i receive back is the word 'array' 

アップデート

アーカイブとして保存するイベントがありますが、メッセージが送信$this->Session->setFlash(__('The event has been archived'));されず、eventmanageにリダイレクトされず、/ Controller / Action / idへの新しいリンクが作成されます(例:/ events / archive / 14)。

ありがとう

4

2 に答える 2

4

プロパティはvalidationErrors配列を返します。PHPでは配列オブジェクトをエコーすることはできません。これはデータのコレクションであり、画面に「ただ」出力できるものではないためです。ただし、 var_dump()print_r()、CakePHPメソッドdebug()Debugger :: dump()など、配列全体を表示する関数は他にもあります。したがって、次のようなものを試してください。

$errors = $this->Archive->validationErrors;
if (!empty($errors)) { debug($errors); }

implode()を使用して、すべての検証エラーをフラッシュメッセージの文字列として出力することもできます。次に例を示します。

$this->Session->setFlash(__('The event could not be archived, because of the following errors: ' . implode('<br/>', $errors) . '. Please, contact the administrator.'));

これにより、すべてのエラーがフラッシュメッセージ内の区切りで区切られて表示されます。

更新 最新の質問の更新に関しては、設定する前にリダイレクトするため、フラッシュメッセージは設定されていません。したがって、ステートメントに到達することはありません。コントローラのsetFlashメソッドとredirectメソッドを入れ替えると、次のようになります。

$this->Session->setFlash(__('The event has been archived'));
$this->redirect(array('action' => 'eventmanage'));
于 2013-01-28T16:37:52.577 に答える
0

に値を割り当てる必要性を理解するのに苦労しています

$archive['Archive']['archiveID'] = $event['Event']['eventID'];

直後に設定を解除します

unset($archive['Archive']['archiveID']);

Dbの「archiveID」が必須の値である場合、その値が存在しない場合、MySQLはデータを受け入れないと思います。

テーブルの構造を確認する必要があります。

于 2013-01-28T18:59:52.913 に答える