2015-07-21 72 views
0

我需要在symfony2中使用traits。擴展不同父母的不同儲存庫仍然使用一些常用方法。我創建了一個包含這些常用方法的特徵。不幸的是,當我打電話的動作,Symfony2的拋出一個錯誤的說法:Symfony2中的特徵錯誤

Parse Error: syntax error, unexpected 'Trait' (T_TRAIT), expecting identifier (T_STRING) 
in src/AppBundle/Entity/Repository/CategoryRepository.php line 14 

這裏是倉庫

namespace AppBundle\Entity\Repository; 

use Gedmo\Tree\Entity\Repository\NestedTreeRepository; 
use AppBundle\Trait\HasDomainRepositoryTrait; 
/** 
* CategoryRepository 
* 
* This class was generated by the Doctrine ORM. Add your own custom 
* repository methods below. 
*/ 
class CategoryRepository extends NestedTreeRepository 
{ 
    use HasDomainRepositoryTrait; 

    public function search($domain, $onlyActive, $searchString = null) 
    { 
     $builder = $this->createBaseQuery($domain, $onlyActive); 

     if ($searchString) { 
      $builder 
        ->andWhere('e.name LIKE :searchString') 
        ->setParameter('searchString', '%'.strtolower($searchString).'%') 
        ; 
     } 

     return $builder; 
    } 
} 

這裏的一個特質:

namespace AppBundle\Trait; 

trait HasDomainRepositoryTrait 
{ 
    public function createBaseQuery($domain, $onlyActive = false) 
    { 
     $builder = $this->createQueryBuilder('e'); 

     if ($domain) { 
      $builder 
        ->andWhere('e.domain = :domain') 
        ->setParameter('domain', $domain) 
        ; 
     } 

     if ($onlyActive) { 
      $qb->andWhere(sprintf('e.enabled = %s', $onlyActive)); 
     } 

     return $builder; 
    } 
} 

我使用PHP 5.6和Traits工作(我在項目之外運行了一些簡單的測試)。 我不明白什麼是錯的。

+1

您可能無法使命名空間爲「特質」。嘗試將名稱空間更改爲其他名稱。 – Jessica

+1

就是這樣,謝謝。讓它成爲答案,我會接受它。 – Hakim

回答

6

您可能無法使您的名稱空間爲「特質」。嘗試將名稱空間更改爲其他名稱。

+0

恥辱,這是這種情況。它的工作,但似乎很愚蠢,我不知道爲什麼這個限制存在。 – Ryall

+1

@Ryall我認爲是一樣的。我使用了命名空間「Mixin」,但是我的特徵被命名爲「'ChosenNameTrait」,您選擇了哪一個? – Gus

+0

@Gus好主意 - 這是一個很好的選擇 – Ryall