1

と呼ばれるカスタム モデルを作成しました。PlayこれにはプロパティがTitleありBody、ゲッターとセッターがあります。

私のコントローラーの1つにMasternew and create actions

public function newAction(\TYPO3\Playground\Domain\Model\Play $newPlay = NULL) {
    $this->view->assign('newPlay', $newPlay);
}

私のビューは次のようになります。

<table>
        <f:form action="create" name="newPlay" object="{newPlay}">
            <th>Title:</th>
            <td>
                <f:form.textfield property="title"/>
            </td>
            <th>Body:</th>
            <td>
                <f:form.textarea property="body"/>
            </td>
            </th>
            <tr>
                <td>
                    <f:form.submit value="Create"/>
                </td>
            </tr>
        </f:form>
    </table>

しかし、コントローラーの作成関数で、このエラーが発生しますRequired argument "newPlay" is not set.

public function createAction(\TYPO3\Playground\Domain\Model\Play $newPlay) {
    echo $newPlay->getBody();
    echo $newPlay->getTitle();
}

ここで何か不足していますか?

アップデート

名前をオブジェクトに一致させ、フィールドのプロパティの括弧を削除すると、次のエラーが発生します。

プロパティ パス "" でのプロパティ マッピング中の例外: "配列" から "TYPO3\Playground\Domain\Model\Play" への変換に使用できるコンバーターが見つかりません。

それに対する私の解決策

これよりもきちんとした方法があると確信しています

public function createAction() {

    $newPlayArray=$this->request->getArgument('newPlay');
    $newPlay = json_decode(json_encode($newPlayArray), FALSE);
    echo $newPlay->title;

}
4

2 に答える 2

3

フォームの名前はオブジェクトと一致する必要があります

<f:form action="create" name="newPlay" object="{newPlay}">

フィールドの名前を設定するために使用されます。

アップデート

PHPDoc コメントを設定しましたか? これらは、Extbase 開発に必要であり、非常に重要です。例:

/**
 * @param \TYPO3\Playground\Domain\Model\Play $newPlay
 * @dontvalidate $newPlay
 */
public function newAction(\TYPO3\Playground\Domain\Model\Play $newPlay = NULL) {
    $this->view->assign('newPlay', $newPlay);
}
于 2013-07-19T11:01:02.290 に答える
0

常にオブジェクトをビューに渡すようにしてください。あなたの場合、おそらくNULLを渡します:

/**
 * @param \TYPO3\Playground\Domain\Model\Play $newPlay
 * @dontvalidate $newPlay
 * @return void
 */
public function newAction(\TYPO3\Playground\Domain\Model\Play $newPlay = NULL) {
    if (is_null($newPlay)) {
        $newPlay = $this->objectManager->create('TYPO3\Playground\Domain\Model\Play');
    }
    $this->view->assign('newPlay', $newPlay);
}

フォームをそのままにして、createAction でオブジェクトを取得します。

/**
 * @param \TYPO3\Playground\Domain\Model\Play $newPlay
 * @return void
 */
public function createAction(\TYPO3\Playground\Domain\Model\Play $newPlay) {
    $this->playRepository->add($newPlay);
    $this->redirect('anyAction');
}
于 2013-11-02T10:59:29.173 に答える