Symfony2プロジェクトには2つのバンドルがあります。 1つはBundleで、もう1つはPatentBundleです。
私のapp/config/route.ymlファイルは
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
}
編集:
エンティティクラス
<?php
namespace MunichInnovationGroup\PatentBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* MunichInnovationGroup\PatentBundle\Entity\PmPortfolios
*
* @ORM\Table(name="pm_portfolios")
* @ORM\Entity
*/
class PmPortfolios
{
/**
* @var string $id
*
* @ORM\Column(name="id", type="string", length=36, nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
/**
* @var string $portfolioName
*
* @ORM\Column(name="portfolio_name", type="string", length=255, nullable=false)
*/
private $portfolioName;
/**
* @var text $description
*
* @ORM\Column(name="description", type="text", nullable=true)
*/
private $description;
/**
* @var string $permalink
*
* @ORM\Column(name="permalink", type="string", length=255, nullable=false)
*/
private $permalink;
/**
* @var string $sharingCode
*
* @ORM\Column(name="sharing_code", type="string", length=255, nullable=false)
*/
private $sharingCode;
/**
* @var boolean $shared
*
* @ORM\Column(name="shared", type="boolean", nullable=false)
*/
private $shared;
/**
* @var integer $sharedPortfolioCalls
*
* @ORM\Column(name="shared_portfolio_calls", type="integer", nullable=true)
*/
private $sharedPortfolioCalls;
/**
* @var boolean $isDefault
*
* @ORM\Column(name="is_default", type="boolean", nullable=false)
*/
private $isDefault;
/**
* @var UmUsers
*
* @ORM\ManyToOne(targetEntity="UmUsers")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
* })
*/
private $user;
/**
* Get id
*
* @return string
*/
public function getId()
{
return $this->id;
}
/**
* Set portfolioName
*
* @param string $portfolioName
*/
public function setPortfolioName($portfolioName)
{
$this->portfolioName = $portfolioName;
}
/**
* Get portfolioName
*
* @return string
*/
public function getPortfolioName()
{
return $this->portfolioName;
}
/**
* Set description
*
* @param text $description
*/
public function setDescription($description)
{
$this->description = $description;
}
/**
* Get description
*
* @return text
*/
public function getDescription()
{
return $this->description;
}
/**
* Set permalink
*
* @param string $permalink
*/
public function setPermalink($permalink)
{
$this->permalink = $permalink;
}
/**
* Get permalink
*
* @return string
*/
public function getPermalink()
{
return $this->permalink;
}
/**
* Set sharingCode
*
* @param string $sharingCode
*/
public function setSharingCode($sharingCode)
{
$this->sharingCode = $sharingCode;
}
/**
* Get sharingCode
*
* @return string
*/
public function getSharingCode()
{
return $this->sharingCode;
}
/**
* Set shared
*
* @param boolean $shared
*/
public function setShared($shared)
{
$this->shared = $shared;
}
/**
* Get shared
*
* @return boolean
*/
public function getShared()
{
return $this->shared;
}
/**
* Set sharedPortfolioCalls
*
* @param integer $sharedPortfolioCalls
*/
public function setSharedPortfolioCalls($sharedPortfolioCalls)
{
$this->sharedPortfolioCalls = $sharedPortfolioCalls;
}
/**
* Get sharedPortfolioCalls
*
* @return integer
*/
public function getSharedPortfolioCalls()
{
return $this->sharedPortfolioCalls;
}
/**
* Set isDefault
*
* @param boolean $isDefault
*/
public function setIsDefault($isDefault)
{
$this->isDefault = $isDefault;
}
/**
* Get isDefault
*
* @return boolean
*/
public function getIsDefault()
{
return $this->isDefault;
}
/**
* Set user
*
* @param MunichInnovationGroup\PatentBundle\Entity\UmUsers $user
*/
public function setUser(\MunichInnovationGroup\PatentBundle\Entity\UmUsers $user)
{
$this->user = $user;
}
/**
* Get user
*
* @return MunichInnovationGroup\PatentBundle\Entity\UmUsers
*/
public function getUser()
{
return $this->user;
}
}
私のバンドルのメインクラス:MunichInnovationGroupPatentBundle.php
<?php
namespace MunichInnovationGroup\PatentBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class MunichInnovationGroupPatentBundle extends Bundle
{
}
localhost/web/app_dev.php/portfolioをロードしようとしたとき
それは言う
Unknown Entity namespace alias 'MunichInnovationGroupPatentBundle'.
私はこのエラーを理解できません。誰かが私がそれをたくさんググったアイデアを持っているなら私を助けてください:(
事前の感謝500内部サーバーエラー-ORMException
Config.ymlを確認してください。
entity_managers
のセクションmappings
でレビューしました。MunichInnovationGroupPatentBundle: ~
のようなものが必要です
あれは:
doctrine:
orm:
entity_managers:
defaults:
mappings:
MunichInnovationGroupPatentBundle: ~
私の場合、プロバイダーの下のsecurity.ymlに名前空間名がありませんでした
私が持っていた:
entity: { class: AdministratorBundle:AdminUser }
そして持っている必要がありました:
entity: { class: NamespaceAdministratorBundle:AdminUser }
2つ以上のエンティティマネージャーを使用する場合は、マネージャーも指定する必要がありますgetManager( 'YourManager')
$repository =
$this->getDoctrine()
->getManager('YourManager')
->getRepository('YourBundle:YourEntity');
バンドル論理名(MunichInnovationGroupPatentBundle)を確認します。バンドルの論理名は、バンドルのメインクラスの名前です。 JobsBundle
エンティティのソースコードを提供します。
ドキュメント ここ には、文字列'MunichInnovationGroupPatentBundle:PmPortfolios'
へのショートカットとして'MunichInnovationGroupPatentBundle\Entity\PmPortfolios'
エンティティがバンドルのEntity名前空間に存在する限り。
あなたのバンドルはMunichInnovationGroupBundleなので、代わりに
->getRepository('MunichInnovationGroupPatentBundle:PmPortfolios')
使用する
->getRepository('MunichInnovationGroupPatentBundle\Entity\PmPortfolios')
Config.yml + AppKernel.phpを確認してください
config.ymlは
orm:
auto_generate_proxy_classes: "%kernel.debug%"
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
またはauto_mappingを
mappings:
StoreShopBundle: ~
詳細については、これを確認してください: https://stackoverflow.com/a/37652091/5809937
AppKernel.phpで、バンドルがアクティブ化されているかどうかを確認することを忘れないでください。
new MunichInnovationGroup\PatentBundle\MunichInnovationGroupPatentBundle(),
いくつかのフィールドを追加して、config.ymlファイルでより明示的にしてみてください:
orm:
...
mappings:
MunichInnovationGroupPatentBundle:
type: annotation
dir: "MunichInnovationGroupPatentBundle/Controller"
is_bundle: true
prefix: MunichInnovationGroup\PatentBundle
alias: MunichInnovationGroupPatentBundle
[more mappings..]
Symfonyバージョン2.3.7と同様に、NameofCompanySomethingBundle:EntityRequiredを使用しました。 AcmeBlogBundle:Userと機能します。
auto-mapping:true(デフォルト)がconfig.ymlのorm:で使用されました。
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: ~
コアフォルダー名なしでバンドル名を使用しようとすると、これが発生しました。それはconfig/security.ymlにありました
私の場合のフォルダ構造は次のsrc/Dp/UserBundle/...です。
私はこの `プロバイダーを変更しました:
main:
entity: { class: UserBundle:User, property: username }`
この `プロバイダーへ:
main:
entity: { class: DpUserBundle:User, property: username }`
したがって、不明なエンティティ名の名前をコピーし、プロジェクト内の各エントリを検索します。チェックします-それらはフォルダプレフィックス(私の場合はDp)である必要があります
このエラーは、複数のエンティティマネージャーを使用していて、コントローラー関数でエンティティマネージャーを指定していない場合に発生します。
$em = $this->get('doctrine.orm.//your_entity_manager_name_here//_entity_manager');
$dql = "SELECT ...";
$query = $em->createQuery($dql);
これは私のために働いた。