Orm symfony2中的未知实体命名空间别名
嘿,我的symfony2项目中有两个包。一个是Bundle,另一个是PatentBundle 我的app/config/route.yml文件是Orm symfony2中的未知实体命名空间别名,orm,symfony,annotations,doctrine-orm,Orm,Symfony,Annotations,Doctrine Orm,嘿,我的symfony2项目中有两个包。一个是Bundle,另一个是PatentBundle 我的app/config/route.yml文件是 MunichInnovationGroupPatentBundle: resource: "@MunichInnovationGroupPatentBundle/Controller/" type: annotation prefix: / defaults: { _controller: "MunichInnovationGroupPa
MunichInnovationGroupPatentBundle:
resource: "@MunichInnovationGroupPatentBundle/Controller/"
type: annotation
prefix: /
defaults: { _controller: "MunichInnovationGroupPatentBundle:Default:index" }
MunichInnovationGroupBundle:
resource: "@MunichInnovationGroupBundle/Controller/"
type: annotation
prefix: /v1
defaults: { _controller: "MunichInnovationGroupBundle:Patent:index" }
login_check:
pattern: /login_check
logout:
pattern: /logout
我的控制器里有
<?php
namespace MunichInnovationGroup\PatentBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use JMS\SecurityExtraPatentBundle\Annotation\Secure;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Security\Core\SecurityContext;
use MunichInnovationGroup\PatentBundle\Entity\Log;
use MunichInnovationGroup\PatentBundle\Entity\UserPatent;
use MunichInnovationGroup\PatentBundle\Entity\PmPortfolios;
use MunichInnovationGroup\PatentBundle\Entity\UmUsers;
use MunichInnovationGroup\PatentBundle\Entity\PmPatentgroups;
use MunichInnovationGroup\PatentBundle\Form\PortfolioType;
use MunichInnovationGroup\PatentBundle\Util\SecurityHelper;
use Exception;
/**
* Portfolio controller.
* @Route("/portfolio")
*/
class PortfolioController extends Controller {
/**
* Index action.
*
* @Route("/", name="v2_pm_portfolio")
* @Template("MunichInnovationGroupPatentBundle:Portfolio:index.html.twig")
*/
public function indexAction(Request $request) {
$portfolios = $this->getDoctrine()
->getRepository('MunichInnovationGroupPatentBundle:PmPortfolios')
->findBy(array('user' => '$user_id'));
// rest of the method
}
我无法找出这个错误
如果有人知道我经常在谷歌上搜索它,请帮助我:(
提前谢谢
500内部服务器错误-或异常检查您的捆绑逻辑名称(MunichInnovationGroupPatentBundle)。捆绑逻辑名称是捆绑的主要类的名称,例如JobsBundle
并提供您的实体源代码。请检查您的config.yml 在
实体经理的映射一节中进行了审查
您应该有类似于MunichInnovationGroupPatentBundle:~
即:
doctrine:
orm:
entity_managers:
defaults:
mappings:
MunichInnovationGroupPatentBundle: ~
当我尝试使用没有核心文件夹名的bandle名称时,我遇到了这个问题。它位于config/security.yml中
在我的例子中,文件夹结构是下一个src/Dp/UserBundle/
我改变了这个
`供应商:
main:
entity: { class: UserBundle:User, property: username }`
main:
entity: { class: DpUserBundle:User, property: username }`
对此
`供应商:
main:
entity: { class: UserBundle:User, property: username }`
main:
entity: { class: DpUserBundle:User, property: username }`
所以,复制未知实体名称的名称并搜索项目中的每个条目,检查-它们必须具有文件夹前缀(在我的情况下是Dp)在Symfony版本2.3.7中,我使用了companysomethingbundle:EntityRequired的名称,例如AcmeBlogBundle:User,它可以工作
自动映射:在config.yml中的orm:下使用了true(默认值)。如果使用多个实体管理器,并且未在控制器函数中指定实体管理器,则会发生此错误
$em = $this->get('doctrine.orm.//your_entity_manager_name_here//_entity_manager');
$dql = "SELECT ...";
$query = $em->createQuery($dql);
这对我很有用。在我的例子中,我在providers下的security.yml中缺少名称空间名称
我有:
实体:{class:AdministratorBundle:AdminUser}
并且需要:
实体:{class:NamespaceAdministratorBundle:AdminUser}
文档说明,只要您的实体位于捆绑包的实体命名空间下,您就可以使用字符串
作为
您的bundle是MunichInnovationGroupBundle因此而不是
->getRepository('MunichInnovationGroupPatentBundle:PmPortfolios')
使用
如果您使用2个或更多实体管理器,则还需要指定管理器
getManager(“您的经理”)
通过添加一些字段,尝试在config.yml文件中更加明确:
orm:
...
mappings:
MunichInnovationGroupPatentBundle:
type: annotation
dir: "MunichInnovationGroupPatentBundle/Controller"
is_bundle: true
prefix: MunichInnovationGroup\PatentBundle
alias: MunichInnovationGroupPatentBundle
[more mappings..]
请检查config.yml+AppKernel.php
config.yml必须是
orm:
auto_generate_proxy_classes: "%kernel.debug%"
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
或将自动映射替换为
mappings:
StoreShopBundle: ~
有关更多信息,请检查以下内容:
在AppKernel.php中
不要忘记检查捆绑包是否已激活:
new MunichInnovationGroup\PatentBundle\MunichInnovationGroupPatentBundle(),
打开你的app\config.yml,必须是
orm:
auto_generate_proxy_classes: "%kernel.debug%"
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
replace to
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
MunichInnovationGroupPatentBundle: ~
如果名称空间正确,请尝试检查pmportfolions实体。另一种可能的解决方案是:当我将查询更改为$em=$this->getDoctrine()->getEntityManager('pp_userdat');em->->->getRepository('MunichInnovationGroupPatentBundle:pmportfolions')->findBy(数组('user'=>'$user\u id'));然后它在ORM致命错误中给了我一些代理错误:条令\ORM\ProxyFactory::getProxy()[function.require]:打开所需的“C:/wamp/www/idp/app/cache/dev/doctor/ORM/Proxies\MunichInnovationGroupPatentBundleEntityUmUsersProxy.php”(include_path=”;C:\php\pear')在C:\wamp\www\idp\vendor\doctrine\lib\doctrine\ORM\Proxy\ProxyFactory.php第85行检查app/cache文件夹权限中,可能会有帮助,我建议您使用此错误创建另一个问题,如果您不能快速解决此问题,那么使用自动映射还不够吗:true?我在删除SF中的默认自动映射=true时遇到了此问题2.3应用程序的配置,以便在SF2引发自动映射不是有效子级的异常后添加stof/doctrineextensionsbundle映射。将自动映射重新添加为“映射”节点的同级(默认值的子级,而不是“orm”的直接子级)以上解决了问题。这个答案解决了我的问题。SF,通过该控制器查看名称空间,并正确启动生成实体。答案中的完整描述:我忘记了捆绑包的根类在其名称的开头包含名称空间。谢谢!其他示例:公司\MyBundle
的根类是CompanyBundle
,而不是MyBundle
。我正要添加一个这样的响应,这种方法对我有效,但直到我将别名:
更改为与MunichInnovationGroupPatentBundle
不同的任何内容,比如说:别名:MunichInnovation
这个答案应该移到上面。我几乎看到了圣霍普,然后我尝试了这个解决方案,它奏效了。先生,你刚刚救了我一命!过去两天我一直在为此发愁。
mappings:
StoreShopBundle: ~
new MunichInnovationGroup\PatentBundle\MunichInnovationGroupPatentBundle(),
orm:
auto_generate_proxy_classes: "%kernel.debug%"
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
replace to
orm:
auto_generate_proxy_classes: '%kernel.debug%'
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
MunichInnovationGroupPatentBundle: ~