Toon posts:

Cake PHP hulp

Pagina: 1
Acties:

Onderwerpen


  • pepio
  • Registratie: Februari 2009
  • Laatst online: 09:22
Ik heb dit bericht gisteren op phphulp ook geplaatst, maar daar zitten blijkbaar geen mensen die mij kunnen helpen, dus ik hoop dat die hier wel zitten.

Ik ben nu voor het eerst bezig een site te maken in CakePHP en hoewel het veel zoeken is, valt het me alles behalve mee! Nu probeer ik alleen een cron te maken om informatie vanuit flickr in een DB te laten zetten. Hiermee loop ik nu vast. Ik gebruik de volgende bestanden:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class CronController extends AppController {
    var $name = 'Cron';

    function index($text = null, $flickr = null) {
        App::import('Vendor', 'phpflickr');
        
        $this->set('Cron', $this->Cron->find('all'));
        
        function flickr_update($text = null, $flickr = null) {
                    
            $form = $this->Cron->read('name', $text);
            $form['Cron']['flickr'] = $flickr;
                    
            $this->Cron->create();
            $this->Cron->save($form);
                    
         }
        
    }

}


Deze functie roep ik dan aan met 'flickr_update($text, $flickr);'. Dat gaat allemaal goed, alleen krijg ik dan de fout 'Fatal error: Using $this when not in object context in /var/www/cakephp/app/controllers/cron_controller.php on line 12'.

Ik moet dus iets ander verzinnen om de code te laten aanroepen vanuit mijn script maar ik kom er zelf helaas niet uit. Wanneer ik overigens het script buiten de functie flickr_update zet werkt het wel gewoon, maar kan ik het geen informatie mee geven en wordt het al uitgevoerd voor dat ik de flicker informatie (wat ik nu doe vanuit de index.ctp) er aan door kan geven.

Anoniem: 26306

Dit heeft niet zoveel met CakePHP te maken maar met object geörienteerd programmeren.

Waarom je daar een functie binnen een functie definieert is mij een raadsel. Sowieso is de regel 12 van de foutmelding niet regel 12 van jouw code.

Het lijkt mij dat je eerst eens de basics van OOP moet gaan leren alvorens je met een framework aan de gang gaat.

  • pepio
  • Registratie: Februari 2009
  • Laatst online: 09:22
De rede dat ik een functie binnen een functie wil gebruiken heeft te maken met de manier waarop CakePHP werkt. De functie index wordt namelijk in de controller aangeroepen zodra je op de pagina zit. En gewoon een functie naast de index maken gaat niet omdat ik hem dan vanuit het template bestand 'index.cpt' niet kan aanroepen.

Ik moet dus de functie flickr_update ergens anders naartoe zien te verplaatsen, maar ik heb geen idee waar en hoe ik hem dan alsnog zou kunnen aanroepen.

Daarbij klopt de regel inderdaad niet aangezien ik niet de complete code heb geplaatst. Maar het gaat om regel 11 van deze code.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
pepio schreef op zaterdag 11 juni 2011 @ 12:19:
De rede dat ik een functie binnen een functie wil gebruiken heeft te maken met de manier waarop CakePHP werkt. De functie index wordt namelijk in de controller aangeroepen zodra je op de pagina zit. En gewoon een functie naast de index maken gaat niet omdat ik hem dan vanuit het template bestand 'index.cpt' niet kan aanroepen.
Je doet wat aannames, maar ondertussen zou je toch echt eerst wat meer over functies, classes en functies in classes (methods) moeten lezen.

Overigens is het sinds PHP5 beter om geen var te gebruiken, maar expliciet private/protected/public neer te zetten. Deze keywords zijn ook handig leesvoer. En bovendien zal $this->Cron een 2e fout blijken te bevatten, aangezien je de property $name hebt genoemd. Die variabele is dan binnen de class juist met $this->name te benaderen. :)

{signature}


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 08-06 15:30

NMe

Quia Ego Sic Dico.

Voutloos schreef op zaterdag 11 juni 2011 @ 12:30:
[...]

Die variabele is dan binnen de class juist met $this->name te benaderen. :)
Succes met regel 7 dan. :+
pepio schreef op zaterdag 11 juni 2011 @ 12:19:
De rede dat ik een functie binnen een functie wil gebruiken heeft te maken met de manier waarop CakePHP werkt. De functie index wordt namelijk in de controller aangeroepen zodra je op de pagina zit. En gewoon een functie naast de index maken gaat niet omdat ik hem dan vanuit het template bestand 'index.cpt' niet kan aanroepen.
Waarom moet je een functie die nodig is voor de interne werking van je class aan kunnen roepen vanuit je template? En hoe wordt die ineens aanroepbaar door een functie in een functie te gebruiken? Klinkt alsof je inderdaad de access levels die in OOP geïntroduceerd zijn niet kent.

[Voor 61% gewijzigd door NMe op 11-06-2011 12:39]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Ramon
  • Registratie: Juli 2000
  • Laatst online: 07:51
Op deze manier een functie binnen een functie is in cake uitdrukkelijk niet de bedoeling (elders ook niet an sich).

Als je iets wil maken wat je vanuit een view (jouw index.ctp) wilt kunnen aanroepen, maak je in CakePHP een Helper van je functie. Maar in een helper ga je niet zoals in jouw geval een database-call doen. Dat kan weer in een functie in je Model (die je vanuit je Controller weer aanroept).

Check mijn V&A ads: https://tweakers.net/aanbod/user/9258/


  • pepio
  • Registratie: Februari 2009
  • Laatst online: 09:22
Ok dus als ik het goed begrijp moet ik het volgende doen:

1. Ik moet me meer gaan inlezen in classes en functies
2. Ik moet de flickr_update functie opsplitsen in:
2a. Een helpen die ik in de controller laad, die de informatie vanaf flicker haalt. Die moet dan terug gestuurd worden naar de controller
2b. Deze informatie moet naar een model die de gegevens in de DB stopt.

Dan rest mij alleen nog de volgende vraag:

Hoe roep ik een model aan in mijn controller met informatie die ik vanuit de helper heb terug gekregen?

  • Anoniem: 241683
  • Registratie: November 2007
  • Niet online
pepio schreef op zaterdag 11 juni 2011 @ 12:43:
Ok dus als ik het goed begrijp moet ik het volgende doen:

1. Ik moet me meer gaan inlezen in classes en functies
2. Ik moet de flickr_update functie opsplitsen in:
2a. Een helpen die ik in de controller laad, die de informatie vanaf flicker haalt. Die moet dan terug gestuurd worden naar de controller
2b. Deze informatie moet naar een model die de gegevens in de DB stopt.

Dan rest mij alleen nog de volgende vraag:

Hoe roep ik een model aan in mijn controller met informatie die ik vanuit de helper heb terug gekregen?
Ik zou het eerste punt eerst doen en daarna pas weer vragen gaan stellen.

Cakephp heeft ook documentatie, goed te lezen en hiermee kun je jezelf de workflow aanleren. Wanneer wij je script gaan voorkauwen leer je er helemaal niets van: http://book.cakephp.org/view/1001/Understanding-Models

  • pepio
  • Registratie: Februari 2009
  • Laatst online: 09:22
Ik ben het toch niet helemaal mee eens dat ik er helemaal niks van leer als het zal worden voorgezegd. Het is namelijk een bepaalde manier van scripten die je gewoon even een keer moet hebben gezien. Daarna is er niet zo heel veel meer aan...

Maar hoe erg ik het ook waardeer dat jullie de tijd nemen om het topic te lezen, aan een antwoord als: 'Ga eerst maar even wat meer leren' heb ik op dit moment helemaal niks. Ik ben bezig het te leren en zit nu vast op dit punt. Daarom kom ik hier hulp zoeken, dat ik het nog niet goed genoeg kan begrijp ik zelf ook wel... En natuurlijk heb ik alle cakephp documentatie doorgelezen.

  • RobIII
  • Registratie: December 2001
  • Laatst online: 12:41

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

pepio schreef op zaterdag 11 juni 2011 @ 17:14:
Het is namelijk een bepaalde manier van scripten die je gewoon even een keer moet hebben gezien.
OOP is geen "bepaalde manier van scripten" maar een filosofie, een denkwijze, een paradigma. Daar komt echt wel heel wat meer (achtergrond, diepgaande) kennis bij kijken dan "een keer gezien moeten hebben" ;)
pepio schreef op zaterdag 11 juni 2011 @ 17:14:
Daarna is er niet zo heel veel meer aan...
Natuurlijk, want dan kun je telkens gewoon "copy/paste" doen van "public function foo() { ...}" want die werkt altijd :X :z Dat je dan het verschil tussen public en private niet kent boeit niet; het werkt toch?
pepio schreef op zaterdag 11 juni 2011 @ 17:14:
Maar hoe erg ik het ook waardeer dat jullie de tijd nemen om het topic te lezen, aan een antwoord als: 'Ga eerst maar even wat meer leren' heb ik op dit moment helemaal niks.
Het is anders de beste tip/hulp die je gegeven is (en kan worden). Dat het niet is wat je wil horen is jouw probleem; verwacht niet dat wij je nu "even" uit de brand helpen door een oplossing op een zilveren dienblaadje voorgekauwd en wel aan te dragen (noch een poging daartoe) want daar leer je niets van en dan hebben we in no-time een nieuw topic waarin we het volgende stukje mogen voorkauwen weer om door te lezen ;)

In de Devschuur hanteren we meestal het volgende beleid:
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.
Misschien ben je nu, op korte termijn, niet geholpen met de reacties maar neem van mij aan dat 't wel degelijk de "duw in de juiste richting" is die je moet hebben ;)

[Voor 8% gewijzigd door RobIII op 11-06-2011 18:50]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 08-06 15:30

NMe

Quia Ego Sic Dico.

pepio schreef op zaterdag 11 juni 2011 @ 17:14:
Ik ben het toch niet helemaal mee eens dat ik er helemaal niks van leer als het zal worden voorgezegd. Het is namelijk een bepaalde manier van scripten die je gewoon even een keer moet hebben gezien. Daarna is er niet zo heel veel meer aan...

Maar hoe erg ik het ook waardeer dat jullie de tijd nemen om het topic te lezen, aan een antwoord als: 'Ga eerst maar even wat meer leren' heb ik op dit moment helemaal niks. Ik ben bezig het te leren en zit nu vast op dit punt. Daarom kom ik hier hulp zoeken, dat ik het nog niet goed genoeg kan begrijp ik zelf ook wel... En natuurlijk heb ik alle cakephp documentatie doorgelezen.
Het maakt mij niet uit of je het daar wel of niet mee eens bent, mijn advies blijft hetzelfde. Neem het in dit geval nou maar van een aantal ervaren programmeurs aan dat je niet kan rennen voordat je kan lopen en dat je gewoon de basis ontbeert. En die basis leer je sneller uit een boek dan door jezelf bad practices aan te leren door te gaan hacken in andermans code-base.

Natuurlijk leer je ook van praktijkopdrachtjes, maar leer nou eerst gewoon die basis even. Verdiep je even in OOP, of tenminste in wat voor OOP doorgaat in PHP. Of überhaupt in procedureel programmeren, want er zijn maar heel weinig talen waar functies in functies écht wenselijk zijn.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 00:29
Mag ik daar ook nog even bij vermelden dat CakePHP gebasseerd is op php4 principes, wat maar een halve OOP implementatie had. Wellicht is het slim om naar een moderner framework te kijken wat wat modernere technieken gebruikt. Denk aan Lithium, Zend Framework of Symfony.

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 08-06 15:30

NMe

Quia Ego Sic Dico.

Ik heb CakePHP even gedownload en in de laatste versie zie ik in elk geval redelijk wat gebruik gemaakt worden van PHP5-OOP, al zie ik tussendoor ook PHP4-OOP-paradigma's voorbij komen. Niet de meest ideale codebase om van te leren, lijkt het...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 13:23

alienfruit

the alien you never expected

Als je wilt leren middels PHP5 code zal ik zelf voor Symfony2 gaan.

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 00:29
alienfruit schreef op zaterdag 11 juni 2011 @ 19:57:
Als je wilt leren middels PHP5 code zal ik zelf voor Symfony2 gaan.
Dit resulteert in een topic waarin 100 mensen hun favoriete framework gaan opnoemen. Als je het dan nodig vindt om 1 specifiek framework te noemen, geef dan in ieder geval aan waarom je dat zo'n goed framework vindt, en hoe het zich verhoudt tot de ander genoemde frameworken. Alleen dan heeft de TS (en andere lezers) er wat aan imho.

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


  • styxit
  • Registratie: Juli 2005
  • Niet online
Ik heb redelijk wat ervaring met Cake, maar volgens mij moet jij vooral even het idee achter MVC ook zien te begrijpen.

Je geeft aan dat je flickr data in je index.ctp (=view) ophaalt. Dat zijn juist dingen die niet in je view thuis horen.

Acties:
  • 0Henk 'm!

  • Keeper
  • Registratie: Juni 2001
  • Niet online

Keeper

<3 Ruby

pepio schreef op zaterdag 11 juni 2011 @ 12:43:
Ok dus als ik het goed begrijp moet ik het volgende doen:

2. Ik moet de flickr_update functie opsplitsen in:
2a. Een helpen die ik in de controller laad, die de informatie vanaf flicker haalt. Die moet dan terug gestuurd worden naar de controller
2b. Deze informatie moet naar een model die de gegevens in de DB stopt.
Nee, dat is echt nergens voor nodig. Een Helper wordt in CakePHP trouwens gebruikt om bepaalde presentatie-logica in op te slaan, niet om data van een externe bron in te laden. Helpers worden in principe alleen in views gebruikt.

Het beste dat je even kan doen is goed de CakePHP Manual te bestuderen op http://book.cakephp.org en dan met name ook het gedeelte over wat MVC (Model-View-Controller) precies is en hoe het binnen CakePHP werkt.

Wat de goede flow moet zijn voor wat je wilt doen weet ik niet, want het is me een beetje onduidelijk wat je nou precies wilt doen, maar waarschijnlijk wordt het zoiets (in pseudo code)

View
Een formulier met daarin een tekstveld waarin je je Flickr zoekstring (ga even vanuit dat je dat aan het doen bent) invoert. Het formulier submit zijn data naar een actie in je controller.

Controller
PHP:
1
2
3
4
5
6
function addCron($flickr) {
  if(submit)
    $data = $this->Flickr->getFlickrData($flickr);
    $this->Cron->create();
    $this->Cron->save($data);
}

In die getFlickrData() functie zet je dan hetgeen wat je moet doen om bij Flickr via die phpflickr class die je hebt gedownload en in je Vendor map staat je data uit Flickr te krijgen.

Model
Hier hoef je niks te doen, je gebruikt al de save() method van het model in je controller.

  • pepio
  • Registratie: Februari 2009
  • Laatst online: 09:22
Ik ben er uitgekomen! Mede dankzij Keeper. Bedankt hiervoor.

Nu ga ik de andere adviezen opvolgen en een boek over OOP en Cake kopen :P

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 00:29
Mag ik vragen waarom je toch voor Cake kiest terwijl verschillende mensen aangeven waarom je dat wellicht beter niet kan doen?

Ik respecteer je keuze, maar ben wel benieuwd naar de redenen ;)

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


  • pepio
  • Registratie: Februari 2009
  • Laatst online: 09:22
Ik maak de site samen met een vriend die volgend jaar (na een jaar uni) weer veder gaat met ICT op het HAN in arnhem. Daar gebruiken ze Cake en op deze manier kan hij er weer een beetje inkomen. Veder vindt ik het wel een leuke oefening en een redelijk gedeelte van de site is nu al in Cake, dus om te wisselen vindt ik een beetje zonde.

Vandaar dus :P

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 14:10
pepio schreef op maandag 13 juni 2011 @ 22:43:
Ik maak de site samen met een vriend die volgend jaar (na een jaar uni) weer veder gaat met ICT op het HAN in arnhem. Daar gebruiken ze Cake en op deze manier kan hij er weer een beetje inkomen.
Is dat nieuw? Heb daar in de afgelopen 4 jaar namelijk niks van van een php framework gezien.
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee