Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Encja w Symfony
Matrix12
post 23.05.2015, 16:55:07
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 22.03.2015

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
skowron-line
post 23.05.2015, 17:18:23
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował skowron-line 23.05.2015, 17:19:53


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Comandeer
post 23.05.2015, 17:30:50
Post #3





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Nie chainging, a chaining - od łańcucha, bo tworzymy łańcuch wywołań wink.gif Ot, taka drobnostka, która uprzyjemnia korzystanie z API


--------------------
Go to the top of the page
+Quote Post
Matrix12
post 23.05.2015, 18:13:29
Post #4





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 22.03.2015

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
robertpiaty
post 23.05.2015, 18:18:05
Post #5





Grupa: Zarejestrowani
Postów: 113
Pomógł: 18
Dołączył: 7.10.2007
Skąd: Pruszków

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Matrix12
post 23.05.2015, 19:21:27
Post #6





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 22.03.2015

Ostrzeżenie: (0%)
-----


Ź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 ?
Go to the top of the page
+Quote Post
Turson
post 23.05.2015, 20:54:24
Post #7





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


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()
Go to the top of the page
+Quote Post
Matrix12
post 24.05.2015, 12:31:27
Post #8





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 22.03.2015

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Turson
post 25.05.2015, 06:37:37
Post #9





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Jak mniemam to getter getName()/getUser() (już nie wiem bo różnie nazywasz) zwraca stringa a nie obiekt
Go to the top of the page
+Quote Post
Matrix12
post 25.05.2015, 06:43:36
Post #10





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 22.03.2015

Ostrzeżenie: (0%)
-----


Dokładnie tak.
Go to the top of the page
+Quote Post
Turson
post 25.05.2015, 07:16:36
Post #11





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


  1. $User = new User();
  2. $User->setName('test');

  1. addRole($User);

O to chodzi?
Go to the top of the page
+Quote Post
Forti
post 25.05.2015, 08:46:32
Post #12





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Forti 25.05.2015, 08:48:23


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
Matrix12
post 25.05.2015, 15:44:22
Post #13





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 22.03.2015

Ostrzeżenie: (0%)
-----


Okej wiem już wszystko. Forti powiedz mi czym się różni is granted od has role tak w praktyce?
Go to the top of the page
+Quote Post
com
post 26.05.2015, 08:55:04
Post #14





Grupa: Zarejestrowani
Postów: 3 033
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


A propos nazewnictwa to takie klasy implementują fluent interface pattern, skoro mowa o fachowych nazwach.
Go to the top of the page
+Quote Post
Forti
post 26.05.2015, 09:00:54
Post #15





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

Ostrzeżenie: (0%)
-----


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


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
Matrix12
post 26.05.2015, 19:02:23
Post #16





Grupa: Zarejestrowani
Postów: 144
Pomógł: 0
Dołączył: 22.03.2015

Ostrzeżenie: (0%)
-----


Czyli jak chce sprawdzić czy obecny użytkownik ma role admin ? To wpisać $this->container->get('security.authorization_checker')->hasRole('ROLE_ADMIN') czy isGranted?
Go to the top of the page
+Quote Post
Forti
post 26.05.2015, 20:38:56
Post #17





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

Ostrzeżenie: (0%)
-----


Masz to w dokumentacji.

isGranted służy również do sprawdzania czy użytkowni jest w ogóle zalogowany.


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 14:30