Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2-未在数组中设置和加权标记权重_Symfony_Tags_Tag Cloud - Fatal编程技术网

Symfony2-未在数组中设置和加权标记权重

Symfony2-未在数组中设置和加权标记权重,symfony,tags,tag-cloud,Symfony,Tags,Tag Cloud,我有一个方法设置来称量使用最多的标签。我使用这里的示例作为学习练习:(参见Tag Cloud)我的做法略有不同,因为我使用标记作为实体,而不是基于链接的博客实体的字符串属性 标记设置为manytomy/manytomy-to-Blog实体,见下文 我遇到的问题是,标签正在按预期进行检索,但显然没有设置,因此所有标签都返回为1的整数。我怎样才能纠正这个问题?我是否将标签错误地调用到没有考虑哪些标签被多次使用的位置? $tagWeights[$tag['tag']]=(isset($tagWeigh

我有一个方法设置来称量使用最多的标签。我使用这里的示例作为学习练习:(参见Tag Cloud)我的做法略有不同,因为我使用标记作为实体,而不是基于链接的博客实体的字符串属性

标记设置为manytomy/manytomy-to-Blog实体,见下文

我遇到的问题是,标签正在按预期进行检索,但显然没有设置,因此所有标签都返回为1的整数。我怎样才能纠正这个问题?我是否将标签错误地调用到没有考虑哪些标签被多次使用的位置?

$tagWeights[$tag['tag']]=(isset($tagWeights[$tag['tag']])$标记权重[$tag['tag']]+1:1

getTagWeights(var dumping$tagWeights[$tag['tag']]返回一个1的整数)

标记实体

class Tag
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="tag", type="string", length=255)
 */
private $tag;

/**
 * @ORM\ManyToMany(targetEntity="Blog", mappedBy="tags")
 */
protected $blogs;

public function __construct()
{
    $this->blogs = new ArrayCollection();
}

/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}

/**
 * Set tag
 *
 * @param string $tag
 * @return Tag
 */
public function setTag($tag)
{
    $this->tag = $tag;

    return $this;
}

/**
 * Get tag
 *
 * @return string 
 */
public function getTag()
{
    return $this->tag;
}

/**
 * Add blogs
 *
 * @param \AcmeBundle\Entity\Blog $blogs
 * @return Tag
 */
public function addBlog(\AcmeBundle\Entity\Blog $blogs)
{
    $this->blogs[] = $blogs;

    return $this;
}

/**
 * Remove blogs
 *
 * @param \AcmeBundle\Entity\Blog $blogs
 */
public function removeBlog(\AcmeBundle\Entity\Blog $blogs)
{
    $this->blogs->removeElement($blogs);
}

/**
 * Get blogs
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getBlogs()
{
    return $this->blogs;
}
}
/**
 * @ORM\ManyToMany(targetEntity="Tag", inversedBy="blogs")
 * @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
 */
protected $tags;

public function __construct()
{
    $this->tags = new ArrayCollection();
}

/**
 * Add tags
 *
 * @param \AcmeBundle\Entity\Tag $tags
 * @return Blog
 */
public function addTag(\AcmeBundle\Entity\Tag $tags)
{
    $this->tags[] = $tags;

    return $this;
}

/**
 * Remove tags
 *
 * @param \AcmeBundle\Entity\Tag $tags
 */
public function removeTag(\AcmeBundle\Entity\Tag $tags)
{
    $this->tags->removeElement($tags);
}

/**
 * Get tags
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getTags()
{
    return $this->tags;
}
博客实体

class Tag
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="tag", type="string", length=255)
 */
private $tag;

/**
 * @ORM\ManyToMany(targetEntity="Blog", mappedBy="tags")
 */
protected $blogs;

public function __construct()
{
    $this->blogs = new ArrayCollection();
}

/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}

/**
 * Set tag
 *
 * @param string $tag
 * @return Tag
 */
public function setTag($tag)
{
    $this->tag = $tag;

    return $this;
}

/**
 * Get tag
 *
 * @return string 
 */
public function getTag()
{
    return $this->tag;
}

/**
 * Add blogs
 *
 * @param \AcmeBundle\Entity\Blog $blogs
 * @return Tag
 */
public function addBlog(\AcmeBundle\Entity\Blog $blogs)
{
    $this->blogs[] = $blogs;

    return $this;
}

/**
 * Remove blogs
 *
 * @param \AcmeBundle\Entity\Blog $blogs
 */
public function removeBlog(\AcmeBundle\Entity\Blog $blogs)
{
    $this->blogs->removeElement($blogs);
}

/**
 * Get blogs
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getBlogs()
{
    return $this->blogs;
}
}
/**
 * @ORM\ManyToMany(targetEntity="Tag", inversedBy="blogs")
 * @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
 */
protected $tags;

public function __construct()
{
    $this->tags = new ArrayCollection();
}

/**
 * Add tags
 *
 * @param \AcmeBundle\Entity\Tag $tags
 * @return Blog
 */
public function addTag(\AcmeBundle\Entity\Tag $tags)
{
    $this->tags[] = $tags;

    return $this;
}

/**
 * Remove tags
 *
 * @param \AcmeBundle\Entity\Tag $tags
 */
public function removeTag(\AcmeBundle\Entity\Tag $tags)
{
    $this->tags->removeElement($tags);
}

/**
 * Get tags
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getTags()
{
    return $this->tags;
}

函数返回1的问题总是因为您执行了以下操作

foreach ($tags as $tag)
{
    $tagWeights[$tag['tag']] = (isset($tagWeights[$tag['tag']])) ? $tagWeights[$tag['tag']] + 1 : 1;
    var_dump($tagWeights[$tag['tag']]);
}
您对每个标记迭代一次,因此$tagWeights[$tag['tag']]对每个标记的加入次数不超过一次,因此始终具有值1

实现这一点的一种方法是使用blog,而不是如下所示的标记,这样您就不必更改太多代码:

foreach ($blogs as $blog)
{
    foreach($blog->getTags() as $tag){
        $tagWeights[$tag->getTag()] = (isset($tagWeights[$tag->getTag()])) ? $tagWeights[$tag->getTag()] + 1 : 1;
        var_dump($tagWeights[$tag->getTag()]);
    }
}
您需要将$blogs变量传递给函数,而不是$tags

public function getTagWeights($blogs)
{
    ...
}
上面的代码没有经过测试,但可能是类似的

我认为另一个问题是,在标记实体中,您没有为标记使用唯一的注释,这样,可能有一些标记具有完全相同的名称,这不是标记云的预期行为。你应该这样做:

/**
 * @var string
 *
 * @ORM\Column(name="tag", type="string", length=255, unique=true)
 */
private $tag;

好的,我已经添加了unique=true,但它仍然没有添加权重。如何解决第一个问题?@dizzyd我已经编辑了我的答案,解释了一个可能的解决方案。好的,我已经试过了,但没有找到标签。我是否需要更改getTags()方法以从blog实体获取?我需要使用getBlogs()函数来实现这一点,然后使用上面的代码。当我使用
foreach($blog->getTags()as$tag)
时,我得到以下错误:
FatalErrorException:错误:调用成员函数getTags()在/var/www/html/Symfony/src/AcmeBundle/Entity/TagRepository.php第53行的非对象上