在 ZF2 中为帖子添加标签



我正在尝试在我的帖子中实现标签。 用户将在以逗号分隔的文本框中输入标签。

        public function addAction() {
    $entityManager = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
    $article = new Article;
    $form = new ArticleForm(); 
    $form->setHydrator(new DoctrineHydrator($entityManager,'CsnCmsEntityArticle'));
    $form->bind($article);
    $request = $this->getRequest();
    if ($request->isPost()) {
        $post = $request->getPost();
        $form->setData($post);
        if ($form->isValid()) {
            $this->createTags($article, $post["Tags"]);
            $this->prepareData($article);
            $entityManager->persist($article);
            $entityManager->flush();
            return $this->redirect()->toRoute('csn-cms/default', array('controller' => 'article', 'action' => 'index'));
        }
    }
    return new ViewModel(array('form' => $form));
}

在上面的代码中,我添加了一个名为createTags的类,我计划将输入的标签拆分为一个数组,并为每个标签实体创建一个新的标签实体,然后将新的标签实体存储在文章对象的数组中。 这是我应该这样做的正确方法吗?

不可以,如果您将页面存储在数组中,您将无法根据标签搜索页面。 您需要有一个单独的数据库表,其中包含 id、tag、pageId 等列,以便您可以正确搜索带有标签名称的页面。

抱歉,

如果问题想要如此详细,只是想知道我是否应该使用过滤器(我认为这会起作用,但不知道这是否是好的做法)

最后我只使用进程数据函数

   public function prepareData($article, $post) {
    $separator = ",";
    if($post['tagsString'] != "")
    {
        //Link Tags
        $array = array_unique(explode($separator, $post['tagsString']));
        foreach ($array as $tagString) {
            $tag = $this->getEntityManager()->getRepository('CmsEntityTag')->findOneBy(array('tag' => $tagString));
            $link = new CmsEntityLinkTagToArticle($article, $tagString, $tag); 
            $this->getEntityManager()->persist($link);
        }
    }
}

相关内容

  • 没有找到相关文章