我已經成功地將注入庫注入到服務中,但無法使注入在自定義用戶提供程序中工作。似乎__construct()方法永遠不會被調用,所以存儲庫永遠不可用。您應該創建用戶提供程序的方式是實現接口UserProviderInterface,但您創建的UserProvider類不會擴展具有構造函數的另一個類。當我嘗試訪問使用資料庫$這個 - > personRepository-> findStatusByUsername($用戶名),我得到的錯誤:原因如何將Symfony資源庫注入到自定義用戶提供程序中?
Using $this when not in object context
一個我覺得構造函數永遠不會得到所謂的是,它有兩個賦值到$ this,但我沒有收到有關它們的錯誤消息。
我需要的人庫將被注入,這樣我可以檢查是否試圖驗證人在應用已經批准(Person表中狀態=覈准)。
我services.yml文件具有以下設置:
parameters:
ginsberg_transportation.user.class: Ginsberg\TransportationBundle\Services\User
user_provider.class: Ginsberg\TransportationBundle\Security\User\UserProvider
services:
ginsberg_user:
class: "%ginsberg_transportation.user.class%"
user_provider:
class: "%user_provider.class%"
arguments:
["@ginsberg_person.person_repository", "@logger"]
ginsberg_person.person_repository:
class: Doctrine\ORM\EntityRepository
factory_service: doctrine.orm.default_entity_manager
factory_method: getRepository
arguments:
- Ginsberg\TransportationBundle\Entity\Person
我UserProvider.php類開始是這樣的:
namespace Ginsberg\TransportationBundle\Security\User;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
use Ginsberg\TransportationBundle\Entity\Person;
use Doctrine\ORM\EntityRepository;
class UserProvider implements UserProviderInterface
{
private $personRepository;
private $logger;
public function __construct(\Ginsberg\TransportationBundle\Entity\PersonRepository $personRepository, \Monolog\Logger $logger) {
$this->personRepository = $personRepository;
$this->logger = $logger;
}
public function loadUserByUsername($uniqname)
{
$password = "admin";
$salt = "";
$roles = array();
if (self::is_authenticated() && self::is_approved()) {
if (self::is_superuser()) {
$roles[] = 'ROLE_SUPER_ADMIN';
} elseif (self::is_admin()) {
$roles[] = 'ROLE_ADMIN';
} elseif (self::is_eligible() && self::is_approved()) {
$roles[] = 'ROLE_USER';
}
return new User($uniqname, $password, $salt, $roles);
}
throw new UsernameNotFoundException(
sprintf('Username "%s" does not exist.', $uniqname));
}
...
public static function is_approved()
{
$uniqname = self::get_uniqname();
$status = $this->personRepository->findStatusByUsername($username);
return($status == 'approved') ? TRUE : FALSE;
}
我也使用屬性注射過嘗試,但塔也沒有工作。
我應該讓我的UserProvider類擴展另一個適當的類,它可以使用構造函數嗎?如果是這樣,關於什麼課程適合的想法?
感謝您的任何建議。
您是否將您的服務和自定義用戶提供程序集成到了* security.yml *中? – Javad
factory_service和factory_method已棄用。所以,你應該使用'工廠:[「@ doctrine.orm.entity_manager」,「getRepository」]'而不是 –