Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Kohana] Nie widzi wartości zmiennej w metodach klasy
Max Damage
post
Post #1





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Cześć, mam dziwny problem, ale najpierw kod:
  1. class Profil_Controller extends Index_Controller {
  2. protected $id;
  3. protected $profil;
  4. public function __construct(){
  5. parent::__construct();
  6. $this->profil=new Profil_Model;
  7. $this->template->menu=new View('profil_menu');
  8. }
  9. public function index($index){
  10. if(!$this->auth->logged_in() || !isset($index))
  11. url::redirect('index.php/index');
  12. $this->id=$index;
  13. $this->template->menu->id=$index;
  14. $wynik=$this->profil->informacje($index);
  15. $this->template->content=new View('informacje');
  16. $this->template->content->informacje=$wynik;
  17. $this->template->render(TRUE);
  18. }
  19. public function informacje(){
  20. echo $this->id;
  21. $id = ($this->id == $this->session->get('id')) ? $this->session->get('id') : $this->id;
  22. $wynik=$this->profil->informacje($id);
  23. $this->template->content=new View('informacje');
  24. $this->template->content->informacje=$wynik;
  25. $this->template->render(TRUE);
  26. }

Przy wejściu do profilu użytkownika odpalam metodę index, i wszystko działa, gdy wybiorę w menu informacje, nie pojawiają się żadne informacje. Problemem jest to że nie wypisuje żadnej wartości $this->id.
W tym kontrolerze mam także inne metody: do zmiany hasła, swoich danych, uploadu avatara oraz ulubione. Nie jestem pewien czy dobrze to podzieliłem, czy nie porozbijać tego jakoś inaczej (dodatkowe kontrolery etc.)?


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
skowron-line
post
Post #2





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

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


Odpalasz akcje informacje a wartość $id ustawiasz w ackoj index. Pomyśl chwile nad tym.


--------------------
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
Max Damage
post
Post #3





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


Hm, zawsze przy ładowaniu strony tworzony jest nowy obiekt klasy po czym wywoływana jest dla niego odpowiednia metoda z podanymi argumentami?
Jeśli tak, to czy mogę jakoś inaczej przechować taką zmienną w klasie? Pozmieniałem 3 linijki na takie:
  1. protected static $id;
  2. W index:
  3. self::$id=$index;
  4. W informacje:
  5. $idd =(self::$id == $this->session->get('id')) ? $this->session->get('id') : self::$id;

Ale nadal nie działa. Nie wiem jak to napisać.


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





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

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


@Max Damage nie mam bladego pojęcia o czym ty mówisz
nie możesz poprostu przekazać tego ID jako parametr methody informacje questionmark.gif


--------------------
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
Max Damage
post
Post #5





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


No pewnie że mogę, równie dobrze mógłbym go przechowywać w sesji, ale nie chce smile.gif Chcę to id przechowywać w klasie jako składową, na pewno jest na to jakiś sposób.


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
skowron-line
post
Post #6





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

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


Cytat(Max Damage @ 7.11.2009, 16:16:05 ) *
No pewnie że mogę, równie dobrze mógłbym go przechowywać w sesji, ale nie chce smile.gif Chcę to id przechowywać w klasie jako składową, na pewno jest na to jakiś sposób.

A słyszałeś o zasadzie KISS questionmark.gif
  1. class A
  2. {
  3. protected $id;
  4.  
  5. public function index()
  6. {
  7. $this->id = 10;
  8. }
  9.  
  10. public function informacje()
  11. {
  12. echo $this->id;
  13. }
  14. }


i teraz odpal sobie to na 2 sposoby
1 tak jak ty robisz
  1. $q = new A;
  2. $q->informacje();

i 2 właściwy
  1. $q = new A;
  2. $q->index();
  3. $q->informacje();

Edit:
  1. self::$id=$index;

A tak też możesz sobie pobierać wartość pod warunkiem że ta zmienna ma zadeklarowaną wartość. podstawy OOP się kłaniają.

Ten post edytował skowron-line 7.11.2009, 17:40:30


--------------------
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
Max Damage
post
Post #7





Grupa: Zarejestrowani
Postów: 246
Pomógł: 19
Dołączył: 14.06.2007

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


O żadnej zasadzie kiss nie słyszałem, ale kod który podałeś jest równoważny mojemu z pierwszego postu. Jeśli chodzi o odpalenie tego to muszę napisać wtedy coś takiego: profil/index/3/informacje ,a ja właśnie chciałem uniknąć parametrów i mieć coś takiego: profil/informacje. A poza tym najpierw i tak odpalam index, więc zmienna powinna być przepisana do składowej, jak wywołuje potem informacje to powinienem ją odczytać. Ze static kombinowałem bo założyłem, że za każdym razem jest tworzony przez framework nowy obiekt klasy, ale w sumie też bez sensu bo przecież jest wielu użytkowników. Problem chyba chwilowo nie do przeskoczenia, więc jednak zrobię po prostu metodę informacje (oraz inne) z parametrem. Dzięki za chęć pomocy :)


--------------------
"Wszyscy wiedzą, że czegoś nie da się zrobić, i przychodzi taki jeden, który nie wie, że się nie da, i on właśnie to robi." - Albert Einstein
Go to the top of the page
+Quote Post
marcio
post
Post #8





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Kod
A poza tym najpierw i tak odpalam index, więc zmienna powinna być przepisana do składowej, jak wywołuje potem informacje to powinienem ją odczytać


Problem w tym ze za kazdym refreshem strony tworzy sie nowy obiekt i jego pola tak jakby sie ustawialy na defaultowe wartosci.



--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
skowron-line
post
Post #9





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

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


Cytat(Max Damage @ 7.11.2009, 19:36:20 ) *
O żadnej zasadzie kiss nie słyszałem,

http://pl.wikipedia.org/wiki/KISS_%28regu%C5%82a%29


--------------------
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

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 Aktualny czas: 19.08.2025 - 18:04