我花了最近幾個小時試圖找到答案,但是根本沒有獲得答案。我覺得它最終會成爲我不瞭解的簡單東西。這部分代碼當然是不正確的,但我想展示我在這裏想要做的事情。我目前有一個基礎知識庫類,裏面有findAllQueryBuilder方法,可以減少代碼。現在我有大約10個存儲庫類,都需要使用findAllQueryBuilder。這個函數在我構建的基礎控制器中。主要問題是這個控制器沒有看到findAllQueryBuilder,因爲你可以看到這需要參數來確定需要哪個數據位置。我已經在我的代碼的另一個位置用接口完成了這個任務,但是這是一個類,我也將這個例子放在這裏。控制器類不能從存儲庫類中看到方法
public function listAction(Request $request, RepositoryTypeInterface $repositoryName, $table, $sql, $route)
{
$filter = $request->query->get('filter');
$repository = "Bundle:$repositoryName";
$qb = $this->getDoctrine()
->getRepository($repository, 'tenant')
->findAllQueryBuilder($filter, $table, $sql);
正如你可以在我設定的類型爲接口,以確保它知道這將是該那麼下面看。
public function newAction(Request $request, EntityTypeInterface $controllerType, formType, $repository, $routeName)
{
然後是childclass controllor
public function newAction(Request $request, EntityTypeInterface $controllerType = null, $formType = ContactType::class, $repository = 'Contact', $routeName = 'api_contacts_show')
{
$controllerType = new Contact();
return parent::newAction($request, $controllerType, $formType, $repository, $routeName);
}
中實例化它,因此上面第一個例子我已經嘗試同樣的事情,但我不知道如何將其應用到這種情況。因爲「Bundle:$ repository」是一個字符串,所使用的參數是一個字符串,它不是一個實體,所以當我需要的是它的功能時,創建一個實例是沒有意義的。我只需要一些方法來訪問這個功能。任何想法都可以工作,但我覺得我錯過了一些簡單的東西。
以下是我得到的確切錯誤, 在\ Doctrine \ Common \ Persistence \ ObjectRepository中找不到方法'findAllQueryBuilder' 在主題類中未找到引用的方法。
我敢肯定,有一種方法可以將這個概念應用於解決「看不見」功能的問題,但現在我並不完全確定。 提前謝謝任何人。
編輯: 我使用的是basecontrollor被用於其它控制器設置此功能,即:它使用映射到contactrepository類ContactEntity類,這是一個baserepository類就是findAllQueryBuilder所在的子cantactscontrollor類,我不知道如何映射。
看起來像教條認爲'\ Doctrine \ Common \ Persistence \ ObjectRepository'是您的類的存儲庫,您是否在類映射中將存儲庫設置爲您的自定義類? – ccKep
檢查編輯文件結構的更多細節 –
嗨!我不確定存在繼承是存儲庫類的問題,只要確保在您的ContactEntity註釋中包含@Entity(repositoryClass =「」)(假設您使用了註釋)。 –
SebastianGreen