• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP, tablica - problem

Object Storage Arubacloud
–2 głosów
277 wizyt
pytanie zadane 12 lipca 2016 w PHP przez jpacanowski VIP (101,940 p.)

Hej,

Tworzę własny framework PHP https://github.com/jpacanowski/PHPFramework i mam problem z przekazaniem tablicy asocjacyjnej jako parametr funkcji.

Przekazuję tablicę jako parametr funkcji:

$data['body'] = 'Hello world';
return View::make('index', $data);

Jednak w metodzie View::make() gdy próbuję wyświetlić wartość $data['body']

echo $data['body'];

dostaję:

Notice: Undefined index: body in /Applications/MAMP/htdocs/PHPFramework/libs/View.php on line 9

var_dump z metody View::make wygląda tak:

array(1) {
  [0]=>
  array(1) {
    ["body"]=>
    string(11) "Hello world"
  }
}
Array
(
    [0] => Array
        (
            [body] => Hello world
        )

)

i nie wiem jak się dostać do wartości elementu ['body'] ;\\

komentarz 12 lipca 2016 przez maly Nałogowiec (37,190 p.)

Nie na temat, ale chciałem tylko zwrócić uwagę na to że masz zabawny router, po pierwsze obsługujesz tylko GET a gdzie POST, PUT, DELETE?
Zainteresuj się też funkcją call_user_func_array, skróci kod niemiłosiernie.

4 odpowiedzi

0 głosów
odpowiedź 12 lipca 2016 przez xandros Nałogowiec (29,450 p.)
wybrane 12 lipca 2016 przez jpacanowski
 
Najlepsza
Odbierasz tylko jeden argument, którym jest nazwa pliku:

https://github.com/jpacanowski/PHPFramework/blob/master/libs/View.php#L5
komentarz 12 lipca 2016 przez jpacanowski VIP (101,940 p.)

Jeszcze nie commitowałem...

class View
{
    public static function make($name, ...$data)
    {
        $path = "views/{$name}.php";
        
        if(file_exists($path)) {
            include $path;
        }
    }
}
1
komentarz 12 lipca 2016 przez xandros Nałogowiec (29,450 p.)

powinno być:

<?php
 public static function make($name, array $data = []){
      /*... */
}

jeśli chcesz, by działało:

<?php

$data['body'];


komentarz 12 lipca 2016 przez jpacanowski VIP (101,940 p.)
Wielkie dzięki. Wszystko ładnie działa...
+1 głos
odpowiedź 12 lipca 2016 przez event15 Szeryf (93,790 p.)

metoda make sugeruje że używasz jakiejś fabryki, a tu zaskoczenie - nie uzywasz. 

Body nie wyświetla ponieważ musisz pójść zagnieżdżenie niżej. 

Na chwilę obecną tworzysz kod a'la MVC, a nie framework. Patrząc na Twój CMS, który też masz w repozytoriach, polecam sprawdzić jak zrobić, aby przy każdej operacji na bazie nie łączyć się ponownie z nią. Oczywiście z miejsca odrzuć Singletona.

komentarz 12 lipca 2016 przez jpacanowski VIP (101,940 p.)

Pomogło. Zamiast:

public static function make($name, ...$data)

użyłem funkcji func_get_arg()

$data = func_get_arg(1);

Jestem tylko ciekawy czemu teraz nie ma zagnieżdżenia.

komentarz 12 lipca 2016 przez xandros Nałogowiec (29,450 p.)

Bo pobierasz 2 argument, który jest wysyłany jako array.
a ...$data tworzy arraya z argumentów od drugiego do n, gdzie n jest liczbą wysłanych agrumentów do funkcji.

Więc jakbyś wywołał funkcje:

<?php
/** 1arg = index, 2arg = array(ala), 3arg = array(nowak => ma), 4arg  = kota **/
View::make('index', ['ala'], ['nowak' => 'ma'], 'kota');

To byś dostał coś takiego:

<?php
$data == array(
    array('ala'),
    array('nowak' => 'ma'),
    'kota'
);

 

komentarz 12 lipca 2016 przez jpacanowski VIP (101,940 p.)
Dzięki. A jak sprawdzić przed wywołaniem kodu $data = func_get_arg(1); czy ten argument był podany? Czy jest jakaś funkcja typu *_exists() ?
1
komentarz 12 lipca 2016 przez xandros Nałogowiec (29,450 p.)
Jest pare opcji, ja zostawie linki do manuala:

http://php.net/manual/pl/function.func-get-args.php // + empty lub isset

http://php.net/manual/pl/function.func-num-args.php
0 głosów
odpowiedź 12 lipca 2016 przez Boshi VIP (100,240 p.)
0 głosów
odpowiedź 12 lipca 2016 przez kosaa Stary wyjadacz (14,130 p.)
echo $data[0]['body'];

 

Podobne pytania

0 głosów
1 odpowiedź 179 wizyt
pytanie zadane 1 grudnia 2016 w PHP przez wanderer Gaduła (3,710 p.)
+1 głos
1 odpowiedź 180 wizyt
pytanie zadane 16 kwietnia 2019 w C i C++ przez Joe Nowicjusz (200 p.)
+1 głos
1 odpowiedź 236 wizyt
pytanie zadane 9 lipca 2020 w JavaScript przez KumberTwo Dyskutant (8,270 p.)

92,539 zapytań

141,382 odpowiedzi

319,479 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...