Crearea punerii în funcțiune Utilizarea rutelor pentru programare cu mine

Ce veți crea

Acest tutorial face parte din Construirea sistemului de pornire cu seria PHP pe Envato Tuts +. În această serie, vă conduc prin lansarea unui startup de la concept la realitate, utilizând ajutorul meu Planificatorul întâlnirilor aplicație ca exemplu de viață reală. Fiecare pas de-a lungul drumului, voi lansa codul Planificatorului de Întâlniri ca exemple de sursă deschisă pe care le puteți învăța. Voi aborda, de asemenea, problemele de afaceri legate de pornire în momentul în care apar.

Recent am întrebat dacă seria noastră de pornire a inspirat oricare dintre propriile idei antreprenoriale și te-a scris cod. Dacă da, vă rugăm să ne împărtășiți puțin în comentarii.

Să ne întâlnim, să vizitați pagina mea cu mine

De mult timp de cand am inceput acest proiect, am dorit ca Planificatorul de Intalniri si Simple Planner sa aiba o pagina accesibila publicului pe care o puteti impartasi cu oamenii pentru a programa o intalnire cu dumneavoastra. Cu alte cuvinte, "Sigur, să ne întâlnim, vizitați programul meu cu mine la Planificatorul întâlnirilor, sunt Bernie Sanders (fără spațiu)". 

În tutorialul de astăzi, vă voi arăta că am făcut-o folosind rutarea Yii și unele dintre problemele legate de care a venit.

Dacă nu ați încercat să programați încă o întâlnire, puteți vedea cum se face în acest videoclip:

 

Pagina Program cu mine ar fi ceva de genul pagina PayPal Pay Me:

Particip la comentariile de mai jos, deci spune-mi ce crezi! Puteți să mă contactați și pe Twitter @lookahead_io. Sunt interesat în special dacă doriți funcții noi sau sugerați subiecte pentru tutoriale viitoare.

Ca un memento, întregul cod pentru Planificatorul întâlnirilor este scris în cadrul Yii2 Framework for PHP. Dacă doriți să aflați mai multe despre Yii2, consultați seria noastră paralelă Programming With Yii2.

Să începem.

Planificarea programului cu mine

Notă: Bernie nu este de fapt un utilizator al Planificatorului de întâlniri, din câte știu eu.

Fiecare utilizator de planificator de întâlniri are un nume de utilizator unic, de ex. berniesanders, și am decis să utilizez acest lucru pentru programul cu mine URL. Au existat câteva provocări pentru această caracteristică:

  1. Proiectarea paginii
  2. Lucrulți cu Yii Routing pentru a cartografia o cale de rădăcină pentru fiecare persoană
  3. Gestionați înregistrarea, conectați-vă și reveniți la program

Proiectarea paginii

Inspirat de pagina PayPal Pay Me (de mai sus) și de alții ca ea, am vrut să păstrez lucrurile simple inițial. Am folosit o rețea receptivă cu offseturi și centrare:

Aici este afișarea /frontend/views/meeting/scheduleme.php pentru pagină:

avatar <> ") echo '

Am scris un pic înainte despre rutele în modul de programare cu Yii2: comportament sluggable, parte a seriei noastre de programare Yii, și puteți citi mai multe informații în documentația Yii.

În construirea Startup-ului: întâlniri cu participanți multipli, am scris două episoade despre căile dinamice după numele de utilizator pentru adrese URL unice de întâlnire după cum se arată mai jos:

'/'=> "întâlnire / identitate",

Acest lucru a rupt o mulțime de rute cu două elemente, cum ar fi întâlnirea / [meeting_id], până când mi-am mutat o mapare mai dinamică deasupra lui pentru a avea prioritate:    

'/'=>'/ view ','//'=>'/', 

Și toate celelalte două căi cu caractere trebuie să fie definite în mod static, deoarece șirurile de identitate pentru întâlniri sunt opt ​​caractere, de ex. caracteristici.

Rute cum ar fi caracteristici sunt fixe, ceea ce merge la controler site-uri și acțiune caracteristici după cum se arată mai sus. Funcțiile rămase sunt cartografiate dinamic, ca în: '/'=>'/',

Încercarea de a crea o ruta variabila dinamica, cum ar fi / [username], de ex. https://meetingplanner.io/berniesanders, a rupt o mulțime de rute cu un singur element, cum ar fi https://meetingplanner.io/about și pagina de mementouri https://meetingplanner.io/reminder.

Așa că a trebuit să încep să definim în mod static multe dintre ele. 

Iată rutarea finală cu noi rute statice pentru căile cu un singur cuvânt:

'urlManager' => ['class' => 'yii \ web \ UrlManager', 'enablePrettyUrl' => true, 'showScriptName' => false, // 'enableStrictParsing' => false, 'place / your' => 'place / yours', 'place / create' => 'loc / create', 'place / create_geo' => 'place / create_geo', 'place / create_place_google '=>' loc / create_place_google ',' loc / view /'=>' loc / vizualizare ',' loc / update /'=>' loc / actualizare ',' loc /'=>' loc / slug ','/'=>'/ view ','//'=>'/',' daemon /'=>' daemon /', // include opt char acțiune' site /'=>' site /', //' include opt char actiuni '=>' site / features ',' about '=>' site / about ',' wp-login |/'=>' întâlnire / identitate ',' întâlnire '=>' întâlnire ',' prieten '=>' prieten ' profilul utilizatorului '=>' profil-utilizator ',' setare utilizator '=>' setare utilizator ',''=>' meeting / scheduleme ', // note - în prezent, acțiunile cu 8 litere și nu params vor eșua'/'=>'/',],],

Și puteți să verificați pagina "Bernie" și să programați o întâlnire cu el aici:

https://simpleplanner.io/berniesanders

Notă: Planificatorul de întâlniri și Simple Planner lucrează interschimbabil, și conduc ambele site-uri pentru a oferi utilizatorilor mai multe branduri. Planificatorul simplu este pentru întâlniri sociale, iar planificatorul de întâlniri este pentru mai multe chestii legate de afaceri.

Gestionarea înregistrării și a conectării din pagina Program cu mine

Majoritatea persoanelor care vizitează inițial o pagină de program cu mine nu vor avea un cont la noi. Deci, ei vor fi redirecționați atunci când fac clic Programați cu mine la pagina de înscriere sau de conectare.

După ce se loghează, vrem să le întoarcem la pagina de creare a întâlnirilor pre-încărcată cu proprietarul programului de programare cu mine, adăugat ca participant. Folosim setReturnUrl pentru a face acest lucru:

Yii :: $ app-> user-> setReturnUrl ([ 'întâlnire / crea /', 'cu' => $ u-> username]);

Actualizează sesiunea (de obicei prin intermediul unui modul cookie) astfel încât după ce o persoană se înscrie sau se conectează, acestea sunt returnate la pagina țintă.

Iată întregul /frontend/controllers/MeetingController.php actionScheduleme metodă:

funcția publică funcțiaScheduleme () $ username = Yii :: $ app-> request-> getPathInfo (); $ u = Utilizator :: find () -> unde (['username' => $ username]) -> one (); dacă (is_null ($ u)) return $ this-> goHome ();  elseif (! Yii :: $ app-> user-> isGuest) dacă (Yii :: $ app-> user-> getId () == $ u-> id) Yii :: $ app-> getSession ) -> setFlash ('info', Yii :: t ('frontend', 'Bine ați venit pe pagina de programare publică'));  $ userprofile = \ frontend \ models \ UserProfile :: găsi () -> unde (['user_id' => $ u-> id]) -> un (); Yii :: $ app-> user-> setReturnUrl ([ 'întâlnire / crea /', 'cu' => $ u-> username]); returnați $ this-> render ('scheduleme', 'user' => $ u, 'displayName' => MiscHelpers :: getDisplayName ($ u-> id, true), 'userprofile' => $ userprofile,]); 

Adăugarea proprietarului paginii de programare ca participant

Iată fișierul /frontend/controllers/MeetingController.php actionCreate metodă:

funcția publică funcțiaCreați ($ cu = ") ... dacă ($ cu <>") $ u = Utilizator :: găsi () -> unde (['username' => $ with]) -> one; dacă (! is_null ($ u)) $ cu_id = $ u-> id;  altceva Yii :: $ app-> getSession () -> setFlash ('error', Yii :: t ('frontend', 'Ne pare rău, nu am putut localiza pe nimeni prin acest nume. )); $ cu_id = 0;  altceva $ with_id = 0;  // împiedica crearea numeroaselor întâlniri goale $ meeting_id = întâlnire :: findEmptyMeeting (Yii :: $ app-> user-> getId (), $ with_id); dacă ($ meeting_id === false) // altfel, creați o nouă întâlnire $ model = new Meeting (); $ model-> proprietar_id = Yii :: $ app-> user-> getId (); $ model-> sequence_id = 0; $ model-> meeting_type = 0; $ model-> subject = întâlnire :: DEFAULT_SUBJECT; $ Model-> Salvare (); $ Model-> initializeMeetingSetting ($ Model-> id, $ Model-> owner_id); $ meeting_id = $ model-> id;  dacă ($ with_id! = 0) Participant :: adăugați ($ meeting_id, $ with_id, Yii :: $ app-> user-> getId ());  $ this-> redirect (['view', 'id' => $ meeting_id]); 

Ea procesează ID-ul de utilizator al programului cu mine proprietarul paginii ca $ with_id pentru a le adăuga ca participant. De asemenea, verifică mai întâi pentru a vă asigura că nu există deja o întâlnire între acești doi oameni - pentru a preveni duplicarea:

funcția publică statică findEmptyMeeting ($ user_id, $ with_id = 0) // dacă întâlniți cu cineva vedeți dacă există deja dacă ($ with_id! = 0) // verificați întâlnirea cu un participant cu with_id $ meetings = întâlnire find () -> unde (['owner_id' => $ user_id, 'status' => Întâlnire :: STATUS_PLANNING]) -> limit (7) -> orderBy (['id' => SORT_DESC] ); ($ m-> participanți) == 1 && $ m-> participanți [0] -> participant_id == $ cu_id)) retur (întâlniri $ ca $ m) $ M> id;  // // caută întâlnirea goală în ultimele șapte $ meeting = întâlnire :: find () -> unde (['owner_id' => $ user_id, 'status' => întâlnire :: STATUS_PLANNING]) - ) -> orderBy (['id' => SORT_DESC]) -> toate (); foreach ($ întâlniri ca $ m) if (! is_null ($ m) și ($ m-> subject == Meeting = DEFAULT_SUBJECT || $ m-> subject == " ) == 0 && count ($ m-> meetingPlaces) == 0 && count ($ m-> meetingTimes) == 0)) return $ m-> id; return false;

Am adăugat inițial caracteristica pentru a împiedica utilizatorii să creeze noi întâlniri atunci când a existat deja o altă întâlnire nouă goală pe care au creat-o anterior.

Privind înainte

Vor fi câteva lucruri despre această pagină pe care o voi curăța în viitor pe măsură ce vorbesc cu utilizatorii reali și obțin feedback. Poate că voi distribui în mod automat zilele și orele cele mai frecvente ale utilizatorului pentru întâlniri. Și voi crea o setare de utilizator pentru a dezactiva pagina de planificare în cazul în care nu doriți.

În încheiere

Toate lucrările pe care le-am făcut recent cu Bootstrap pentru a crea o interfață mai bună pentru Planificatorul de întâlniri mi-a făcut mai ușor să codez rapid programul cu mine.

Asigurați-vă că noile rute Yii au funcționat și că nu au rupt nimic pe site-ul a fost cea mai grea parte din acest lucru. De asemenea, am mers și am verificat toate apelurile mele Ajax pentru a mă asigura că niciuna dintre ele nu a fost afectată.

Sper că tutorialul de astăzi a fost util pentru dvs. de a învăța să personalizați adresele URL ale site-ului pentru baza de utilizatori și principiile de bază ale rutei MVC.

Aveți propriile dvs. gânduri? Idei? Parere? Puteți să mă contactați direct pe Twitter @lookahead_io direct. Urmăriți tutorialele viitoare aici în Building your Startup With PHP series. Unele caracteristici interesante sunt pe drum.

Din nou, dacă nu ați încercat încă Planificatorul de întâlniri sau Planificatorul simplu, continuați și programați prima dvs. întâlnire. 

Link-uri conexe

  • Planificator simplu sau Planificator de întâlniri
  • Programarea cu Yii2
  • Cum să programați cu Yii2: comportament slujitor
  • Crearea punerii în funcțiune: îmbunătățirea webului mobil
Cod