【发布时间】:2015-08-07 15:53:00
【问题描述】:
我已阅读了有关此问题的各种解决方案,但似乎没有一个有效。我真的很想知道这个问题的核心是什么。我将准确列出我所做的,因为它相对简单,我无法理解我错过了什么。
所以我创建了一个带有表人的简单数据库,我正在尝试使用引导程序生成 CRUD,我可以正常工作。我的问题是当我尝试让 jquery 插件使用自动完成功能时。接下来我添加了一个存储库来处理我的查询,这就是我收到 Symfony2 Undefined method 'findLikeFullnameArray' 消息的时候。我正在尝试仅使用注释,所以如果我的过程中有问题,请告诉我。
这是我的命令: 创建捆绑包
- app/console 生成:bundle --bundle-name=CompanyNameofBundle --format=annotation
- Bundle 命名空间:Company/nameofBundle
- 是否要生成整个目录结构:是的
- 是否确认生成:返回
- 确认内核的自动更新:是
- 确认自动更新路由:是
使用 crud 创建实体
- app/console 生成:bundle --bundle-name=CompanyNameofBundle --format=annotation Bundle 命名空间:Company/nameofBundle 是否要生成整个目录结构:是 你确认代:return 确认内核的自动更新:是 确认路由的自动更新:是
- 应用程序/控制台原则:映射:import --force CompanyNameofBundle xml
- app/console 原则:generate:entities CompanyNameofBundle
- app/console generate:doctrine: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;
}
}
最后是 PersonRepository
<?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: /
提前致谢!
【问题讨论】:
-
您是否检查了所有命名空间和所有文件的路径?你清除缓存了吗?
-
是的,我应该提到我也运行过:app/console cache:clear 和 app/console dictionary:cache:clear-metadata
-
你也可以检查你之前没有生成过yml或者xml格式。
-
Sylvain 你能详细说明一下吗,因为我已经做了好几次了,所以我想确保我到处都检查过?
-
好吧,这只是为了检查您是否放置了 xml 格式
标签: php symfony doctrine-orm