1
  public function executeProductAllAccept()
  {
      $this->observation = ObservationPeer::retrieveByPK($this->getRequestParameter('id'));

      $this->forwardUnless((
            $this->observation
        ), 'observation', 'error');

      $this->redirectUnless((
            $this->product
        ), 'observation/error?flag=insufficientrights');    

      $currentTime = date('Y-m-d H:i:s');
      //echo $currentTime.'<br />';

      $this->observation->setIsSentBackToPM(0);
      //echo 'after setIsSentBackToPM'.'<br />';
      $this->observation->setIsPartAccepted(0);
      //echo 'after setIsPartAccepted'.'<br />';
      $this->observation->setIsHold(1);
      //echo 'after setIsHold'.'<br />';
      $this->observation->setCostAllAcceptanceTime($currentTime);
      //echo 'after setCostAllAcceptanceTime'.'<br />';
      $this->observation->save();
      //echo 'after save'.'<br />';
      //exit;
      return $this->redirect('observation/myObservations');
  }

このコードは、空白のページを返します。開発環境で試してみました->再び空白のページ。

そこで、正確にどこで失敗しているかをテストするために、いくつかのエコーを追加しました。出力は次のとおりです。

2013-06-03 10:40:20
after setIsSentBackToPM
after setIsPartAccepted
after setIsHold
after setCostAllAcceptanceTime

そのため、save() を実行すると、明らかにどこかで失敗します。

symfony ログを調べた:

  • エラーなし
  • SELECT クエリに関する [情報] のみ
  • SET クエリに関する [情報] はありません (symfony がクエリを実行しようとする前に、save() で何かが失敗します)

Apacheエラーログを調べました->エラーはありません。

ということで、saveメソッド→symfony propel-build-modelをリビルドしてみました。しかし、問題は残りました。BaseObservation の save メソッドと他のモデルの save メソッドを比較しました -> 異常は見られませんでした。

これを追跡する方法がわかりません。何か案は?

編集:更新されたテスト:

  public function executeProductAllAccept()
  {
      $this->observation = ObservationPeer::retrieveByPK($this->getRequestParameter('id'));

      echo 'before test plain save'.'<br />';
      $this->observation->save();
      echo 'after test plain save'.'<br />';

      $this->forwardUnless((
            $this->observation
        ), 'observation', 'error');

      $this->redirectUnless((
            $this->product
        ), 'observation/error?flag=insufficientrights');    

      $currentTime = date('Y-m-d H:i:s');
      echo $currentTime.'<br />';

      $this->observation->setIsSentBackToPM(0);
      echo 'after setIsSentBackToPM'.'<br />';
      $this->observation->setIsPartAccepted(0);
      echo 'after setIsPartAccepted'.'<br />';
      $this->observation->setIsHold(1);
      echo 'after setIsHold'.'<br />';
      $this->observation->setCostAllAcceptanceTime($currentTime);
      echo 'after setCostAllAcceptanceTime'.'<br />';
      $this->observation->save();
      echo 'after save'.'<br />';
      exit;
      return $this->redirect('observation/myObservations');
  }

戻り値:

before test plain save
after test plain save
2013-06-03 10:40:20
after setIsSentBackToPM
after setIsPartAccepted
after setIsHold
after setCostAllAcceptanceTime
4

1 に答える 1

0

わかりました、追加します

error_reporting(E_ALL);
ini_set('display_errors',TRUE);

問題の解決に役立ちました。

私の場合、エラーは次のとおりです。

Fatal error: Call to undefined method Observation::setCostAllAcceptanceTime() in /xxxxxxxxxxxxxx/modules/observation/actions/actions.class.php on line 792

スキーマの更新の 3 行の間のどこかが失われたようです。新しいモデルを生成したとき、メソッド setCostAllAcceptanceTime (およびその他の 2 つ) が生成されず、エラーが発生しました。

于 2013-06-03T09:12:44.320 に答える