Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]MCV - nie mgoe wejsc do obiektu
Forum PHP.pl > Forum > Przedszkole
dolar
Witajcie, zabralam sie za pierwszy Framework i robie na nim sklep z koszykiem.
http://fuelphp.com/docs/general/models.html
Utknelam na moemncie, gdzie sprwadzam czy dany produkt zostal juz dodany do koszyka czy nie - jesli tak to zwiekszyc powinno jego ilosc, a jesli nie to dodac nowy produkt do koszyka - i tutaj mam problem, bo nie potrafie tego zrobic...

mam taki oto kod :

Tutaj jest moj MODEL :

  1. class Koszyk extends \Model
  2. {
  3.  
  4. private static $instance;
  5.  
  6. public static function getInstance()
  7. {
  8.  
  9. if (!self::$instance) {
  10. self::$instance = new Koszyk();
  11. }
  12. return self::$instance;
  13.  
  14. }
  15.  
  16. private function __clone()
  17. {
  18.  
  19. }
  20.  
  21. private function __construct()
  22. {
  23. $koszyk = Session::get('koszyk');
  24. if ($koszyk == null) {
  25. Session::set('koszyk', array());
  26. }
  27. }
  28.  
  29.  
  30. function dodaj($idProduktu)
  31. {
  32.  
  33. $znaleziono = false;
  34.  
  35. $wybranyProdukt = Produkt::find_by_pk($idProduktu);
  36. $koszyk = Session::get('koszyk');
  37.  
  38. foreach ($koszyk as $klucz => $produkt) {
  39.  
  40. if ($produkt['id'] == $wybranyProdukt['id']) {
  41. $znaleziono = true;
  42. $koszyk[$klucz]['ilosc']++; --> TUTAJ KRZYCZY ZE BLAD, prawdopodobnie ze $klucz jest obiektem, ale nie wiem jak tam wejsc :/
  43. }
  44. }
  45.  
  46. if ($znaleziono == false) {
  47. $koszyk[] = $wybranyProdukt;
  48. Session::set('koszyk', $koszyk);
  49. }



A tak wyglada moj koszyk przy var_dump :

  1.  
  2. array(2) {
  3. [0]=>
  4. object(Model\Produkt)#26 (5) {
  5. ["_data":protected]=>
  6. array(8) {
  7. ["id"]=>
  8. string(1) "1"
  9. ["kategoria"]=>
  10. string(6) "Bluzki"
  11. ["nazwa"]=>
  12. string(6) "Tunika"
  13. ["rozmiar"]=>
  14. string(2) "40"
  15. ["cena"]=>
  16. string(4) "19.9"
  17. ["ilosc"]=>
  18. string(1) "1"
  19. ["_is_new"]=>
  20. bool(true)
  21. ["_is_frozen"]=>
  22. bool(false)
  23. }
  24. ["_is_new":protected]=>
  25. bool(true)
  26. ["_is_frozen":protected]=>
  27. bool(false)
  28. ["_sanitization_enabled":protected]=>
  29. bool(false)
  30. ["_validation":protected]=>
  31. NULL
  32. }
  33. [1]=>
  34. object(Model\Produkt)#32 (5) {
  35. ["_data":protected]=>
  36. array(6) {
  37. ["id"]=>
  38. string(1) "8"
  39. ["kategoria"]=>
  40. string(4) "Buty"
  41. ["nazwa"]=>
  42. string(6) "Kozaki"
  43. ["rozmiar"]=>
  44. string(2) "42"
  45. ["cena"]=>
  46. string(5) "139.9"
  47. ["ilosc"]=>
  48. string(1) "1"
  49. }
  50. ["_is_new":protected]=>
  51. bool(false)
  52. ["_is_frozen":protected]=>
  53. bool(false)
  54. ["_sanitization_enabled":protected]=>
  55. bool(false)
  56. ["_validation":protected]=>
  57. NULL
  58. }
  59. }
  60.  
  61.  



Co robie zle??
kapslokk
Pokaż ten błąd. Generalnie to $koszyk[$klucz] jest obiektem, wiec pewnie zeby inkrementowac wartosc musisz uzyc jakiegos settera, nie znam fuelphp, ale zaraz poszukam cos w necie
dolar
Blad taki mam :

Indirect modification of overloaded element of Model\Produkt has no effect

Dziekuje za pomoc, utknelam juz od 2h, a z racji iz to moj pierwszy framework to ciezko mi idzie :/
Damonsson
Pokaż Model\Produkt
dolar
  1. class Produkt extends \Model_Crud {
  2.  
  3. protected static $_table_name = 'produkty';
  4.  
  5. }


Model produkt mam bardzo ubogi... tylko do tabeli sie tutja dostaje.

Tka patrze na tego moejgo foreacha i nie wiem czy dobrze go w ogole robie, ale skoro $klucz jest obiektem protected, to nei wiem jakim cudem weszlam do $produkty ;p chyba ze zle mysle
kapslokk
Sprobuj zrobic $koszyk[$klucz]->ilosc = $koszyk[$klucz]->ilosc++; $koszyk[$klucz]->ilosc = $koszyk[$klucz]->ilosc+1;
dolar
Cytat(kapslokk @ 27.01.2017, 10:07:12 ) *
Sprobuj zrobic $koszyk[$klucz]->ilosc = $koszyk[$klucz]->ilosc++; $koszyk[$klucz]->ilosc = $koszyk[$klucz]->ilosc+1;


Kurcze dziala tongue.gif, tylko musialam dodac samo to :

$koszyk[$klucz]->ilosc++;

Teraz dziala. A mozna by bylo mi wytluamczyc jakim cudem? Tzn skoro $kluczj est obiektem i zeby sie do niego dotac to mozna poprzez "->"? Dobrze mysle?

Skoro tak to dlaczego przy moim foreachu gdzie mialam konstrukcje :

foreach ($koszyk as $klucz ( to jest obiekt i trapi mnie to , jak dostalam sie do $produkt, skoro on jest boiektem a nie tablica? ) => $produkt )
kapslokk
Nie $klucz jest obiektem, a $koszyk[$klucz] czyli tak naprawde $produkt ;P .
a odwołanie do elementu protected $_data przez -> działa tylko dlatego ze jest w Model_crud magiczna metoda __set i __get
dolar
Achaaa, no dobra dobra juz jasniej tongue.gif. To skoro $produkt jest obiektem, to dlaczego mi zadzialalo wejscie poprze $produkt['id'], a nie $produkt ->id ? Chyab sie zgubilam we wlasnym kodzie biggrin.gif
tongue.gif
kapslokk
Model_crud implementuje jeszcze ArrayAccess biggrin.gif Generalnie to ja tez juz sie zgubilem w kodzie tego FuelPhp. biggrin.gif

I chyba {$koszyk[$klucz]}['ilosc'] tez by zadzialalo biggrin.gif Ale nie jestem pewien biggrin.gif

Imho za duzo magii w tym wszystkim wink.gif
dolar
Cytat(kapslokk @ 27.01.2017, 10:31:08 ) *
Model_crud implementuje jeszcze ArrayAccess biggrin.gif Generalnie to ja tez juz sie zgubilem w kodzie tego FuelPhp. biggrin.gif

I chyba {$koszyk[$klucz]}['ilosc'] tez by zadzialalo biggrin.gif Ale nie jestem pewien biggrin.gif


Niestety nie zadzialalo, bo juz probowalam i wlasnie daltego naspialam posta biggrin.gif Ale dziekuje bardzo za odpowiedzi smile.gif Bardzo mi pomogly, moge programowac dalej smile.gif
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.