University of Business and Technology in Kosovo UBT Knowledge Center

Theses and Dissertations Student Work

Fall 11-2016

LARAVEL vs

Valon Feka University for Business and Technology - UBT

Follow this and additional works at: https://knowledgecenter.ubt-uni.net/etd

Part of the Computer Sciences Commons

Recommended Citation Feka, Valon, " vs SYMFONY" (2016). Theses and Dissertations. 1320. https://knowledgecenter.ubt-uni.net/etd/1320

This Thesis is brought to you for free and open access by the Student Work at UBT Knowledge Center. It has been accepted for inclusion in Theses and Dissertations by an authorized administrator of UBT Knowledge Center. For more information, please contact [email protected].

Programi për Shkenca Kompjuterike dhe Inxhinierisë

LARAVEL vs SYMFONY Shkalla Bachelor

Valon Feka

Nëntor / 2016 Prishtinë

Programi për Shkenca Kompjuterike dhe Inxhinierisë

Punim Diplome Viti akademik 2013 – 2014

Valon Feka LARAVEL vs SYMFONY Mentori: PhD.Cand Blerton Abazi

Nëntor / 2016

Ky punim është përpiluar dhe dorëzuar në përmbushjen e kërkesave të pjesshme për Shkallën Bachelor ABSTRAKT

Në kohën tonë teknologjia po ecën me hapa shumë të shpejtë, sidomos në fushën e paisjeve elektronike si: kompjuterë, telefona të mençur, televizorë të mençur, etj. Numri i përdorueseve të internetit dhe këtyre pajisjeve është në rritje të vazhdueshme. Tashmë çdo biznes, institucion, organizatë kanë web aplikacionin e tyre ku ju ndihmojnë përdoruesve të tyre në marrjen e informacionit dhe ofrimin e shërbimeve online. Për të lehtësuar procesin e krijimit të web faqeve përdoren backend fraemwork dhe front-end framework. Shumica e web faqeve përbëhen nga struktura shumë të ngjashme. Qëllimi i Framework është të ofrojnë një strukturë të përbashkët që zhvilluesit të mos ribëjnë nga fillimi zhvillimin dhe të mund të ripërdorin kodin. Framwork bakend ju ndihmon backend zhvilluesve një organizim më të mire të logjikes të web aplikacionit ku shumica prej backend framework janë te bazuar në arkitekturen MVC, po ashtu ju ndihmon ne zhvillim me të shpejt dhe me cilësor duke ofruar komponentët të gatshëm të cilët mundë përdoren ashtu siç janë ose të konfigurohen në bazë të kërkesave te web applikacionit. Ndërsa front-end framework janë gjithashtu të nevojshëm në zhvillimin e një web aplikacioni ku na ndihmojnë ne krijimin e një web responsive për te gjitha madhësitë të ekranit. Lista e Backend framework është mjaft e pasur, por sipas statistikave të publikuara del se Laravel është Frameworki më i përdoruri pastaj radhiten: Symfony, CodeIgniter, Yii2, , Cake PHP, Zend Framework, Slim, FuelPHP, PHPixie. Qëllimi i kësaj teme të diplomës është që të ofrojnë njohuri më të kuptueshme duke përshkruar dhe duke bërë krahasimin mes dy Framework më të popullarizuara, që janë: Laravel dhe Symfony.

I

MIRËNJOHJE/FALENDERIME

Së pari do të doja të jap mirënjohjen time të sinqertë për të gjithë stafin akademik të UBT-s të cilët më përcjellën këto tre vite shumë të rëndësishme të jetës time. Ka qenë një periudhë me plot sfida që vinin pa pushim dhe plot punë të lodhshme por që ia vlejti sepse në fund më ndihmuan që të forcohem dhe të përballoj sfida të ndryshme, jo vetëm nga profesioni im, por edhe nga shumë fusha tjera të jetës. Dua të falënderoj mentorin tim PhD.Cand Blerton Abazi, që besoi tek unë dhe më ofroi mbështetje të vazhdueshme në hulumtimin e kryer me durimin, motivimin, eksperiencën dhe me diturinë e tij. Udhëzimet e tij më ndihmuan gjatë gjithë rrugës që u ndërmor për përfundimin e këtij hulumtimi. Falënderimet e mia po ashtu shkojnë për shokët dhe kolegët e mi, për punën që kemi kryer së bashku dhe konkurrencën e krijuar që patjetër ka ndikuar në rritjen e motivimit, energjisë dhe diturisë tek të gjithë ne. Gjithashtu do të doja të falënderoj përzemërsisht familjen time: prindërit e mi, vëllain dhe motrën time, për mbështetjen e fuqishme që më kanë dhuruar në çdo aspekt gjatë gjithë jetës time.

Ju faleminderit të gjithëve!

II

PËRMBAJTJA LISTA E FIGURAVE...... IV FJALORI I TERMAVE ...... V 1.HYRJE ...... 1 2. SHQYRTIMI I LITERATURËS (HISTORIKU) ...... 2 2.1 PHP ...... 2 2.2 Baza e të dhënave...... 3 2.3 Web Serveret ...... 3 2.4 Backend Framework ...... 3 2.5 Laravel ...... 4 2.5.1 Laravel ...... 4 2.5.2 Komponentat e Laravelit...... 5 2.5.3 Siguria e Laravelit ...... 9 2.5.4 Performanca e Larvelit ...... 11 2.6 Symfony ...... 12 2.6.1 Symfony ...... 12 2.6.2 Komponentat e Symfonys ...... 13 2.6.3 Siguria e Symfonys ...... 20 2.6.4 Performanca e Symfonys ...... 21 3. DEKLARIMI I PROBLEMIT ...... 23 4. ANALIZA ...... 24 5. METODOLOGJIA ...... 26 6. REZULTATET ...... 27 6.1 Si krahasohen Laravel dhe Symfony në ofrimin e komponenteve ...... 27 6.2 Si krahasohen Laravel dhe Symfony ne termin e performances ...... 27 6.3 Si krahasohen Laravel dhe Symfony në termin e siguris ...... 28 6.4 Si krahasohen Laravel dhe Symfony në termin e perdorshmeris ...... 28 6.5 Si krahasohen Laravel dhe Symfony ne mbeshtjetjen e komunitetit ...... 28 6.6 Si krahasohen Laravel dhe Symfony në projektet qe i përdorin ...... 28 6.7 Konkluzion ...... 29 6.8 Zgjedhja ime e preferuar ...... 29 7. DISKUTIME DHE PËRFUNDIME ...... 30 8. REFERENCAT ...... 31

III

LISTA E FIGURAVE

Figure 1 - Validimi Laravel ...... 5 Figure 2 - Mail Laravel ...... 5 Figure 3 - Veiw Laravel ...... 7 Figure 4 – Cookie Laravel ...... 7 Figure 5 – Routing Laravel ...... 8 Figure 6 – Laravel ...... 9 Figure 7 - Laravel Storing Security ...... 10 Figure 8 - Laravel Make Security ...... 10 Figure 9 - Laravel Authenticating Security ...... 10 Figure 10 – The Asset Component ...... 13 Figure 11 – Symfony FileSystem ...... 15 Figure 12 - HttpFundation ...... 15 Figure 13 – Process Symfony ...... 16 Figure 14 – PropertyAcees Symfony ...... 17 Figure 15 – Route Collection Symfony ...... 17 Figure 16 - Serializer Symfony ...... 18 Figure 17 – Stopwatch Symfony...... 18 Figure 18 – Validator Symfony ...... 19 Figure 19 – Composer Symfony ...... 20 Figure 20 - EncoderFactory Symfony...... 21 Figure 21 – PHP Framework Poulariteti në punë ...... 24 Figure 22 – PHP Framwork Populariteti në projekte personale ...... 25 Figure 23 – Asset Pecompile ...... 11

IV

FJALORI I TERMAVE

DBMS - DataBase Management System HTML - Hyper Text Markup Language CSS - Cascading Style Sheets XML - Extensible Markup Language JS - Javascript W3C - World Wide Web Consortium IE8 - Internet Explorer 8 ES6 - EcmaSript 6 DOM - Document Object Model CDN - Content Delivey Network PHP - PHP: Hypertext Preprocessor MVC - Model-View-Controller HTTP - Hypertext Transfer Protocol ORM - Object Relational Mapper SQL - Structured Query Language ACL - Access Control listat LTS - Long Term Support LDAP - Lightweight Directory Access Protocol URL - Uniform Resource Locator ICU - Intensive Care Unit INTL - International JSON - JavaScript Object Notation CMS - Content management system

V

1.HYRJE

Me rritjen e përdorueseve të internetit, edhe kërkesa për të zotëruar një web faqe është në rritje. Një nderë mënyrat për të përfaqësuar vetën, organizatën apo biznesin në internet është duke zotëruar një web faqe të kompanisë. Zotëruesit e web faqeve vijnë nga të gjitha fushat e jetës nga bizneset e ndryshme që e përdorin web faqen për marketing dhe komunikim e deri tek një përdorues i thjesht që e mban web faqen e tij si një blog apo deri tek një udhëtar që dokumenton udhëtimet e tij. Një nderë qëllimet kryesore për zotëruesit e web faqeve është të argëtojnë sa më shumë vizitorë të mundshëm. Për të argëtuar sa më shumë vizitorë, web faqja duhet të jetë kompatibile me pajisjet që ata përdorues i përdorin. Zhvilluesit për të arritur kompatibilitetin e web faqes me shumë pajisje përdorin media queries ku për çdo element varësisht nga lloji i pajisjes duhet të përshtatet. Kjo merr shumë kohë dhe kërkon shumë ekspertizë në fushën e dizajnit të web faqeve. Për parandalimin e këtyre problemeve përdoren Framework. Ne ndërtimin e nje websiti dallojmë freamwrok qe përdoren ne pjesën FrontEnd dhe Backend. FrontEnd eshte pjesa qe çdo gjë e përfshirë me atë që përdoruesi sheh duke përfshirë hartimin dhe disa gjuhë si HTML dhe CSS. Backend zakonisht përbëhet nga tri pjesë: një server, aplikacioni, si dhe një bazë të dhënash. PHP është një nga gjuhët më të njohura programuese për zhvillimin e web-it. Ne këtë punim do te studiojmë për framework e PHP si një gjuhe qe zotëron rreth 81.8% te websajtave ne botë që janë ndërtuar me PHP.

1

2. SHQYRTIMI I LITERATURËS (HISTORIKU) Zhvillimi i web aplikacioneve si industri në vetë përfshinë dy pjesë: Front-End dhe Beck- End. Pjesa Beck-End njihet si pjesa e serverit, përbëhet nga 3 pjesë, ajo e serverit, aplikacionit dhe data bazës. Kurse pjesa Front-End është pjesa e klientit. Beck-End është pjesa logjike e aplikacionit ku ndërtimi i saj mundë te behet me disa gjuhë programuese. PHP është njëra prej gjuhëve më të përdorura aktualisht ne zhvillimin e web aplikacioneve.

2.1 PHP PHP është gjuhë skripteve e dedikuar për te zhvilluar web aplikacione. PHP është njëra ndër gjuhet më të përhapura skriptive që janë te bazuara në burimet e hapura(Open Source). Interpreteri i PHP-së është i shkruar për shume sisteme operative si Linux, Unix, Mac OSX, Novel, OS/2 e Windows që do të thotë se i njëjti PHP kod do të ekzekutohet në të gjithë serverët e lartpërmendur pothuajse pa ndonjë ndryshim në te. Disa prej arsyeve pse PHP është më e përdorshme janë këto: - Lehtë për të filluar, PHP është projektuar për të bërë web zhvillim më të lehtë. Shumë fillestar këtë gjuhë programuese e shohin shumë më të lehtë për të filluar një faqe interneti. - Kjo gjuhë programimi është më e mira në shpejtësi dhe rezulton ne ngarkim te shpejtë të të dhënave nga baza e të dhënave. - Kjo është më fleksibile në lidhjen e bazës së të dhënave dhe mund të lidheni me disa bazave të të dhënave në të njëjtën kohë. Disa prej website me te suksesshëm që përdorin janë (Facebook, Wikipedia, Baidu, Yahoo ,Tumblr). [1]

2

2.2 Baza e të dhënave Një sistem i menaxhimit të bazës të të dhënave është një grumbull i të dhënave të ndërlidhura dhe një bashkësi e programeve që kanë mundësi t’i qasen këtyre të dhënave. Grumbullit të të dhënave që përmbajnë informacionin përkatës, i referohemi si baza e të dhënave (ang. database). Qëllimi kryesor i një DBMS: • të sigurojë një mënyrë më të përshtatshme dhe efikase për të ruajtur dhe të rifitojë informacion nga baza e të dhënave. Sistemet e bazës së të dhënave janë të dizajnuara për të menaxhuar sasi të mëdha të informatave. Menaxhimi i të dhënave përfshin përcaktimin e strukturave për ruajtjen (magazinimin) e informacionit dhe sigurimin e mekanizmave për manipulim me informacion. [1]

2.3 Web serverëve Dedikim parësor i Web serverëve është distribuimi i Web faqeve me kërkesën e klientëve, duke u bazuar në protokollin HTTP. Kjo përfshin dërgimin e dokumenteve të tipave të ndryshme, imazheve, audio/video faj llavë, etj. Shfletuesi (browser, user agent) e inicion komunikimin duke dërguar kërkesë për një resurs specifik duke përdorur HTTP. Në këtë serveri i përgjigjet duke ia dërguar përmbajtjen e kërkuar apo duke kthyer raportin e gabimit, nëse ai resurs nuk është gjetur. Resursi i kthyer mund të jetë fajll real që ekziston në diskun e serverit, por edhe mund të jenë të dhëna të gjeneruara në mënyrë dinamike. Përveç dërgimit të të dhënave, serveri është në gjendje edhe të pranojë të dhëna nga klientët. Kjo rëndomë ka të bëjë me pranimin e përmbajtjes së ndonjë formulari, apo të fajllave të atashuar. Shumë Web serverë, përkrahin gjuhët skripteve siç janë PHP, ASP, Perl, Python, etj. Këto më tepër përdoren për krijimin e HTML dokumenteve dinamike, që gjenerohen aty për aty. [1]

2.4 Backen-End Framework Framework është një platformë për zhvillimin e aplikacioneve, ai siguron një bazë mbi të cilën zhvilluesit e programeve mund të ndërtojë programe për një platformë të veçantë. Përdorimi i framework si formë asistence është një mënyrë për të lehtësuar punën, për të kursyer kohën, rrit efikasitetin dhe kualitetin. [2]

3

Pse ti përdorim Fremawrok-at: - Zhvillim më të shpejt te web-aplikacioneve. - Siguri më të avancuar. - Kod i pastër dhe i rregullt. - Të përshtatshme për punën në grup. - Kanë të aplikuar arkitekturën MVC. Lista e Backend framework është mjaft e pasur, por sipas statistikave të publikuara del se Laravel është Frameworki më i përdoruri pastaj radhiten: Symfony, CodeIgniter, Yii2, Phalcon, Cake PHP, Zend Framework, Slim, FuelPHP, PHPixie.

2.5 Laravel Laravel është një framework “Open-Sourse” pa pagës. Versioni i pare i tij është lancuarë me datën 9 qershor 2011 nga Taylor Otwell. Tani laravel Framework është një nga framework-at më të njohura te gjuhës skriptuse PHP. Laravel është projektuar ekskluzivisht për zhvillimin e aplikacioneve ne arkitekturën modelit view kontrollues (MVC) dhe ai është lancuar në bazë të licencës MIT. Laravel është ndërtuar që të jetë e thjeshtë, të lehtë për të mësuar dhe mbështet zhvillimin e shpejtë të web-aplikacioneve. [2] Laravel Beta - është version I pare ku sipas zhvilluesit Taylor Otwell framework-it CodeIgniter I mungojnë funksionalitetet që janë thelbësore në ndërtimin e web-aplikacionve. Laravel 1 - në këtë pike Laravel ende nuk ishte MVC Framework , në muajt në vijime shtonë metodat e validimit , duke zgjeruar Elokuente ORM. [2] Laravel 2 - më pak se 6 muaj kalojnë ne versionin e 2-të , me shtimin e kontrollorëve , freamwroki Laravel kalon në një kornizë të kualifikuar MVC. [2] Laravel 3 - doli në shkurt 2012 me një sere tipare të reja duke përfshirë ndërfaqe command- line(CLI), migrimet bazës së të dhënave etj. Laravel 3 versioni më i qëndrueshëm dhe solid i Laravel në atë kohë. [2] Laravel 4 – doli në maj 2013 është bërë si një rishkruaj plotë të framework-it Laravel. Laravel 4 ka një grup të zgjeruar të karakteristika që asnjë version tjetër të Laravel nuk ka pasur më pare. [2] Laravel 5- Ky version përmban më shumë se 22 veçori të reja. Laravel 5.0 paraqet një strukturë të re aplikimi për projektin default Laravel. Kjo strukturë e re shërben si një themel i mirë për

4 ndërtimin e një aplikacioni të fuqishme në Laravel, si dhe përqafon standarde të reja auto- ngarkimit (PSR-4). Versioni i fundit është Laravel 5.3.

2.5.1 Komponentat e Laravel Laravel ofron shumë komponentë të gatshme dhe të ripërdoreshe për të ndërtuar aplikacionin. Komponentët qe ofron frameworki Laravel janë: Illuminate Database, Validation, Filesystem, Configuration, Mail, Notifications, Contacts, Session, Cashe, View, Cookie Queues, Routing, Broadcastin, Pagination, Reids, Socialite, Container. [9]

Illuminate Database – Laravel bashkëvepron me bazat e të dhënave në mënyrë shumë të thjeshtë nëpër një shumëllojshmëri të bazës së të dhënave duke përdorur SQL papërpunuara, ndërtimin e rrjedhshëm të queryit dhe më elokuente ORM. Aktualisht, Laravel mbështet katër bazat e të dhënave: MySQL, postgres, SQLite, SQL Server. Konfigurimi bazës së të dhënave për aplikacionin tuaj është vendosur në config / database.php. Në këtë file ju mund të përcaktoni të gjitha lidhjet tuaja të bazës së të dhënave si dhe të përcaktojë se cila lidhja duhet të përdoret nga default. [17] Validation - Laravel ofron disa qasje të ndryshme për të vërtetuar të dhënat hyrëse ne aplikacionin tuaj. By default klasa bazë kontrollues në Laravel përdor një tipar ValidatesRequests e cila ofron një metodë të përshtatshme për të vërtetuar kërkesën e hyrje HTTP me një shumëllojshmëri të rregullave të fuqishme të validimit.

Figure 1 Validimi Laravel Metoda validate pranon një kërkesë HTTP hyrje dhe një sërë rregullash të validimit. Në qoftë se rregullat validation kalojë kodin tuaj do të vazhdojë ekzekutimin normalisht. Megjithatë në qoftë

5 se dështon validation do të hidhet një përjashtim dhe reagimi i duhur automatikisht do të kthehet për të përdoruesit. [18] Filesystem - Laravel ofron një filesystem të fuqishme në sajë të paketës të mrekullueshme Filesystem PHP nga Frank de Jonge. Integrimi i Laravel Filesystem ofron thjeshtë për t'u përdorur driveret e për të punuar me File sistem lokale, Amazon S3, dhe Rackspace Cloud. Skedari i konfigurimit filesystem është e vendosur në config/filesystems.php. [19] Configuration -Në dosjen config, si emri nënkupton, përmban të gjitha dosjet e konfigurimit aplikacionit tuaj. Në këtë follder ju do të gjeni filet të ndryshme të nevojshme për të konfiguruar bazës së të dhënave, session, mail, application, services, etj. [20] Mail - Laravel siguron një API të pastër dhe të thjeshtë mbi bibliotekën SwiftMailer me drivers për SMTP, Mailgun, SparkPost, Amazon SES, funksionin e postës PHP, dhe sendmail duke e lejuar fillimin e dërgimin e mail nëpërmjet një shërbimi me bazë lokale apo rizgjedhjes suaj.

Figure 2 Mail Laravel Për të dërguar një mesazh përdorni metodën Mail. Të metodës pranon një adresë e-mail, një shembull të përdoruesit, ose një koleksion të përdoruesve. [21] Notifications - Përveç mbështetjes për të dërguar një email, Laravel siguron mbështetje për dërgimin e njoftimeve nëpër një shumëllojshmëri të kanaleve të shpërndarjes, duke përfshirë mail, SMS (nëpërmjet Nexmo) dhe Slack. Njoftimet mund të ruhen në një bazë të dhënash në mënyrë që ata mund të shfaqet në ndërfaqen tuaj web. Njoftimet Dërgimi mund të marrë kohë, veçanërisht nëse kanali ka nevojë për një telefonatë të jashtëm API për të dhënë njoftimin. Për të shpejtuar kohën në përgjigje aplikacionit tuaj njoftimi yt queued duke shtuar interface ShouldQueue dhe Queueable tipar në klasën tuaj. [22] Contacts - Laravel's Contracts janë një grup i ndërfaqeve që përcaktojnë shërbimet kryesore të ofruara nga framework. Për shembull, një Illuminate\Contracts\Queue\Queue përcakton metodat

6 e nevojshme për queuing vende pune, ndërsa Illuminate\Contracts\Mail\Mailer përcakton metodat e nevojshme për dërgimin e e-mail. Çdo contracts ka një zbatim përkatës të parashikuar nga framework. [23] Session - ofrojnë një mënyrë për të ruajtur informacione në lidhje me përdoruesit në të gjithë kërkesave të shumta. Laravel me një shumëllojshmëri të backends session që janë në disponim nëpërmjet një API ekspresive të unifikuar. Fajli i konfigurimit të Sessionit është ruajtur në config/session.php. • file - sesione janë të ruajtura në storage/framework/sessions. • cookie - sesione janë të ruajtura në të sigurta cookies Encrypted. • database - sesione janë të ruajtura në një bazë të dhënash relacionale. • Memcached / REDIS - sesione janë të ruajtura në një nga këto dyqane cache shpejtë bazuar. • array - sesione janë të ruajtura në një array PHP dhe nuk do të vazhdoi. [24] Cashe - Laravel ofron një API të unifikuar për backends caching. Konfigurimi cache është vendosur në config/cache.php. Në këtë file që ju mund të specifikoni cilat drivers cache ju do të donit përdorur nga default në të gjithë apliacionin tuaj. Laravel mbështet backends popullore jashtë kutisë caching si Memcached dhe Redis. By default Laravel është konfiguruar të përdorë file cache drives , objektet kopje e ruajtur në filesystem . [25] View - Në kuadër MVC, shkronja "V" qëndron për Views. Ajo ndan logjikën e aplikacionit dhe logjikën e prezantimit. Views janë të ruajtura në follderin resources/views. Në përgjithësi, view përmban HTML të cilat do të shërbejnë aplikacionit.

Figure 3 Laravel View

7

Siç mund ta shikoni argumenti i parë korrespondon me emrin e view file shikoni në listën e resources/views ndërsa argumenti i dytë .blade më anë të ciles I tregojm laravelit se file shërben si view.Blade është i thjeshtë por një templating motor i fuqishëm. Blade gjithashtu perkrah të gjitha konstruktet kryesore të PHP për të krijuar loop si dhe kushtet - @for, @foreach, @while, @if dhe @elseif. [26] Cookie - Të gjitha cookies të krijuara nga frameworki Laravel janë të koduara dhe të nënshkruar me një kod authentication dhe nuk mund të ndryshohet nga klienti. Cookie () metodë do të marrë 3 argumente argumenti i parë është emri i cookie, argumenti i dytë është vlera e cookie dhe argumenti i tretë është kohëzgjatja e cookie pas së cilës cookie do të fshihet automatikisht.

$response->withCookie(cookie()->forever('name', 'value')); Figure 4 Laravel Cookie Queues - Komponenti Laravel Queue ofron një API të unifikuar nëpër një shumëllojshmëri të shërbimeve të ndryshme queue. Queues të lejojë që të shtyjë përpunimin e një detyrë të tilla si dërguarit e një e-mail, pra queues në mënyrë drastike bën përshpejtimin e kërkesave të web apliacionin tuaj mbrenda një kohe. [27] Http Sesion - Sessions ofrojnë një mënyrë për të ruajtur informacione në lidhje me përdoruesit nëpermjet kërkesave të shumta. Fajli i konfigurimit të Session është ruajtur në config/session.php. By default, Laravel është konfiguruar të përdorë file sesion driveret te cila do të punojë për shumë aplikacione. [28] Http Responses - Të gjitha rrugët dhe kontrolluesit duhet të kthehen një përgjigje që do të dërgohen përsëri në shfletuesin e përdoruesit. Laravel ofron disa mënyra të ndryshme për t'u kthyer përgjigje. Korniza do të konvertohet automatikisht string në një përgjigje të plotë HTTP. [29] Routing - Routes më basik në Laravel pranojë një URI dhe një mbyllje duke siguruar një metodë shumë të thjeshtë dhe ekspresive për përcaktimit të rrugëve. Rrugët e aplikacionit mund të përcaktohet në filin app/Http/routes.php. [30]

Figure 5 Laravel Routing

8

Broadcasting - Në shumë aplikacione moderne të internetit WebSockets janë përdorur për të zbatuar realtime live përditësimin ndërfaqe të përdoruesit. Kur disa të dhënave është përditësuar në server mesazhi është dërguar zakonisht mbi një lidhje WebSocket që të trajtohen nga klienti. Për të ju ndihmuar në ndërtimin e këtyre llojeve të aplikacioneve, Laravel e bën të lehtë për të "brodcasting" ngjarjet tuaja mbi një lidhje WebSocket. Të gjitha të konfigurimit e ngjarjeve broadcasting në aplikacionin tuaj është ruajtur në filin e konfigurimit config/broadcasting.php. Laravel mbështet disa drivers të broadcasting jashtë kutisë: Pusher, Redis, dhe një drivers log për zhvillim lokal dhe debugging. [31] Pagination - Në framework të tjerë pagination mund të jetë shumë i vështirë. Paginator Laravel është integruar me ndërtues query dhe ORM elokuente dhe siguron të përshtatshëm lehtë për ta përdorur pagination e rezultateve të bazës së të dhënave nga kutia. HTML gjeneruar nga paginator është në përputhje me kuadrin e Bootstrap CSS. [32] Reids - është një open source i avancuar dyqan me vlerë kryesore. Ajo është përmendur shpesh si një server strukturë e të dhënave që nga çelësat mund të përmbajë strings, hashes, lists, sets dhe grupe të renditura. [33] Socialite - Laravel gjithashtu ofron një mënyrë të thjeshtë të përshtatshme për të authentiaction me ofruesit Auth përdorur Laravel Socialite. Socialite aktualisht mbështet authentication me Facebook, Twitter, LinkedIn, Google, Github dhe Bitbucket. [34] composer require laravel/socialite Figure 6 Laravel Composer Service Container - Laravel service container është një mjet i fuqishëm për menaxhimin varsh- mëris të klasës. Pothuajse të gjithë shërbimit lidhjet tuaja container do të regjistrohet brenda ofruesit e shërbimeve. [35]

2.5.2 Larvel Security Siguria është tipar i rëndësishëm, në dizajnin e web aplikacioneve. Ajo siguron përdoruesit që të dhënat e tyre janë te sigurta. Laravel ofron mekanizma të ndryshëm për të siguruar faqen e internetit. Disa nga karakteristikat janë të shënuara më poshtë: Storing Passwords - Laravel ofron një klasë të quajtur "Hash" klasë e cila ofron hashing Bcrypt. Siqë shihet ne shembullin në vijim. [6]

$password = Hash::make('secret');

9

Figure 7 Laravel Sotring Security make () funksion do të marrë një vlerë si argument dhe do të kthehen vlerën e hash. Vlera hash mund të kontrollohet duke përdorur check () funksion në mënyrën e mëposhtme.

Hash::check('secret', $hashedPassword) Figure 8 Laravel Make Security Authenticating - Veçoritë tjetër kryesore të sigurisë në Laravel është vërtetimi i përdoruesit të cilët do të kryejë veprime në aplikacionin.Laravel e ka bërë këtë detyrë më të lehtë dhe për të bërë këtë ne mund të përdorim metodën Auth :: . if (Auth::attempt(array('email' => $email, 'password' => $password))) { return Redirect::intended('home'); } Figure 9 Laravel Authentiacting Security Auth::attempt Metoda e attempt do të marrë kredencialet si argument dhe do të verifikojë ato kredencialet kundër kredencialet e ruajtura në bazën e të dhënave dhe do të kthehej True nëse ajo përputhet dhe do të kthej Fasle nëse kredencialet nuk përputhen. Authorization - Laravel gjithashtu ofron një mënyrë të thjeshtë për të autorizuar veprimet e përdoruesve ndaj resurseve të caktuar të një aplikacioni. Laravel për autorizim e përdoruesit ka dy mënyra kryesore për të autorizuar veprimeve: gates dhe policies.Shumica e aplikacioneve përmbajë një përzierje e gates dhe policies, dhe kjo është plotësisht në rregull! Gates janë mbylljen që përcaktojnë nëse një përdorues është i autorizuar për të kryer një veprim të caktuar dhe janë të përcaktuara në mënyrë tipike në App\Providers\AuthServiceProvider. Policies janë klasa që organizojnë logjikën autorizimin rreth një model të veçantë ose burim. Për shembull, nëse kërkesa juaj është një blog, ju mund të keni një model Post dhe një PostPolicy përkatës për të autorizuar veprimeve të përdoruesit të tilla si krijimi ose përditësimi mesazhet. [5]

10

2.5.2 Larvel Performance Ndonjëherë me framework ne sakrifikojmë përformancen për ta lehtësuar ndërtimin e një web aplikacioni. Laravel ka bërë një punë të mirë në mbajtjen e Frameworkit ne përformanc, por këtu janë disa gjëra që ju mund të bëni për të ndihmuar të rritur më tej performancën Laravel. Minimizim i pluginave –Ka një shumëllojshmëri të gjerë të plugins për Laravel që ju lejon lehtë për ti shtuar më shumë funksionalitet. Me këtë funksionalitet në rritje të vijnë më shumë biblioteka (dhe file) të ngarkesës të cilat mund të ngadalësojë gjëra . Sigurohuni që të marrë një vështrim në të cilat ofruesit në dosjen tuaj config/app.php dhe të zvogëlojë nga ato të panevojshme. Përveç kësaj, Laravel përdor kompozitorit për të menaxhuar komponentët e tij, kështu që tëharrje dosja juaj composer.json do të ndihmojë në uljen varësitë që janë të ngarkimit. [65] Shkurtoni Response Data tuaja - Kjo zakonisht zbatohet në kornizat tipit API, por gjithashtu mund të aplikojnë për aplikimet tradicionale MVC krijuara brenda Laravel. Zgjidhja për këtë është që të përdorin "View Models", një subset optimizuar të dhënave nga modelet tuaj të të dhënave, që përmbajnë vetëm elementet e të dhënave që ju duhet për shfaqje. Nëse ju jeni ndërtimin e një API ose kthimin e të dhënave JSON ju mund të përdorni një bibliotekë të tillë si Fractal për të përkthyer lehtë të dhënat e modelit tuaja objekt dhe të përfshijë vetëm atë që ju duhet. [65] Asset Pecompile - Për zhvillius, që ka të gjitha assetet tuaja në dosje të veçanta të tilla si routes dhe skedarët e konfigurimit është e dobishme për mirëmbajtjen e kodit. Për prodhimin, kjo nuk është e nevojshme. Për të ndihmuar me këtë, Laravel ka disa artisan commands në dispozicion që ju mund të bëni run përpara vendosjes në faqen tuaj [65]:

php artisan optimize php artisan config:cache php artisan route:cache

Figure 23 Asset Pecompile

11

2.6 Symfony Symfony është një framework i projektuar për të opti mizuar zhvillimin e web aplikacioneve me anë të disa tipare kryesore. Symfony është “Open-Sourse” pa pagesë dhe i lëshuar nën licencën MIT. Symfony u frymëzua nga kornizat e tjera të internetit të tilla si Ruby on Rails, Django. Puna në këtë framework filloj , në dimrin e vitit 2004, dhe versioni i parë u lansua në tetor 2005. Personi i cili krijoi dhe themeloi këtë kornizë është Fabien Potencier, i cili zhvilloi projektin për kompaninë e tij. Pas zbatimit me sukses të kornizës në disa projekte të brendshme, Fabien vendosi të lejojë njerëzit e tjerë të përdorin kornizën, në mënyrë për të mbledhur reagime nga përdoruesit e saj. Pasi u vendos për të nisur projektin si burim të hapur, ajo u quajt "Symfony". [4] Version 1.0 është lansuar në fillim të vitit 2007 Ajo ishte versioni i parë stabil nisur, dhe ka marrë mbështetje për 3 vjet. Version 1.1 filloi në mesin e vitit 2008 , por kjo nuk ishte në përputhje me versionin e mëparshëm, i cili bëri përditësimin e projekteve të vjetra në versionin e ri. Version 1.2 është nisur në fund të vitit 2008 Migrimi ndërmjet këtyre dy versioneve të ishte shumë më e lehtë, pasi që nuk ka pasur ndryshime të mëdha në aspektin e strukturës. Versionet e fundit të degës 1.x ishin nisur një vit më vonë, në fund të vitit 2009. Versionet 1.3 dhe 1.4 janë nisur njëkohësisht. Versioni i qëndrueshëm që mori përkrahje afatgjatë (LTS1), ishte 1.4. [4] Versioni 2.0 Lansimi i parë i Symfony 2 nuk ishte i përsosur, por ishte premtuese. Symfony 2.0 filloi në korrik të vitit 2011. Ajo është e bazuar në submodules Git. Versione 2.1, filloi në shtator të vitit 2012 , dhe 2.2, nisur në mars të vitit 2013, ishin të ngjashme me atë që ne përdorim në ditët e sotme, por, pavarësisht nga të gjitha këtë, ajo kërkon një përpjekje mjaft e madhe për të migruar nga këtë version për versionet e ardhshme. Version 2.3 filloi në qershor 2013 dhe ishte versioni i parë LTS1 në degën 2.x. Version 2.3 është zhvilluar në vetëm 3 muaj. Version 2.4 ishte i pari në degën 2.x e cila nuk ka futur ndonjë papajtueshmëri me versionin e mëparshëm. Versionet 2.7 dhe 2.8 janë nisur në 2015, maj dhe nëntor. Të dy versionet kanë një periudhë mbështetje trevjeçare. Version 2.8 është lansuar në të njëjtën kohë me versionin 3.0. [4] Versioni 3.0 është lansuar në nëntor të vitit 2015, pak para konferencës së tretë Symfony në Paris, e cila u mbajt në dhjetor të vitit 2015. Kjo është versioni i parë i cili përdor sistemin e ri bazuar në pesë versione të vogla. Ky proces është i bazuar në versionin semantike. [4]

12

2.6.1 Komponentat Symfony Symfony njihet si një framework i pasur me component .ajo ofron shumë komponentë të gatshme dhe të ripërdoreshme. Ata janë duke e bërë bazën standarde për ndërtimin e një web- apliacioni ne PHP. Komponentët që ofron Symfonya përfshinë : Asset , BrowserKit, ClassLoader, Config, Console, CssSelector, Debug, Dependenculnjection, ExpressionLanguage, Filesystem, Form, Guard, HttoFoundation, HttpKernel, Icu, Intl, Ldap, Locale, OptionsResolver, Process, PropertyAccess , PropertyInfo, Routing, Security, Serializer, Stopwatch, Templating, Translation, Validator, VarDumper, Yaml. [8]

The Asset komponent - Menaxhon brezin e URL-s dhe versionet e aseteve të internetit të tilla si CSS stylesheets, filat e JavaScript dhe fotografit. Komponenti i Aseteve menaxhon asetet nëpërmjet paketave. Një grupe i aseteve që ndajnë të njëjtat veti e përbëjnë një paket. Një nga karakteristikat kryesore të komponentit të Aseteve është aftësia për të menaxhuar versionet e aseteve të aplikacionit. Janë ndërtuar dy strategji per menaxhimin e versioneve EmptyVersionStrategy e cila nuk shtoni ndonjë version të asetet dhe StaticVersionStrategy e cila ju lejon për të përcaktuar versionin me një format String. [36]

Figure 10 – The Asset Component

The ClassLoader komponent - Komponenti ClassLoader ofron mundesin për Autoload dhe cache të cilat rrisin performancën te aplikacionit .Sa herë ju referuar një klasë që nuk është e kërkuar ose e përfshirë akoma, PHP përdor mekanizmin autoloading të delegojë ngarkimin e një file që përcakton klasën. Symfony siguron tre autoloaders, të cilat janë në gjendje të ngarkojnë klasa tuaj: • PSR-0 Class Ngarkues: ngarkimi i klasave që ndjekin standardin PSR-0. • PSR-4 Class Ngarkues: ngarkimi i klasave që ndjekin standardin PSR-4.

13

• MapClassLoader: ngarkimi i klasave duke përdorur një hartë statike nga emri klasës për të paraqitur rrugën. [37]

The Config komponent - Komponenti Config ofron disa klasa për të ndihmuar shfrytëzuesve që vërtetimi i konfigurimit mundë të bëhet me burmiet të ndryshme (YAML, XML, InI files, ose prej një bazë të dhënash). [38]

Console Commands - Komponenti Console ju lejon të krijoni komandat command-line. Urdhërimet e tua tastierë mund të përdoret për çdo detyrë përsëritëse, të tilla si cronjobs, importet, etj. [39]

The CssSelector komponent - Komponenti CSSSelector konverton Css selectors në shprehje XPath. Selectors CSS janë më pak të fuqishme se XPath, por shumë më e lehtë për të shkruar, lexuar dhe kuptuar. [40]

The DomCrawler komponent - Komponenti DomCrawler lehtëson Dom navigacion për dokumentet HTML dhe XML. Klasa Crawler ofron metoda për query dhe manipuluar HTML dhe XML dokumente. [41] The Debug komponent - Komponenti Debug ofron mjete për të lehtësuar debugging në kodin PHP. DebugClassLoader përpiqet për të hedhur përjashtime shumë të dobishme kur një klasë nuk është gjetur nga autoloaders e regjistruar. [42] The EventDispatcher komponent - Komponenti EventDispatcher siguron mjetet që lejojnë komponentët tuaja të aplikacionit për të komunikuar me njëri-tjetrin. Komponenti Symfony EventDispatcher zbaton modelin ndërmjetës në një mënyrë të thjeshtë dhe efektive për të bërë projektet tuaja vërtetë të zgjeruar. [43] The ExpressionLanguage komponent - Komponenti ExpressionLanguage ofron një motor që mund të hartuar dhe vlerësuar expressions. Një shprehje është një linjës që kthen një vlerë (kryesisht, por jo kufizuar në, Booleans). Qëllimi i komponentit është për të lejuar përdoruesit të përdorin shprehje brenda konfigurimin për logjikën shumë të ndërlikuar. [44] The FileSystem komponent - Komponenti Filesystem ofron shërbimet themelore për filesystem. Klasa Filesystem është endpoint unike për operacionet filesystem:

14

Figure 11 Symfony FileSystem Metodat mkdir(), exists(), touch(), remove(), chmod(), chown() dhe chgrp () mund të marrë një varg, një array apo ndonjë objekt në zbatim kalohen si argument i synuar. [45] The Finder komponent - Komponenti Finder gjen file dhe directories nëpërmjet një interface intuitive të rrjedhshëm. [46] The Form komponent - Komponenti Form ju lejon lehtë të krijojnë, procesioni dhe ripërdorimin format. Komponenti Form është një mjet për t'ju ndihmuar të zgjidhur problemin e lejuar end-userave për të bashkëvepruar me të dhënat dhe të modifikojë të dhënat në aplikacionin tuaj. [47] The HttpFoundation komponent - Komponenti HttpFoundation përcakton një shtresë object- oriented për specifikimet HTTP. Në PHP, kërkesa është e përfaqësuar nga disa variabla globale ($ _GET, $ _POST, $ _FILES, $ _COOKIE, $ _SESSION, ...) dhe përgjigja është e gjeneruar nga disa funksione (echo, header, setcookie). Komponenti i HttpFoundation Symfony zëvendëson këto variabla default të PHP globale dhe funksionet nga një shtresë object-oriented. Mënyra më e zakonshme për të krijuar një kërkesë është që të bazojnë atë në PHP variablave aktuale globale me createFromGlobals().[48]

Figure 12 HttpFoundation Symfony The HttpKernel komponent - Komponenti HttpKernel siguron një proces të strukturuar për konvertimin e një kërkesë në një përgjigje nga e bërë përdorimin e komponentit EventDispatcher. Kjo është mjaft fleksibile për të krijuar një freamwrok full-stack (Symfony), një micro-framework “” apo një sistem të avancuar CMS (). Çdo HTTP web

15 ndërveprim fillon me një kërkesë dhe përfundon me një përgjigje. Detyra jote si një zhvillues është për të krijuar kodin PHP që lexon të dhënat kërkesën (psh URL) dhe krijon dhe kthen një përgjigje (psh një faqe HTML ose JSON string). [49] The Intl komponent - Një shtresë zëvendësim PHP për zgjerimin INTL C që gjithashtu ofron qasje në lokalizimin të dhënat e bibliotekës ICU. [50] The Ldap komponent - Komponenti LDAP siguron një mjet për t'u lidhur me një server LDAP (OpenLdap ose Active Directory). Klasa LdapClient ofron metoda për të vërtetuar dhe query ndaj një server LDAP. Klasa LdapClient mund të konfigurohet duke përdorur opsionet e mëposhtme: host, port, version, useSsl, useStartTls, opReferrals. [51] The Locale komponent - Komponenti Locale jep kod fallback për të trajtuar rastet kur shtrirja intl mungon. Përveç kësaj ajo shtrihet zbatimin e një klase amtare Locale me disa metoda të dobishëm. [52] The OptionsResolver lomponent - Kjo ju lejon për të krijuar një sistem të opsioneve me opsionet e kërkuara, defaults, validation (type, value), normalizimin etj. [53] The Process komponent - Komponenti Procesi ekzekuton komandat në sub-processes. Klasa Process ju lejon për të ekzekutuar një komandë në një sub-process:

Figure 13 Process Symfony Komponenti kujdeset për dallimet delikate në mes të platformave të ndryshme kur ekzekutohet komanda. Metoda getOutput() gjithmonë kthehet të gjithë outputin e prodhimit standarde të komandës dhe getErrorOutput() përmbajtjen e gabimeve. Metoda ClearOutput() fshinë përmbajtjen e outputit dhe clearErrorOutput() fshinë përmbajtjen e outputit të gabimeve. [54] The PropertyAccess komponent - Komponenti PropertyAccess siguron funksionin për të lexuar dhe shkruar from/to një objekt apo grup duke përdorur një simbol të thjeshtë string. Pika e

16 hyrjes i këtij komponenti është PropertyAccess :: createPropertyAccessor. Kjo do të krijojë një shembull të ri të klasës PropertyAccessor me konfigurimin e parazgjedhur [55] :

Figure 14 PropertyAcees Symfony The PropertyInfo komponent - Komponenti PropertyInfo ju lejon të merrni informacion në lidhje me vetit e klasave duke përdorur burime të ndryshme të metodata. Derisa PropertyAccess ju lejon të lexoni dhe të shkruani vlerat to/form objektet dhe vargjeve, komponenti PropertyInfo punon vetëm me përkufizimet e klasës për të dhënë informacion në lidhje me llojin e të dhënave dhe dukshmëri nëpërmjet getter ose setter metodat brenda asaj klase. [56] The Routing komponent - Komponenti Routing është një map për kërkesat HTTP për një sërë variablash konfigurimi. Një mënyrë për të ngritur një sistem bazik routing ju duhet tre pjesë: • RouteCollection e cila përmban definicionet e rrugës. • RequestContext i cili ka informacion në lidhje me kërkesën. • UrlMatcher e cila kryen mapin e kërkesës për një rrugë të vetme.

Figure 15 RouteCollection Symfony Ju mund të shtoni sa më shumë rrugë një RouteCollection. RouteCollection :: add () metodë merr dy argumente i pari është emri i rrugës i dyti është një objekt Route, e cila pret një rrugë URL dhe disa grup të variablave coustum në konstruktor saj. [57]

17

The Serializer komponent - Komponenti serializer ka për qëllim të përdoret për të kthyer objekte në një format të veçantë (XML, JSON, YAML, ...) dhe anasjelltas.

Figure 16 Serializer Symfony Siç mund ta shikoni në figuren më sipër array është përdorur si një ndërmjetësues në mes. Në këtë mënyrë, encoder do të merrej vetëm me formate specifike për ti kthyer në array dhe anasjelltas. Në të njëjtën mënyrë Regulators do të merret me objekte të veçanta për ti kthyer në vargjeve dhe anasjelltas. [58] The Stopwatch komponent - Komponenti Kronometri ofron një mënyrë të lehtë dhe të qëndrueshme për të matur kohën e ekzekutimit të pjesëve të caktuara të kodit. Përdorni klasën e thjeshtë Stopwatch [59]:

Figure 17 Stopwatch Symfony The Templating komponent - Komponenti templating ofron të gjitha mjetet e nevojshme për të ndërtuar çdo lloj sistemi tempelate. [60] The Translation komponent - Komponenti translational ofron mjete për të internacionalizimin kërkesën tuaj. Pika kryesore e qasjes së komponentit translational është Translator. Para se ju mund ta përdorni atë ju duhet të konfiguroni atë dhe load mesazhet për të përkthyer . [61]

18

The Validator komponent - Komponenti Validator ofron mjete për të vërtetuar vlerat. Komponenti Validator është i bazuar në dy koncepte: • Contraints të cilat përcaktojnë rregullat që duhet te jenë për validimi. • Validator cilat janë klasat të cilat e përmbajnë logjiken aktuale të valdimit. [62]

Figure 18 Validator Symfony The VarDumper komponent - Komponenti VarDumper ofron mekanizma për të ecur nëpër çdo variabël arbitrare PHP . E vendosure ne krye ai siguron një dump() funksjonë me të mirë për te përdoru ne vend të var_dump. [63] The Yaml komponent - ngarkesa dhe dump file YAML. Komponenti Symfony Yaml analizon strings YAML për të kthyer ata në vargjeve PHP. [64]

19

2.6.2 Symfony Performance Symfony radhitet ndër frameworkat më performance më të mire. Sigurisht në qoftë se ju nevojitet për shpejtësi më të lart ka shumë mënyra që ju mund të bëni Symfony edhe më të shpejtë. Në vijim do të flasim disa prej menyrat që ta rrismi performance e aplikacionit: Use a Bye Code Cashe - Një nga mënyrat më të mira dhe me të lehta që duhet të bëni për të përmirësuar performancën tuaj është që të përdorin një "Byte Code Cache". Ideja e një bye code cashe është largimi nevojës për të përpiluar vazhdimisht kodin burimor PHP . Ka një numër të byte code caches në dispozicion disa prej të cilave janë me burim të hapur Alternative PHP Cache (APC) , eAccelerator , ionCube PHP Accelerator , Turck MMCache , XCache. [13] Use Composer's Class Map Functionality - By default, Symfony Standard Edition përdor autoloader kompozitorit në dosjen autoload.php. Kjo autoloader është e lehtë për t'u përdorur ai automatikisht do të gjeni ndonjë klasë të re që ju keni vendosur në folderet e regjistruar. Zgjidhja më e thjeshtë është të tregoni Kompozitor për të ndërtuar një "class map" (dmth një array i madh i lokacioneve të gjitha klasave). Kjo mund të bëhet nga vija e komandës, dhe mund të bëhet pjesë e procesit tuaj të vendosë [13]:

Figure 19 Composer Symfony Tweaking Server – Një apliacion i optimizuar duhet të mbështetet në një server mire të optimizuar. Perdorimi 20are20 PHP accelerator (si APC, Xcache, ose eAccelerator) eshte pothuajse i detyrueshëm për një server sepse mund të bëjnë interpretimin e PHP në nje mesatare më 50% më të shpejtë. [14] Use Boostrap File - Për të siguruar fleksibilitet optimal dhe kod të ripërdorshum, aplikacioni Symfony ofron një shumëllojshmëri të klasave dhe komponentëve. Symfony Standard Edition ofron një script për të gjeneruar një të ashtuquajtur file bootstrap, i përbërë nga klasa definicioneve të shumta në një skedar të vetëm. Duke përfshirë edhe këtë file(e cila përmban një kopje të shumë nga klasat kryesore), Symfony nuk ka nevojë që të përfshijë ndonjë file burim që përmbajnë këto klasa. Kjo do të zvogëlojë disk IO mjaft pak. [13]

20

2.6.2 Symfony Security Komponenti Security ne Symfony ofron një sistem të plotë të sigurisë për web- aplikacionin tuaj. Komponenti i sigurisë është i ndarë në katër nën-komponentët që mund të përdoren veçmas: • Symfony/Security-core – Ofron të gjitha tiparet e përbashkëta të sigurisë, nga autentifkimi , autorizimin dhe encoding e fjalëkalimeve për përdoruesit. • Symfony/Security http – Integron nën-komponent kryesor me protokollin HTTP për të trajtuar kërkesat HTTP dhe përgjigjet kërkesave. • Symfony /Security csrf - Siguron mbrojtje kundër sulmeve CSRF. • Symfony /Security-ACL – Ajo ofron një mekanizëm të mirë autorizimeve të bazuar në Access Control listat. Authentication në hapin e parë të sistemit të sigurisë është identifikimi i përdorueseve duke kërkuar përdoruesit të paraqesin një lloj të identifikimit. Një provider Autentifikimi do të përpiqet të vërtetoj një përdorues të bazuar në kredencialet zakonisht këto janë një username dhe një fjalëkalim. Ky funksionalitet ofrohet nga DaoAuthenticationProvider. Ajo fetches të dhënat e përdoruesit nga një UserProviderInterface, përdor një PasswordEncoderInterface për të krijuar një hash të fjalëkalimin dhe kthen një token për të vërtetuar nëse fjalëkalimi ishte i vlefshëm. DaoAuthenticationProvider përdor një encoder për të krijuar një encoder fjalëkalimin për një lloj të caktuar të përdoruesit. Kjo ju lejon të përdorin strategji të ndryshme encoding për lloje të ndryshme të përdoruesve. EncoderFactory default merr një grup të encoders:

Figure 20 EncoderFactory Symfony

21

Authorization pasi sistemi e di se kush je, hapi tjetër është për të përcaktuar nëse ju duhet të keni qasje në një burim të caktuar. Kjo pjesë e procesit të quhet autorizimi, dhe kjo do të thotë se sistemi është i kontrolluar për të parë nëse keni privilegje për të kryer një veprim të caktuar. Një autorizim gjithmonë do të bazohet në disa gjëra për shembull The current token -, token’s getRoles() metodë mund të përdoret për të tërhequr rolet e përdoruesit aktual (psh ROLE_SUPER_ADMIN). Që të vendosë ose jo një përdorues është i autorizuar për të kryer një veprim të caktuar mund të jetë një proces i komplikuar, standardi AccessDecisionManager varet nga votuesit të shumta dhe e bën një vendim përfundimtar në bazë të të gjitha votave(pozitve, negative apo neutrale) që ka marrë. [7]

22

3. DEKLARIMI I PROBLEMIT Arsyeja e përshkrimit dhe krahasimit të këtyre dy frameworkave është se industria e zhvillimit të web aplikacioneve është shumë dinamike dhe kërkon si kualitetin ashtu edhe shpejtësinë, veti të cila framework të ndryshme i ofrojnë. Zakonisht është kërkuar nga zhvilluesit të jenë ekspert të fushës për të arritur vetit të cilat kërkohen për web aplikacionet kualitative. Për shumë zhvillues të rinjtë mund të jetë sfiduese zgjedhja dhe mësimi i një framework. Si Laravel ashtu edhe Symfony janë zgjedhje e shkëlqyer, përkundër mundësive që ofrojnë dhe që janë me të mirat nga lista e backend framework-ave ato janë falas por njëra mund të ju përshtatet me shumë zhvilluesit varësisht për çfarë I nevojitët ne qfare projekti. Kur bëjmë zgjedhjen e framework-ut, ne duhet të shohim vetëtit e tyre, pikat e forta dhe të dobëta të tyre për të bërë një zgjedhje më të zgjuar se cila framework mund të na përshtatet. Per të arritur këtë duhet të adresojmë pyetjet: - Si krahasohen Laravel dhe Symfony në ofrimin e komponentëve. - Si krahasohen Laravel dhe Symfony ne termin e performances. - Si krahasohen Laravel dhe Symfony në termin e siguris. - Si krahasohen Laravel dhe Symfony në termin e përdorshmerisë. - Si krahasohen Laravel dhe Symfony ne mbështetjen e komunitetit. - Si krahasohen Laravel dhe Symfony në termin e suportimin e data bazës. - Si krahasohen Laravel dhe Symfony në përdorshmeri në projekte.

23

4. ANALIZA Në këtë pjesë do të bëhet një analizim në përdorimin e këtyre dy framework-ave, për të ju ndihmuar më shumë në procesin e zgjedhjes. Sipas një sondazhi të cilin e ka bërë SitePoint ne vitin 2015 në të cilen kanë marr pjes 7800 përdoruse sipas sondazhit Framework me i përdorshëm në punë është Laravel ku përcjellët nga Symfony në pozitën e dytë. Ne vijim mundë ta shihini një foto e postuar ne SitePont ku paraqitet rezultatet e sondazhit. [12]

Figure 21 PHP Framework Popullariteti në punë

Po ashtu edhe në projekte personale Laraveli rradhitet ne vend te parë sa i përket aspektit te përdorshmeris duke pasuar nga Symfony ne pozitën e dytë. Ne vijim mundë ta shihini një figuren e postuar ne SitePont ku paraqitet rezultatet e sondazhit ne projekte personale. [12]

24

Figure 22 PHP Framwork Popullariteti në projekte personale

25

5. METODOLOGJIA Metodologjia e ketij hulumtimi është fokusuar në disa drejtime për të arritur krahasimin mes Laravel dhe Symfony: - Metoda analitike, e cila paraqet përmbledhjen nga literatura të ndryshme (libra) - Metoda e kërkimit në internet nga faqe të ndryshme - Metoda e analizimit të vetive të Laravel dhe Symfony. - Metoda krahasimit në mes të dy framework-ave Laravel dhe Symfony.

Metodologjia përfshin krahasimin e vetive kryesorë te framework-ave.

26

6. REZULTATET Ne këtë pjesë do të mundohemi të bëjmë një krahasim përfundimtar në mes versioneve të fundit të Laravel dhe Symfony , në mënyrë që lexuesi i këtij hulumtimi ta këtë më të lehtë të zgjedhë framework-un që i përshtatet më shumë. 6.1 Si krahasohen Laravel dhe Symfony në ofrimin e komponenteve Laravel ofron shumë komponentë të gatshme dhe të ripërdoreshem për të ndërtuar aplikacionin. Komponentët qe ofron frameworki Laravel janë: Illuminate Database, Validation, Filesystem, Configuration, Mail, Notifications, Contacts, Session, Cashe, View, Cookie Queues, Routing, Broadcasting, Pagination, Reids, Socialite, Container. [9] Symfony njihet si një framework i pasur me komponent .ajo ofron shumë komponentë të gatshme dhe të ripërdoreshem. Ata janë duke e bërë bazën standarde për ndërtimin e një web- apliacioni ne PHP. Komponetat që ofron Symfonya përfshinë : Asset, BrowserKit, ClassLoader, Config, Console, CssSelector, Debug, Dependenculnjection, ExpressionLanguage, Filesystem, Form, Guard, HttoFoundation, HttpKernel, Icu, Intl, Ldap, Locale, OptionsResolver, Process, PropertyAccess, PropertyInfo, Routing, Security, Serializer, Stopwatch, Templating, Translation, Validator, VarDumper, Yaml. 6.2 Si krahasohen Laravel dhe Symfony në termin e performances Symfony radhitet ndër frameworkat më performance më të mire. Sigurisht në qoftë se ju nevojitet për shpejtësi më të lart ka shumë mënyra që ju mund të bëni Symfony edhe më të shpejtë. Disa mënyrat që ta rrisim performance e aplikacionit te Symfony: Use a Bye Code Cashe, Use Composer's Class Map Functionality, Tweaking Server, Use Bootstrap File. Laravel ka bërë një punë të mirë në mbajtjen e Frameworkit ne përformanc, por këtu janë disa mënyra që ju mund të bëni për të ndihmuar të rritur më tej performancën Laravel : Minimizim i pluginave, Shkurtoni Response Data tuaja, Asset Pecompile. 6.3 Si krahasohen Laravel dhe Symfony në termin e siguris Si Laravel po ashtu edhe Symfony ofrojnë komponentat bazë per për ta rritur sigurinë në web aplikacionet siq janë : Authentication, Authorization dhe komponentat tjer. Mirëpo te dy framewrok-at ofrojnë mundësi për të ngritur sigurinë e web aplikacionit.

27

6.4 Si krahasohen Laravel dhe Symfony në termin përdorshmerisë Sipas një sondazhi të cilin e ka bërë SitePoint ne vitin 2015 në të cilën kanë marr pjesë 7800 përdorues sipas sondazhit Framework me i përdorshëm në punë është Laravel ku përcjellët nga Symfony në pozitën e dytë. Por edhe ne vitin 2016 Laravel ende mbetet si backend Framework më i përdorshëm. 6.5 Si krahasohen Laravel dhe Symfony në mbeshtjetjen e komunitetit Laravel është me përpara se Symfoy kur vjen tek repositoret dhe mbështetja e kontribuar nga komuniteti. Ta bësh nje search ne github me tag Laravel ti shfaqe rreth 49000 repositores, ndërsa me tag Symfony ti shfaq rreth 19500 repositores dhe kjo e konfirmon mbështetjen me të madhe të Laravelit. 6.6 Si krahasohen Laravel dhe Symfony në termin e suportimin e databazes Laravel bashkëvepron me bazat e të dhënave në mënyrë shumë të thjeshtë nëpër një shumëllojshmëri të bazës së të dhënave. Aktualisht, Laravel mbështet katër bazat e të dhënave: MySQL, postgres, SQLite, SQL Server. [11] Symfony ofron mbështetje më të mirë të bazës së të dhënave. Symfony mbështet disa sisteme për menaxhimin e bazave të të dhënave siq janë: MicrosoftB, MongoDB, MySQL, NoSQL, PostgreSQL, CouchDB, GemFire, GraphDB, MemBase, MemCasheDB, Oracle, ApacheJackrabbit. [10] 6.7 Si krahasohen Laravel dhe Symfony në përdorshmeri në projekete Symfony nuk është vetëm një framework i popullarizuar qe përdorur nga shumë kompani të vogla dhe të mëdha, por ajo është edhe një platforma shumë e mirë për të ndërtuar projekte Open-Source. Projektet me të famshme që përdorin symfony janë: Drupal, phpBB, Laravel, Joombla , ez Publish Community, Composer , Magneto, Piwik etj. [15] Pra siq shihet edhe Frameworki Laravel përdor Symfony në ndërtimin e ti si Framework. Projektet qe përdorin Framework-in Laravel janë : Deltanet Travel, My Rank, Laravel Tricks, Asgard Cms etj. 6.8 Konkluzioni Ne përgjithësi, të dy Laravel dhe Symfony ofrojnë mundësi të ngjashme. • Siguron zhvillimit me shpejt të web aplikacionit • Ndjekin MVC (Model-View-Controller) që siguron ndarjen e prezantimit dhe logjikës • Mirëmbajtje me lehtë e web aplikacioneve • Ofrojnë siguri më të lart të web aplikacionit

28

• Ofrojnë kodë te gateshim dhe te ripërdorshumë Laravel ende mbetet framework më i përdorshëm edhe ne vitin 2016. Shumë nga ekspertë të industrisë dhe zhvilluesit mendojnë se framework-in Laravel është përqendruar në eleganc, thjeshtësi, dhe lexueshmeri. Laravel është lavdëruar për dokumentacionin e tij të qartë dhe të plotë e cila e bën atë një zgjedhje e shkëlqyer si frameworki i parë PHP për zhvilluesit e rinjtë. Symfony nuk është vetëm një framework por edhe një koleksion i komponentëve që mund të përdoret në çdo projektet e PHP. Komponentët e kuadrit të Symfony janë përdorur nga shumë projekte mbresëlënëse të tilla si Drupal content management system, ose phpBB forum software por edhe Laravel framwork-i mbështetet në të. Një e metë e mëdha e Symfony është se ajo është konsideruar e vështirë për të mësuar.

6.9 Zgjedhja ime e preferuar Zgjedhja ime e preferuar është Laravel për shumë arsye të ndryshme. Në vendin ku jetojë, kërkesa për zhvillues që përdorin Laravel shumë e lartë kurse për Symfony kërkesat janë më të vogla. Zgjedhjen e problemeve në Laravel e gjejë shumë më të lehtë për arsye të komunitetit të madh. Po ashtu po për të njëjtën arsye, komuniteti i madh mundëson shumë lloj- llojshmëri të shembujve. Sa i përket zgjedhjes se frameworki per një projekt të caktuar unë mendoj për projekte te cilat konsiderohen të vogla ose të mesme te zgjidhet Laravel , ndersa për projekte më të mëdha te zgjidhet Symfony si framework.

29

7. DISKUTIME DHE PËRFUNDIME

Me poshtë janë paraqitur disa opinione të përdorueseve senior të front-end frameworkave.

➢ “Symfony nuk është vetëm një framework, por një projekt. Varësisht nga nevojat tuaja, ju mund të zgjidhni për të përdorur disa nga komponente e Symfony ,mund të zgjidhni si mikro- framework , apo si framewrok të plotë..” - Fabien Potencier CEO at SensioLab

➢ “Laravel ka një sintaksë ekspresive dhe elegante. Funksionalitetet Laravel janë të lehtë për të kuptuar dhe zbatuar. Këtë na ofron Laraveli.” - Andre Liem Web Developer

➢ “Nuk ka dyshim, Symfony është një ndër framework më stabil i PHP. Kjo është një framework fleksibël, shkallëzuar por i fuqishëm PHP. Symfony ka një komunitet më provoj të lart.” - Robert Long Software Engineer at Intercom

➢ “Populariteti dhe përdorshmeria e madhe e Laravelit ka ardhurë nga lehtësia e ti për ta mesuar, sintaks të bukur , mbështetje nga një komunitet i madhë etj. Këto gjëra e mbëjn më të përdorshmin." - Theodros Desta Senior Lead Software Engineer

30

8. REFERENCAT [1] ”PHP dhe MySQL” http://leanpub.com/phpdhemysqlperfillestare (2015-03-14) [2] https://maxoffsky.com/code-blog/history-of-laravel-php-framework-eloquence-emerging/ [3] http://techterms.com/definition/framework [4] http://todaysoftmag.com/article/1847/symfony-framework-from-1-0-to-3-0 [5] https://www.tutorialspoint.com/laravel/laravel_security.htm [6] https://laravel.com/docs/5.3 [7] http://symfony.com/doc/current/components/security.html [8] http://symfony.com/doc/current/components/index.html [9] https://github.com/illuminate [10] https://opensource.com/business/16/6/which-php-framework-right-you [11] https://laravel.com/docs/5.3/database [12] https://www.sitepoint.com/best-php-framework-2015-sitepoint-survey-results/ [13] http://symfony.com/doc/current/performance.html [14] http://symfony.com/legacy/doc/book/1_1/en/18-performance [15] http://symfony.com/projects [16] http://codecondo.com/15-websites-built-with-laravel/ [17] https://laravel.com/docs/5.3/database [18] https://laravel.com/docs/5.3/validation [19] https://laravel.com/docs/5.3/filesystem [20] https://laravel.com/docs/5.3/configuration [21] https://laravel.com/docs/5.3/mail [22] https://laravel.com/docs/5.3/notifications [23] https://laravel.com/docs/5.3/contracts [24] https://laravel.com/docs/5.3/session [25] https://laravel.com/docs/5.3/responses [26] https://laravel.com/docs/5.3/views [27] https://laravel.com/docs/5.3/queues [28] https://laravel.com/docs/5.3/session [29] https://laravel.com/docs/5.3/responses [30] https://laravel.com/docs/5.3/routing

31

[31] https://laravel.com/docs/5.3/broadcasting [32] https://laravel.com/docs/5.3/pagination [33] https://laravel.com/docs/5.3/redis [34] https://laravel.com/docs/5.3/socailite [35] https://laravel.com/docs/5.3/container [36] http://symfony.com/doc/current/components/asset.html [37] http://symfony.com/doc/current/components/class_loader.html [38] http://symfony.com/doc/current/components/config.html [39] http://symfony.com/doc/current/components/console.html [40] http://symfony.com/doc/current/components/css_selector.html [41] http://symfony.com/doc/current/components/dom_crawler.html [42] http://symfony.com/doc/current/components/debug.html [43] http://symfony.com/components/EventDispatcher [44] http://symfony.com/components/ExpressionLanguage [45] http://symfony.com/doc/current/components/filesystem.html [46] http://symfony.com/doc/current/components/finder.html [47] http://symfony.com/doc/current/components/form.html [48] http://symfony.com/doc/current/components/http_foundation.html [49] http://symfony.com/doc/current/components/http_kernel.html [50] http://symfony.com/doc/current/components/intl.html [51] http://symfony.com/doc/current/components/ldap.html [52] http://symfony.com/doc/2.2/components/locale.html [53] http://symfony.com/doc/current/components/options_resolver.html [54] http://symfony.com/doc/current/components/process.html [55] http://symfony.com/doc/current/components/property_access.html [56] http://symfony.com/doc/current/components/property_info.html [57] http://symfony.com/doc/current/components/routing.html [58] http://symfony.com/doc/current/components/serializer.html [59] http://symfony.com/doc/current/components/stopwatch.html [60] http://symfony.com/doc/current/components/templating.html [61] http://symfony.com/doc/current/components/translation.html

32

[62] http://symfony.com/doc/current/components/validator.html [63] http://symfony.com/doc/current/components/var_dumper.html [64] http://symfony.com/doc/current/components/yaml.html [65] https://www.freshconsulting.com/optimizing-laravel-performance/

33