Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Encja w Symfony
Forum PHP.pl > Forum > PHP
Matrix12
Witam,


mam pytanie. Otóż w encji symfony2 w każdym setterze jest "return $this". Moje pytanie brzmi po co ? Skoro i tak ustawiamy jakaś wartość na jakąś zmienną to geterem i tak uzyskamy dostęp do danej właściwości. Nie rozumiem tego, może mi ktoś wyjasnić?
skowron-line
to sie fachowo nazywa chainging (albo jakos tak)
i jak masz return $this to mozesz robic
  1. $a = new Object();
  2. $a->setName('a')->setAge(12)->setEmail('abc@gmail.com')

a bez chaingingu
  1. $a = new Object();
  2. $a->setName('a');
  3. $a->setAge(12);
  4. $a->setEmail('abc@gmail.com');


ogólnie chodzi o to że metoda set zwraca obiekt klasy i nie dotyczy to tylko metod set ale wszystkich metod ktore zmieniaja stan obiektu.
Comandeer
Nie chainging, a chaining - od łańcucha, bo tworzymy łańcuch wywołań wink.gif Ot, taka drobnostka, która uprzyjemnia korzystanie z API
Matrix12
Okej rozumiem. A powiedzcie mi, bo okej setter ustawi np. $this->name = $name; i w getterze mogę to wywołać, ale wywołam tylko tą właściwość(var_dump z tego będzie string(20) jakiśname) , a jak wywołać to jako obiekt?
robertpiaty
Nie bardzo Cię rozumiem. Jeśli masz $name jako string to geter Ci zwróci tego stringa. Jeśli chcesz mieć obiekt to robisz obiekt z tej klasy.
Matrix12
Źle napisałem,


mam klasę User i klasę Role, ale np. żeby dodać role muszę wstrzyknąć nazwę użytkowniak obiekt user ale nie chce całego tylko np. settera z username jak wrzucę mu poprostu tego stringa to wywali błąd, a rozumiem, że mogę zrobić to tak addRole(new User->setName('admin')) i będzie okej tak ?
Turson
Cytat(Comandeer @ 23.05.2015, 18:30:50 ) *
Nie chainging, a chaining - od łańcucha, bo tworzymy łańcuch wywołań wink.gif Ot, taka drobnostka, która uprzyjemnia korzystanie z API

Lub fluent setters

Cytat(Matrix12 @ 23.05.2015, 20:21:27 ) *
Źle napisałem,


mam klasę User i klasę Role, ale np. żeby dodać role muszę wstrzyknąć nazwę użytkowniak obiekt user ale nie chce całego tylko np. settera z username jak wrzucę mu poprostu tego stringa to wywali błąd, a rozumiem, że mogę zrobić to tak addRole(new User->setName('admin')) i będzie okej tak ?

Skoro w addRole() musisz przekazać stringa jako parametr, to skorzystasz z getName()
Matrix12
Musisz przekazać w obiekt User który posiada tylko naazwe użytkownika . Jak dam samo getUser to powinno wywalić błąd bo przekazuje czystego stringa a nie obiekt
Turson
Jak mniemam to getter getName()/getUser() (już nie wiem bo różnie nazywasz) zwraca stringa a nie obiekt
Matrix12
Dokładnie tak.
Turson
  1. $User = new User();
  2. $User->setName('test');

  1. addRole($User);

O to chodzi?
Forti
Przecież to się robi tak:

  1.  
  2. $user = new User() // obojętnie jak go tworzymy, czy w ten sposób czy np. FOSbundle.
  3. $user->addRole('DEFINED_ROLE_IN_APP_CONFIG_SECURITY_YML');


i później sprawdzasz:

  1. $this->container->get('security.authorization_checker')->isGranted($attributes, $object);
  2.  
  3. //aby sprawdzić czy zalogowany uzytkownik posiada SOME_ROLE:
  4. $this->container->get('security.authorization_checker')->isGranted('SOME_ROLE');



To są podstawy dokumentacji symfony.. w czym problem?
Matrix12
Okej wiem już wszystko. Forti powiedz mi czym się różni is granted od has role tak w praktyce?
com
A propos nazewnictwa to takie klasy implementują fluent interface pattern, skoro mowa o fachowych nazwach.
Forti
Jeżeli dobrze kojarzę, to hasRole to nic innego jak getter w encji user domyślnie wbudowane w FOSUserBundle. Sprawdza czy user ma ROLE. Ogólnie w FOSUserBundle działa to na zasadzie, że możesz użytkownikowi dodać kilka ról, np. masz:


ROLE_USER
ROLE_MODERATOR
ROLE_REDAKTOR
ROLE_ADMIN

i chcesz aby user X miał redaktora, ale nie moderatora. Można to zrobić w postaci hierarchi, że user > redaktor, user > moderator, a nie moderator > redaktor. I wówczas user ma przypisane dwie role.


Wydaje mi się że nie ma różnicy wink.gif isGranted to po prostu wrapper na

  1. $this->container->get('security.authorization_checker')->isGranted($attributes, $object)


gdzie odwołujesz się do zalogowanego obecnie user, a hasRole możesz sprawdzić role dla innego użytkownika.

Troche chaotycznie to napisałem wink.gif
Matrix12
Czyli jak chce sprawdzić czy obecny użytkownik ma role admin ? To wpisać $this->container->get('security.authorization_checker')->hasRole('ROLE_ADMIN') czy isGranted?
Forti
Masz to w dokumentacji.

isGranted służy również do sprawdzania czy użytkowni jest w ogóle zalogowany.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.