Komme i gang med kake PHP Del 2

I vår siste CakePHP opplæring så vi på å sette opp CakePHP-rammen og introduserte noen av rammens grunnleggende konsepter og terminologi. Nå viser vi seg å illustrere flere av CakePHPs hurtige utviklingsmuligheter ved å bruke et personlig bloggprogram som et eksempel. I neste sett med opplæringsprogrammer vil vi bygge bloggapplikasjonen trinnvis slik at den grunnleggende CakePHP utviklingsprosessen er lagt tydelig i stedet for kort nevnt som i andre lignende opplæringsprogrammer. I denne opplæringen begynner vi med en grunnleggende authoring-autentiseringskomponent for eksempelbloggprogrammet.

Trinn 1: Definere et mål

Vårt mål er å skape komponentene i et personlig bloggprogram. Når vi fullfører prosjektet, vil vi legge til Web 2.0-effekter og tilby integrasjon med andre tjenester for å gjøre søknaden komplett. Før vi kan starte prosjektet, må vi imidlertid definere en utviklingsplan med en slags funksjonsliste for å veilede oss.

Her er en liten liste over hovedtrekkene vi vil diskutere og inkludere i vårt ferdige program:

  • Beskyttet system med, i det minste, evner for en forfatter
  • Innleggsfunksjoner vil inkludere kommenteringsfunksjonalitet, gi bloggsporbacks, og tillate inkludering av bilder og opplastinger
  • Fulltekst søkemotor med Sphinx
  • Integrasjon med eksterne tjenester som Gravatar og Askimet Spam Protection / Spam Management
  • Javascript forbedringer inkludert WYSIWYG Editor Capabilities, Ajax Live Search, Ajax Kommentar forhåndsvisning, Fast loading Ajax Publiser / Rediger / Slett funksjonalitet og Ajax skjema validering
  • Integrasjon av applikasjonen med Facebook for å tillate rask Facebook-utvikling (målene for denne funksjonen inkluderer å sende innlegg til Facebooks nyhetsfeedsfunksjon og trekke inn personlige data fra Facebook API for å gjøre bloggen litt mer personlig)

I dagens artikkel vil vi fokusere hovedsakelig på bruker- / forfatterstyringssystemet fordi det er det perfekte stedet å lære grunnleggende om kontroller, modell og visningskode. Når vi lærer disse grunnleggende, kan vi implementere dem for de andre komponentene i det større systemet senere.

Uten ytterligere ado, la oss kaste inn CakePHP.

Trinn 2: Modeller

Som nevnt tidligere, modeller samhandler med rammens underliggende database. Som standard kommer CakePHP med en rekke innebygde metoder for å redde oss fra omskrivingskoden for å implementere felles funksjonalitet. Sammen med de forventede lese- og skrive- / lagringsmetoder, kan du også bruke "magiske metoder" som findBy som vil finne rader som samsvarer med et bestemt søkefelt. Dette er en reell forbedring ved bruk av typiske "SELECT * FROM" spørringer.

Vårt brukersystem for denne iterasjonen av søknaden vil være ganske grunnleggende. Siden hovedmålet er en personlig blogg, har vi bare en forfatter om gangen. For å øke utvidelsesmulighetene vil vi imidlertid lagre brukeren / brukerne i et bord dersom vi velger å utvikle et fullt blåst bruker- / tillatelsystem senere, eller hvis vi vil legge til flere forfattere manuelt. Vår grunnleggende funksjonalitet gjør det mulig å logge inn, logge ut og oppdatere vår personlige informasjon.

Vi vil gjøre alt dette med et lite MySQL-tabell implementert av følgende CREATE TABLE-setning:

CREATE TABLE 'authors' ('id' int (11) IKKE NULL auto_increment, 'brukernavn' varchar (255) IKKE NULL standard "," passord "varchar (32) IKKE NULL standard", "navn" varchar (255) IKKE NULL standard "," e-post "varchar (255) IKKE NULL standard", "bio" -tekst IKKE NULL, PRIMARY KEY ('id'))

Vi vil også ha en grunnleggende startkonto, så vi vil også sette inn en rad mens vi er på det (brukernavnet og passordet for startkontoen er test / test):

INSERT TIL 'forfattere' ('brukernavn', 'passord', 'navn', 'email', 'bio') VÆRDIER ('test', '098f6bcd4621d373cade4e832627b4f6', 'Test', '[email protected]', 'Hei verden ... ');

Formålet med tabellstrukturen er følgende:

  • id vil bli brukt til den unike bruker-IDen når vi laster inn profilen.
  • brukernavn vil bli brukt til å logge inn på ledelsesområdet.
  • passord vil være et md5 hashed-passord som brukes til å logge inn på administrasjonsområdet.
  • Navn vil bli brukt i bylines og forfattersiden. Dette er det offentlige visningsnavnet fordi brukernavnet ikke er faktisk vist.
  • e-post vil bli brukt til fremtidig funksjonalitet (for eksempel kommentarvarsling).
  • bio vil bli brukt til å lagre biografisk informasjon om en forfatter (for eksempel forfattersidene som ses her på NETTUTS).

Nå må vi faktisk lage modellen. For å gjøre dette, opprett en ny fil i / App / modeller / mappen heter author.php med følgende innhold:

klassen forfatter utvider appmodel

var $ name = 'Author';

?>

Modellen for denne funksjonaliteten er faktisk ganske grunnleggende. Siden funksjonaliteten vi trenger, liker findByUsername eller lagre er allerede dekket av funksjoner i Model (som utvides av AppModel), er vi ferdige med modellsiden. Denne filtypen tillater oss bare å grensesnittet med Forfatter-tabellen.

I senere avsnitt når vi begynner å legge til postfunksjonalitet, må vi kanskje utvide modellene.

Trinn 3: Visninger

Visninger er hovedsakelig en blanding av HTML og hjelpere. I andre systemer vil vi kalle disse malene. Hjelperne genererer felles kode eller hjelp med vanlige oppgaver. Noen hjelpetyper funnet i CakePHP er HTML-hjelpere og pagineringhjelpere.

For å opprette visninger, opprett en mappe i / App / visninger / kalt forfattere / slik at vi kan lagre alle våre synspunkter. Vår første visning bør kalles login.thtml med følgende innhold:

 

Feil

Brukernavnet og passordet stemmer ikke overens. Vennligst prøv igjen og dobbelkryss den oppgitte informasjonen.

formTag ( '/ forfattere / login /'); ?> input ( 'forfatter / brukernavn'); ?> passord ( 'Forfatter / passord'); ?>
sende ( "Logg inn"); ?>

Istedenfor å bruke koder vi bruker en av hjelperne til å generere gyldige inntastingsfelter som kan brukes i våre kontroller. Vi legger også litt feilkontroll øverst i malen hvis brukeren oppgir feil brukernavn eller passord. Feilvariabelen settes senere i kontrolleren.

Nå som vår første handling har en mal bak den, kan vi gå videre til de andre.

Logg ut trenger egentlig ikke sin egen visning fordi vi bare omdirigerer brukere tilbake til bloggindekssiden og viser en rask suksessmelding. Oppdatering av profilinformasjon i brukeradministrasjon trenger imidlertid et skjema, så vi må skrive en visning for det.

Opprett en mal som heter manage.thtml med følgende innhold:

 

Feil

Vennligst kontroller at all nødvendig informasjon er fylt ut.

formTag ( '/ forfattere / administrere /'); ?> input ( 'forfatter / navn'); ?>
input ( 'forfatter / e'); ?>
textarea ('Forfatter / bio', array ('cols' => '60', 'rows' => '10')); ?>
sende ( "Oppdater"); ?>

Denne visningen er veldig lik vår innloggingsskjema, bortsett fra at vi administrerer noen forskjellige felt, og vi inkluderer en annen hjelpemetode ($ html-> textarea) for å generere et tekstområde.

Flott! Nå som vårt lille sett med visninger er skrevet, kan vi gå videre til kontroller.

Trinn 4: Controllers

Kontrollører fungerer som trafikkdirektører. De aksepterer innspill, bestemmer hva de skal gjøre med det, og gir deretter håndteringsinstruksjoner til resten av systemet. De er hjertet i søknaden fordi de tar dataene fra modellene og sender det videre for å korrigere visninger som skal vises.

Denne delen omhandler spesielt å sette inn og lese en økt, samt å oppdatere databasen. Vi vil også opprette en "foreldre" kontroller som alle våre fremtidige kontrollører vil arve.

Først opprett en fil i app / kontrollere / oppkalt authors_controller.php. Nå vil vi gå gjennom koden trinnvis.

omadressering ('/');  funksjon logg inn () $ this-> sett ('feil', falsk); hvis (! tomt ($ this-> data)) $ author = $ this-> Author-> findByUsername ($ this-> data ['Author'] ['brukernavn']); hvis (! tom ($ author ['Author'] ['passord']) && $ author ['Author'] ['passord'] == md5 ($ this-> data ['Author'] ['passord'] )) $ this-> Session-> write ('Author', $ author ['Author']); $ this-> omdirigering ('/');  annet $ this-> sett ('feil', sant); 

Vår indeksfunksjon er ganske grunnleggende. For nå vil vi bare omdirigere til skriptindeksen ved hjelp av en innebygd CakePHP-funksjon kalt "omdirigering".

Vår innloggingsfunksjon er litt mer avansert. Vi setter først feilvarianten til feil for å stoppe PHP fra å kaste tilbake en udefinert variabel varsel. Så gjør vi en sjekk for å se om data har blitt sendt. "$ this-> data" inneholder noen data fra innloggingsskjemaet og kommer i formatet $ this-> data ['CONTROLLER'] ['FIELD']. Nå ser vi vår magiske metode "findByUsername". brukes til å finne noen rader som inneholder brukernavnet til brukeren som nettopp har logget inn. Hvis vi har en brukersammenligning, sammenligner vi passord og skriver en økt med CakePHPs øktbehandler. Hvis det er et problem, setter vi "feil" til ekte, slik at visningen vår kan håndtere meldingen. Et innloggingssystem kan ikke bli mye enklere enn det!

 funksjon logout () $ this-> Session-> delete ('Author'); $ this-> flash ('Du har blitt logget ut.', '/');  

Logout-funksjonen er enda enklere. Vi bruker CakePHPs øktklasse for å slette hele økten, og så bruker vi "flash" -metoden for å omdirigere. Flash-metoden er litt annerledes enn viderekoblingsmetoden fordi vi har lov til å sende en melding tilbake til skjermen. Dette blir nyttig fordi vi faktisk kan la brukerne vite at noe har skjedd.

Merk: Siden vi fortsatt er i utviklingsmodus, vil ikke blitsskjermbildet automatisk omdirigere. Du må klikke på teksten for å gå til skjermen. Når vi er i produksjonsmodus, vil denne skjermen omdirigere for oss.

 funksjonsbehandling () $ this-> sett ('error', false); hvis (tomt ($ this-> data)) $ this-> Author-> id = $ this-> Session-> read ('Author.id'); $ this-> data = $ this-> Author-> read ();  ellers hvis (tomt ($ this-> data ['Author'] ['name']) || empty ($ this-> data ['Author'] ['email']) || empty > data ['Author'] ['bio'])) $ this-> sett ('error', true); $ this-> Author-> id = $ this-> Session-> read ('Author.id'); $ this-> data = $ this-> Author-> read ();  ellers $ this-> Author-> id = $ this-> Session-> read ('Author.id'); hvis ($ this-> Author-> save ($ this-> data ['Author'])) $ this-> flash ('Din kontoinformasjon er oppdatert.', '/ authors / manage /');  

Vår mest avanserte funksjon for denne kontrolleren er få til funksjon. Mye av funksjonaliteten er implementert ved hjelp av de teknikkene vi nettopp har introdusert. En ting å merke seg i denne funksjonen er å sette $ this-> author-> id-variabelen før lagre og lese. Dette forteller modellen hvilken rad som skal håndteres, så det prøver ikke å lagre eller sette inn en helt ny rad. Vi håndterer også økt funksjonalitet ved å lese iden fra hash.

Vårt siste skritt er å beskytte administrasjonssiden. Vi vil bare ha innlogget brukere for å se denne siden, og vi kan gi beskyttelse med en enkel sjekkfunksjon. Dette er en del funksjonalitet vi skal også ha for fremtidige skjermer, så vi bør lagre det på et delt sted. Som nevnt tidligere arver alle CakePHP-controllere fra en kontroller kalt "AppController", som akkurat nå er en tom fil sitter i kake katalogen ...

Vi vil opprette en applikasjonsspesifikk AppController ved å opprette en fil med navnet "app_controller.php"i app / mappe, og sett inn følgende innhold:

Session-> check ('Author')) $ this-> flash ('Du må være logget inn for å gjøre det.', '/ Authors / login'); exit; ?> 

Vi sjekker bare for økten, og hvis den ikke er der, sender vi brukeren til påloggingsskjermen. Denne funksjonen kan nå brukes i hvilken som helst kontrollermetode.

Vårt siste skritt er å ringe funksjonen fra vår administrerende funksjon. Vi åpner vår app / styreenhet / authors_controller.php fil og finn:

 funksjonsbehandling () $ this-> sett ('error', false);

og legg til

$ Dette-> isLoggedIn ();

rett under det.

Trinn: Teste det ut

Handlingene kan testes og nås med følgende nettadresser:

  • http: //yoursite.tld/forfattere / login /
  • http: //yoursite.tld/forfattere / administrere /
  • http: //yoursite.tld/forfattere / utlogging /

Konto brukernavnet er test og passordet er test.

Lukking

Denne artikkelen var ment å introdusere noen kjente CakePHP-funksjoner med eksempler i forbindelse med å bygge et personlig bloggprogram. Vi startet med noen bruker- / forfatter-sidefunksjonalitet for å introdusere de grunnleggende konseptene for applikasjonsutvikling med CakePHP før vi flytter (i neste opplæring) for å skrive postkontrolleren. På denne måten får vi en bedre forståelse av hvordan alt i rammen passer sammen. Vi har fortsatt en lang vei å gå før vårt bloggprogram er fullført, så gjør deg klar til å dykke dypt inn i CakePHP slik at vi kan få all bloggens innlegg og kommentars funksjonalitet som fungerer neste gang!