Helper i CI

Tags:    php code-igniter

Hejsa.

Jeg arbejder lidt med at lave en helper til min CI som skal kunne klare den måde jeg klare alt min rendering til mit view på.

Men jeg kan ikke helt få den til at gøre som jeg vil. Får en syntax error. Hvis jeg undlader at bruge $this. Og får Fatal error: Using $this when not in object context in /Applications/MAMP/htdocs/web/application/helpers/render_view_helper.php on line 9 hvis jeg bruger $this i den.
Fold kodeboks ind/udPHP kode 


Nogen der har en løsning på hvordan jeg kringler den?



5 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Din fejl-meddelelse opstår idet $this refererer til den nuværende objekt-instans. Hvis ikke der er nogen reference til en objekt-instans, vil det ikke være muligt at bruge $this.

Oftest kan problemet løses ved at bruge self:: eller static:: (alt efter hvilken adfærd du ønsker). Men det kommer naturligvis an på, hvordan din klasse ser ud. Er din klasse bygget på statiske metoder, eller er den bygget på objekt-metoder? (Hvis det overhoved er et navn, he).

Du har i øvrig problemer på både linje 6 og 8 i den kode du har angivet. Ligeledes stemmer fejlkoden ikke overens med den kode du har angivet, hvorfor debugging bliver lidt sværerer. Af samme årsag, er det umuligt at give en direkte løsning på dit problem. :)

vh



Indlæg senest redigeret d. 11.12.2013 22:34 af Bruger #16122
hvis det er helper function i en almindelig php fil har den ikke adgang til $this, da den er ude af et objekt kontekst. Prøv i stedet, at extend controller klassen, og så extend den, så har du nemmere ved, at referer $this.



I helpers (og andre steder udenfor controller/model context) skal du bruge en reference til CI superobjektet istedet for $this.

Det gør du med get_instance():
Fold kodeboks ind/udPHP kode 


Mere info: http://ellislab.com/codeigniter/user-guide/general/ancillary_classes.html



Ud over det Per. Så prøver han også at referere til $this->data som højstsandsynligt ikke eksisterer i helperen men er noget han vil referere til fra controlleren. Så det du viser er rigtigt, men ikke helt nok.



Ork jo, det er alt rigeligt :)

Som nævnt giver get_instance() adgang til CI-superobjektet -- som er en instans af Controlleren. Derved vil $CI referere til alle offentlige medlemmer af den aktive controller. Sålænge "$this->data" er public vil $CI->data også fungere uden problemer.

EDIT: at Daniel så lægger sine data i en lokal $data variabel der aldrig bliver brugt, men fodrer $this->data til view-metoden er så en anden sag, men det har ikke rigtigt noget med get_instance() som erstatning for $this at gøre.



Indlæg senest redigeret d. 12.12.2013 17:58 af Bruger #8223
t