0

私が作成しているアドオンのページでは、既存の行を更新しようとしない限り、完全にうまく機能します。`パブリック関数 actionUpdate() {

$visitor = XenForo_Visitor::getInstance();
     $userName = $visitor['username'];
//Get the text that user wrote in the text box
$text3 = $this->_input->filterSingle('simple_text2', XenForo_Input::STRING);
$text4 = $this->_input->filterSingle('simple_text3', XenForo_Input::STRING);

//Create a instance of our DataWriter
$dwSimpleText = XenForo_DataWriter::create('MinecraftAdder_DataWriter_MinecraftAdder');

//Set the field with the data we filtered
$dwSimpleText->setExistingData('Name');
$dwSimpleText->set('Name', $text3);
$dwSimpleText->setExistingData('Rank');
$dwSimpleText->set('Rank', XenForo_Visitor::getUserId());
$dwSimpleText->setExistingData('UUID');
$dwSimpleText->set('UUID', $text4);
$dwSimpleText->setExistingData('UserID');
$dwSimpleText->set('UserID', $userName);
//Save in the database, please!
$dwSimpleText->save();

//Send a response to the user, so he know that everything went fine with this action
return $this->responseRedirect(
            XenForo_ControllerResponse_Redirect::SUCCESS,
            $this->getDynamicRedirect()
        );

The existing data required by the data writer could not be found. というエラーが表示されます。これを修正する方法を知っている人はいますか?

私のアドオンページ

4

1 に答える 1

0

の使い方setExistingDataが間違っています。その関数には、次の 2 つの値のいずれかを指定する必要があります。

  • 更新する行の主キー列の値
  • 更新する行のすべてのデータを含む配列

したがって、あなたの場合、事前に行を選択していないので、オプション1を使用します。UserID主キー列であると仮定すると、コードは次のようになります。

public function actionUpdate() {
    $visitor = XenForo_Visitor::getInstance();
    $userName = $visitor['username'];
    //Get the text that user wrote in the text box
    $text3 = $this->_input->filterSingle('simple_text2', XenForo_Input::STRING);
    $text4 = $this->_input->filterSingle('simple_text3', XenForo_Input::STRING);

    //Create a instance of our DataWriter
    $dwSimpleText = XenForo_DataWriter::create('MinecraftAdder_DataWriter_MinecraftAdder');

    //Set the field with the data we filtered
    $dwSimpleText->setExistingData($userName);
    $dwSimpleText->set('Name', $text3);
    $dwSimpleText->set('Rank', XenForo_Visitor::getUserId());
    $dwSimpleText->set('UUID', $text4);
    //Save in the database, please!
    $dwSimpleText->save();

    //Send a response to the user, so he know that everything went fine with this action
    return $this->responseRedirect(
        XenForo_ControllerResponse_Redirect::SUCCESS,
        $this->getDynamicRedirect()
    );
}

その他のヒント:

  • これactionUpdateがフォームからのみアクセスできる場合$this->_assertPostOnly();は、関数の先頭に追加して、リクエストが POST リクエストであることを確認する必要があります。
  • 訪問者の情報を保存しないように、訪問者の情報を確認することをuser_idお勧めします。0(もちろん、それがあなたが望むものでない限り)
于 2015-10-20T10:16:05.883 に答える