2017-03-06 10 views
0

私はTYPO3用Extbaseでサンプルブログを作っています。私のブログにはたくさんの投稿があり、1つの投稿には多くのコメントがあります。問題は、投稿を作成するときにエラーメッセージが表示されます。「この更新プログラム()は、このリポジトリが管理するタイプ(Myext \ My Blog \ Domain \ Model \ Blog)ではありませんでした。ポストテンプレートからTYPO3作成時にエクストラベースの関係が動作しない

... 
<p style="text-align: center"> 
    <f:link.action action="new" controller="Post" arguments="{blog:blog, post: post}"class="btn btn-primary"> 
     Add Post 
    </f:link.action> 
</p> 
... 

new.html:ポストから

<f:layout name="Default" /> 

This template displays a NEW form for the current domain object. 

If you modify this template, do not forget to change the overwrite settings 
in /Configuration/ExtensionBuilder/settings.yaml: 
    Resources: 
    Private: 
     Templates: 
     New.html: keep 

Otherwise your changes will be overwritten the next time you save the extension in the extension builder 

<f:section name="main"> 
<div class="container"> 
    <div class="clearfix"></div> 
    <h1 style="color: black; text-align: center">New Post</h1> 
    <f:flashMessages /> 

    <f:render partial="FormErrors" arguments="{object:Post}" /> 

    <f:form action="create" enctype="multipart/form-data" name="newPost" object="{newPost}" > 
    <f:render partial="Post/FormFields" arguments="{blog:blog, post:post}"/> 
     <f:form.submit value="Create new" class="btn btn-primary" style="margin:10px 0" /> 
    </f:form> 
</div> 
</f:section> 

部分FormFields.html:ブログの私のshow.htmlを見て

<label for="title"> 
    <f:translate key="tx_myblog_domain_model_post.title" /> <span class="required">(required)</span> 
</label><br /> 
    <f:form.textfield property="title" style="width: 100%" /><br /> 
<label for="content"> 
    <f:translate key="tx_myblog_domain_model_post.content" /> 
</label><br /> 
    <f:form.textarea property="content" cols="60" rows="15" style="width: 100%"/><br /> 

最後のPostController:

class PostController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController 
{ 

    protected $postRepository = NULL; 


    public function injectPostRepository(\MyExt\Myblog\Domain\Repository\PostRepository $postRepository) 
    { 
     $this->postRepository = $postRepository; 
    } 


    /** 
    * action list 
    * 
    * @return void 
    */ 
    public function listAction() 
    { 
     $posts = $this->postRepository->findAll(); 
     $this->view->assign('posts', $posts); 
    } 

    public function showAction(\MyExt\Myblog\Domain\Model\Post $post) 
    { 
     $this->view->assign('post', $post); 
    } 

    public function newAction(\MyExt\Myblog\Domain\Model\Blog $blog, \MyExt\Myblog\Domain\Model\Post $post = NULL) 
    { 
     $this->view->assign('blog',$blog); 
     $this->view->assign('post',$post); 
    } 

    public function createAction(\MyExt\Myblog\Domain\Model\Post $newPost) 
    { 
     $this->addFlashMessage('The object was created. Please be aware that this action is publicly accessible unless you implement an access check. See http://wiki.typo3.org/T3Doc/Extension_Builder/Using_the_Extension_Builder#1._Model_the_domain', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR); 
     $today = new \DateTime('now'); 
     $newPost->setPostDate($today); 
     $this->postRepository->add($newPost); 

     $this->objectManager->get('MyExt\\myblog\\Domain\\Repository\\BlogRepository')->update($blog); 

     $this->redirect('list'); 
    } 

答えて

0

あなたは、新しいレコードを更新する必要がいけません。リポジトリに追加するだけです。

$today = new \DateTime('now'); 
$newPost->setPostDate($today); 
$this->postRepository->add($newPost); 

このいけない作業の場合は、手動で存続:

$persistenceManager = $this->objectManager->get("TYPO3\\CMS\\Extbase\\Persistence\\Generic\\PersistenceManager"); 
$persistenceManager->persistAll(); 

ところで

  • $のブログが初期化されていません。あなたのオブジェクトが
  • MYEXT \ myblogドメイン\リポジトリ\ BlogRepositoryがあるべき\ MYEXT \ Myblog \ドメイン\リポジトリ\ BlogRepository
$ newBlogという名前です
関連する問題