Diskuze: Autentikace | Doctrine 2
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Ahoj,
proměnné User::$ban
, či Ban::$permanent
atd. máš
určitě deklarované jako private
.
Musíš k nim dopsat settery a volat například
$user->getBan()->isPermanent()
. Dále se ujisti, že v
proměnné $user
máš skutečně isntanci tvé Entity.
Ahoj, mohl by ses prosím podívat na následují kódy a zkusit najít
chybu? Já už z toho mám nerva
User entita:
/*
* @ORM\Entity
* @ORM\Table(name="users")
*/
final class User extends BaseEntity
{
/**
* @ORM\OneToOne(targetEntity="Ban", mappedBy="user")
*/
public $ban;
...
ban entita:
/*
* @ORM\Entity
* @ORM\Table(name="bans")
*/
final class Ban extends BaseEntity
{
...
/**
* @ORM\OneToOne(targetEntity="User", inversedBy="ban")
*/
public $user;
/**
* @ORM\Column(type="integer", length=1)
*/
protected $permanent;
/**
* @return bool
*/
public function isPermanent()
{
return $this->permanent === 1;
}
autentikace:
...
if($user->ban->isPermanent()) throw new AuthenticationException($this->translator->translate('exception.banPermanent'));
...
Chybová hláška: Call to a member function isPermanent() on null
ahoj a mas v User classe niekde inicializaciu
$ban = New Ban();
/**
* @ORM\Entity
*/
final class User
{
use \Kdyby\Doctrine\Entities\Attributes\Identifier;
/**
* @ORM\OneToOne(targetEntity="Ban", cascade={"persist"})
* @var Ban
*/
private $ban;
public function __construct()
{
$this->ban = new Ban();
}
public function getBan()
{
return $this->ban;
}
}
/**
* @ORM\Entity
*/
final class Ban
{
/**
* @ORM\Column(type="boolean")
* @var bool
*/
private $permanent = FALSE;
public function isPermanent()
{
return $this->permanent;
}
public function setPermanent($permanent)
{
$this->permanent = (bool) $permanent;
}
}
Trochu jsem ti to opravil, ale psal jsem to tady, takže je možné, že tam
je nějaké překlep.
Upravil jsem:
permanent
property - doctrine má přímo typ
booleanban
na private => entity Ban by neměla
jít nasetovat zvenčícascade={"persist"}
=> při persistování
entity Usera se ti automaticky persistne i jeho entita BanBaseEntity
, ale pokud jen ID, tak je
lepší řešení použít daný trait (jsme v sekci Nette tak počítám s
tím, že používáš kdyby/doctrine
Doporučuji ti si prostudovat dokumentaci Doctrine a při psaní entit
(zejména asociací mezi entitami) mít ji otevřenou, než se do toho vžiješ
ASOCIACE
DATOVÉ TYPY
Zobrazeno 5 zpráv z 5.