繁体   English   中英

Symfony2未定义的方法'findLikeFullnameArray'。 方法名称必须以findBy或findOneBy开头

[英]Symfony2 Undefined method 'findLikeFullnameArray'. The method name must start with either findBy or findOneBy

我已经阅读了有关此问题的各种解决方案,但似乎都没有用。 我真的很想知道这个问题的核心。 我将准确列出我所做的事情,因为它相对简单,我无法理解我所缺少的内容。

所以我用一个表人创建了一个简单的数据库,我正在尝试使用引导程序生成CRUD,并且可以正常工作。 我的问题是当我尝试让jquery插件与自动完成一起使用时。 接下来,我添加一个存储库来处理我的查询,那就是当我收到Symfony2未定义方法'findLikeFullnameArray'消息时。 我正在尝试仅使用注释,因此如果我的过程中出现问题,请告诉我。

这是我的命令:创建捆绑

  1. 应用程序/控制台生成:bundle --bundle-name = CompanyNameofBundle --format = annotation
  2. 捆绑名称空间:Company / nameofBundle
  3. 您是否要生成整个目录结构:是
  4. 您确认生成:返回
  5. 确认自动更新您的内核:是
  6. 确认自动更新路由:是

使用Crud创建实体

  1. app / console generate:bundle --bundle-name = CompanyNameofBundle --format = annotation捆绑名称空间:Company / nameofBundle是否要生成整个目录结构:是确认生成:返回确认自动更新内核:是确认自动更新路由:是
  2. 应用程序/控制台原则:映射:导入--force CompanyNameofBundle xml
  3. 应用程序/控制台学说:generate:entities CompanyNameofBundle
  4. 应用程序/控制台生成:学说:crud –entity = CompanyNameofBundle:Entityname --format = annotation --with-write –no-interaction

然后创建我的SearchController:

namespace Company\NameofBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Company\NameofBundle\Form\JqueryType;
use Company\NameofBundle\Form\SearchType;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Company\NameofBundle\Entity\Person;


/**
 * Search controller.
 *
 * @Route("/search")
 */
class SearchController extends Controller
{
    /**
     * @Route("/", name="search")
     * @Template()
     */
    public function indexAction()
    {
        $form   = $this->createForm(new SearchType(), null, [
            'action' => '',
            'method' => 'POST'
        ]);
        return array(
            'form'   => $form->createView(),
        );
    }
    /**
     * @Route("/person_search", name="person_search")
     * @Template()
     *
     * @param Request $request
     *
     * @return array
     */
    public function searchPersonAction(Request $request)
    {
        $q = $request->get('term');
        $em = $this->getDoctrine()->getManager();
        $results = $em->getRepository('CompanyNameofBundle:Person')->findLikeFullname($q);
        return array('results' => $results);
    }

    /**
     * @Route("/person_get", name="person_get")
     *
     * @param $id
     *
     * @return Response
     */
    public function getPersonAction($id)
    {
        $em = $this->getDoctrine()->getManager();
        $book = $em->getRepository('CompanyNameofBundle:Person')->find($id);
        return new Response($book->getFullname());
    }
    /**
     * @Route("/jquery", name="jquery")
     * @Template()
     */
    public function jqueryAction()
    {
        $form   = $this->createForm(new JqueryType(), null, [
            'action' => '',
            'method' => 'POST'
        ]);
        return array(
            'form'   => $form->createView(),
        );
    }
    /**
     * @Route("/jquery_search/{phrase}", name="jquery_search")
     *
     * @param string $phrase
     *
     * @return JsonResponse
     */
    public function searchJqueryAction($phrase)
    {
        $em = $this->getDoctrine()->getManager();
        $results = $em->getRepository('CompanyNameofBundle:Person')->findLikeFullnameArray($phrase);
        return new JsonResponse($results);
    }
}

人员实体:

<?php

namespace Company\NameofBundle\Person;

use Doctrine\ORM\Mapping as ORM;

/**
 * Person
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Company\NameofBundle\Entity\Repository\PersonRepository")
 */
class Person

{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @var string
     *
     * @ORM\Column(name="fullname", type="string", length=255)
     */
    private $fullname;
    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=255)
     */
    private $email;
    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * Set fullname
     *
     * @param string $fullname
     * @return Person
     */
    public function setFullname($fullname)
    {
        $this->fullname = $fullname;
        return $this;
    }
    /**
     * Get fullname
     *
     * @return string
     */
    public function getFullname()
    {
        return $this->fullname;
    }
    /**
     * Set email
     *
     * @param string $email
     * @return Person
     */
    public function setEmail($email)
    {
        $this->email = $email;
        return $this;
    }
    /**
     * Get email
     *
     * @return string
     */
    public function getEmail()
    {
        return $this->email;
    }
}

最后人资料库

<?php

namespace Company\NameofBundle\Entity\Repository;
use Doctrine\ORM\EntityRepository;

class PersonRepository extends EntityRepository
{

    public function findLikeFullnameArray($fullname)
    {
        return $this->createQueryBuilder('person_repository')
            ->where('person_repository.fullname LIKE :name')
            ->setParameter('name', '%' . $fullname . '%')
            ->getQuery()
            ->getArrayResult();
    }
}

万一这是我的app / config / routing.yml

company_nameofbundle:
    resource: "@CompanyNameofBundle/Controller/"
    type:     annotation
    prefix:   /

提前致谢!

第一次,您应该查看文档,以拥有一个像这样的存储库:

http://symfony.com/doc/current/book/doctrine.html

// src/AppBundle/Entity/Product.php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
 * @ORM\Entity(repositoryClass="AppBundle\Entity\ProductRepository")
 */
class Product
{
    //...
}

第二次,您必须检查是否输入了xml格式

<entity name="Acme\\StoreBundle\\Entity\\Product" repository-class="Acme\\StoreBundle\\Entity\\ProductRepository">

您不能混合使用annotationxmlyml格式来在Symfony 2中塑造实体,删除所有不必要的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM