Laravel

**Laravel** on ilmainen, avoimen lähdekoodin PHP-ohjelmointikieleen perustuva web-ohjelmistokehys, jonka on luonut Taylor Otwell. Se on tarkoitettu web-sovellusten kehitykseen MVC-arkkitehtuurilla ja se pohjautuu Symfonyyn. Osia Laravelin ominaisuuksia ovat modulaarinen pakkausjärjestelmä, jolla on dedikoitu riippuvuuksienhallinta, erilaisia tapoja hallita relaatiotietokantoja, apuohjelmia, jotka auttavat sovellusten käyttöönotossa ja ylläpidossa, ja sen suuntaus syntaktiseen sokeriin. 

Laravelin lähdekoodia ylläpidetään GitHubissa ja lisensoidaan MIT-lisenssin ehtojen nojalla. 

## Historia
Taylor Otwell loi Laravelin yrittääkseen tarjota edistyneempää vaihtoehtoa CodeIgniter- kehykselle, joka ei tarjonnut tiettyjä ominaisuuksia, kuten sisäänrakennettua tukea käyttäjän todennukselle ja valtuutukselle. Laravelin ensimmäinen beetaversio saatiin saataville 9. kesäkuuta 2011, jota seurasi Laravel 1 julkaisu myöhemmin samassa kuussa. Laravel 1 sisälsi sisäänrakennetun tuen todennukselle, lokalisoinnille, malleille, näkymille, istunnoille, reititykselle ja muille mekanismeille, mutta tuki puuttui ohjaimille, jotka estivät sitä olemasta todellinen MVC- kehys.  

Laravel 2 julkaistiin syyskuussa 2011, ja se tuotti erilaisia parannuksia kehittäjältä ja yhteisöltä. Tärkeimpiä uusia ominaisuuksia oli ohjainten tuki, joka teki Laravel 2:sta täysin MVC-yhteensopivan kehyksen. Muita ominaisuuksia olivat mm. sisäänrakennettu tuki ohjausprosessin (eng. Inversion of control) periaatteelle ja mallijärjestelmän nimeltä *Blade*. Haittapuolina kolmansien osapuolien pakettien tuki poistettiin Laravel 2:sta.  

Laravel 3 julkaistiin helmikuussa 2012, ja siinä oli joukko uusia ominaisuuksia, kuten *Artisan* -niminen komentoliittymä (CLI), sisäänrakennettu tuki useammalle tietokannan hallintajärjestelmälle, tietokanta-asettelun siirrot versionhallinnasta, tuki tapahtumien käsittelylle ja pakkausjärjestelmä nimeltään *Bundles*. Laravelin käyttäjäryhmän ja suosion kasvu lisääntyi Laravel 3 julkaisun myötä.  

Laravel 4, koodinimeltään *Illuminate*, julkaistiin toukokuussa 2013. Se tehtiin täydellisenä Laravel-kehyksen uudelleenkirjoituksena, siirtämällä sen asettelu erillisiin paketteihin, jotka jaettiin Composerin kautta, joka toimii sovellustason pakettihallintana. Tällainen suunnitelma paransi Laravel 4:n laajennettavuutta, joka yhdistettiin sen säännölliseen kuuden kuukauden julkaisuaikatauluun, jonka välein julkaistiin pieniä puolijulkaisuja . Muita uusia ominaisuuksia Laravel 4:ssä olivat tietokantojen siemennys tietokantojen alkuperäiselle täytölle, tuki viestijonoille, sisäänrakennettu tuki erityyppisten sähköpostien lähettämiselle ja tuki tietokantatietueiden viivästyneelle poistamiselle, jota kutsutaan *pehmeäksi poistoksi*.

Laravel 5 julkaistiin helmikuussa 2015 sisäisten muutosten seurauksena, jotka päätyivät silloin tulevaan Laravel 4.3-julkaisun uudelleennumerointiin. Uudet ominaisuudet Laravel 5:ssa sisälsivät tuen ajoitettujen tehtävien suorittamiseen *Scheduler-*nimisen paketin kautta, *Flysystem-*nimisen abstraktiokerroksen avulla mahdollistettiin etätallennuksen käyttäminen samalla tavalla kuin paikalliset tiedostojärjestelmät, web-omaisuuksien parempaan käsittelyyn *Elixirin* kautta ja yksinkertaisti ulkoisesti hoidettavan todennuksen valinnaisen *Socialite-*paketin kautta. Laravel 5 esitteli myös uuden sisäisen hakemistopuurakenteen kehitettyihin sovelluksiin. 

Laravel 5.1 julkaistiin kesäkuussa 2015, joka oli Laravelin ensimmäinen julkaisu, joka sai pitkäaikaista tukea (LTS). Uusia LTS-versioita suunniteltiin kerran joka toinen vuosi. 

Laravel 5.3 julkaistiin 23. elokuuta 2016. Uudet ominaisuudet 5.3-versiossa keskittyvät kehittäjänopeuden parantamiseen lisäämällä parannuksia tavallisiin tehtäviin. 

Laravel 5.4 julkaistiin 24. tammikuuta 2017, monilla uusilla ominaisuuksilla, kuten Laravel Dusk, Laravel Mix, Blade komponentit ja Slotit, Markdown-sähköpostit, automaattiset Facadet, reittien parannukset, kokoelmien korkeamman tason viestityksen ja monta muuta.  

Laravel 6 julkaistiin 3. syyskuuta 2019, joka esittelee semanttisen versioinnin, yhteensopivuuden Laravel Vaporin kanssa, parannettuja valtuutusvastauksia, parannettuja työväliohjelmistoja, laiskoja kokoelmia ja alikyselyjen parannuksia. Käyttöliittymäpuolen alkukoodi poistettiin pääpakkauksesta ja siirrettiin laravel/ui -nimiseen pakettiin. 

Laravel 7 julkaistiin 3. maaliskuuta 2020, uusilla ominaisuuksilla, kuten Laravel Sanctum, Custom Eloquent Casts, Blade komponent tagit, Fluent String operaatiot, sekä rettien mallisitomisparannukset.  

### Julkaisuhistoria
LTS-nimisiä versioita tuetaan virhekorjauksilla 2 vuotta ja suojauskorjauksilla 3 vuotta. Muita julkaisuja tuetaan virhekorjauksilla kuusi kuukautta ja tietoturvakorjauksilla yksi vuosi.  

Lähde: Laravel 

## Ominaisuudet
Seuraavat ominaisuudet toimivat Laravelin keskeisinä suunnittelupisteinä (jos ei erikseen mainita, kuvaukset viittaavat Laravel 3:n ominaisuuksiin): 

* *Bundles tarjoaa* modulaarisen pakkausjärjestelmän Laravel 3:n julkaisun jälkeen, mukana toimitetut ominaisuudet, joita on helppo lisätä sovelluksiin. Lisäksi Laravel 4 käyttää Composer -sovellushallintaohjelmaa lisätäkseen kehysangnostisia ja Laravel -kohtaisia PHP-paketteja, jotka ovat saatavana Packagist- arkistosta.  
* *Eloquent ORM* (olio-relaatiomappaus) on aktiivisen tietuemallin edistyksellinen PHP-toteutus, joka tarjoaa samalla sisäisiä menetelmiä tietokantaobjektien välisten suhteiden rajoitusten toteuttamiseksi. Aktiivisen tietuemallin jälkeen Eloquent ORM esittää tietokantataulukoita luokkina, niiden objekti-esiintymät sidottuina yksittäisiin taulukkoriviin.  
* *Query builder*, saatavana Laravel 3:sta lähtien, tarjoaa suoremman pääsyn tietokantaan verrattuna Eloquent ORM:ään. Sen sijaan, että vaadittaisiin SQL-kyselyiden kirjoittamista suoraan, Laravelin Query builder tarjoaa joukon luokkia ja menetelmiä, jotka pystyvät muodostamaan kyselyitälauseita ohjelmallisesti. Se mahdollistaa myös suoritettujen kyselyiden tulosten tallentamisen välimuistiin.  
* *Sovelluslogiikka* on olennainen osa kehitettyjä sovelluksia, jotka toteutetaan joko ohjaimia käyttämällä tai osana reitin ilmoituksia. Sovelluslogiikan määrittelemiseen käytetty syntaksi on samanlainen kuin Sinatra- kehyksessä. 
* *Käänteinen reititys* määrittelee linkkien ja reittien välisen suhteen, jolloin reittien myöhemmät muutokset voidaan levittää automaattisesti merkityksellisiksi linkkeiksi. Kun linkit luodaan käyttämällä olemassa olevien reittien nimiä, Laravel luo automaattisesti asianmukaiset yhtenäiset resurssitunnukset (URI). 
* *[[REST|RESTful]] ohjaimet* tarjoavat valinnaisen tavan erottaa HTTP GET- ja POST- pyyntöjen logiikka. 
* *Luokkien automaattinen lataus* tarjoaa PHP-luokkien automaattisen lataamisen ilman sisällyttämispolkujen manuaalista ylläpitoa. Automaattinen lataus estää tarpeettomien komponenttien sisällyttämisen, joten vain tosiasiallisesti käytetyt komponentit ladataan. 
* *[[MVC-arkkitehtuuri|Näkymän]] kasaajat* toimivat muokattavina loogisina koodiyksiköinä, jotka voidaan suorittaa, kun näkymä ladataan. 
* *Blade* mallinnusmoottori yhdistää yhden tai useamman pohjamallin tietomallin kanssa tuottaakseen näkymiä, tehden sen kääntämällä pohjamallit PHP välimuistiin suorituskyvyn parantamiseksi. Blade tarjoaa myös joukon omia ohjausrakenteita, kuten ehdolliset lauseet ja silmukat, jotka on sisäisesti kartoitettu niiden PHP-vastineisiin. Lisäksi Laravel-palveluita voidaan kutsua Blade-malleista, ja itse mallintamoottoria voidaan laajentaa mukautetuilla direktiiveillä.   
* *IoC-säilöt* mahdollistavat uusien kohteiden generoinnin seuraamalla inversion of control -ohjausprosessin periaatetta, jossa kehys kutsuu sovellus- tai tehtäväkohtaiseen koodin, valinnaisella aloituksella ja viittauksella uusille kohteille singletoneina. 
* *Migraatiot* tarjoavat versionhallintajärjestelmän tietokanta-asettelulle, mikä mahdollistaa muutosten liittämisen sovelluksen koodipohjaan ja vaaditut muutokset tietokannan asetteluun. Seurauksena on, että tämä ominaisuus yksinkertaistaa Laravel-pohjaisten sovellusten käyttöönottoa ja päivittämistä.  
* *[[Tietokannan siemennys|Tietokannan siemennys]]* tarjoaa tavan täyttää tietokantataulukoita valituilla oletustiedoilla, joita voidaan käyttää sovelluksen testaamiseen tai suorittaa osana sovelluksen alkuasetuksia.  
* *[[Yksikkötestaaminen|Yksikkötestaus]]* on oleellinen osa Laravelia, joka itsessään sisältää yksikkötestejä, jotka havaitsevat ja estävät regressioita kehyksessä. Yksikkötestit voidaan suorittaa mukana toimitetun artisan komentoriviohjelman kautta. 
* *Automaattinen sivutus* yksinkertaistaa *sivutuksen* toteuttamista korvaamalla tavalliset manuaaliset toteutustavat automaattisilla menetelmillä, jotka on integroitu Laraveliin. 
* *Lomakepyynnöt* on ominaisuus Laravel 5:ssä, joka toimii pohjana lomakkeen syötön validoinnille, joka sisäisesti käyttää tapahtumakuuntelijoita, johtaen automaattiseen lomakkeen validoinnin käynnistämiseen ja todellisen lomakkeen generoimiseen. 
* *Homestead* - Vagrant- virtuaalikone, joka tarjoaa Laravel-kehittäjille kaikki tarvittavat työkalut valmiiksi Laravelin kehittämiseen, mukaan lukien Ubuntu, Gulp, Bower ja muut kehittämistyökalut, jotka ovat hyödyllisiä täysimittaisten web-sovellusten kehittämisessä.  
* *Canvas* - Laravel-käyttöinen julkaisualusta, joka auttaa visualisoimaan kuukausitrendejä, näkemään mistä lukijat tulevat ja mihin vuorokaudenaikaan he mieluummin lukevat sisältöä. Ominaisuuksia, kuten: julkaisutilastot, häiriötön kirjoittaminen, Unsplash integraatio, ja mukautettu sosiaalinen data.  
* *Lazy Collection* - Tämä Laravel 6:n ominaisuus antaa ensisijaisesti mahdollisuuden käsitellä raskaita tietomääriä pitäen samalla muistin käytön alhaisena. Lisäksi, kun vaihdat all() cursor() metodiin, vain yksi malli siirtyy muistissa kerrallaan, kun cursor() käyttää LazyCollection-esiintymää. 

### Ensimmäisen osapuolen paketit
Käyttövalmiita paketteja, jotka Laravel toimittaa Composerin ja Packagistin kautta, ovat seuraavat: 

* *Cashier*, saatavilla Laravelin 4.2 versiossa, tarjoaa rajapinnan Stripe tilauslaskutuksen hallintaan. Ominaisuuksia, kuten kuponkien käsittely ja laskujen tuottaminen. 
* *Envoy*, saatavilla Laravel 4.2 versiossa, tarjoaa syntaksin etäpalvelimilla suoritettavan koodin määrittelemiseksi. Blade-tyylisyntaksin avulla voi määrittää käyttöönotto-, Artisan-komennot. 
* *Socialite* tarjoaa todennusmekanismin eri OAuth- palveluntarjoajien, kuten Facebook, Twitter, Google, GitHub ja Bitbucket, kanssa. 
* *Passport,* saatavilla Laravel 5.3 versiossa, tarjoaa OAuth2 palvelintoteutuksen Laravel-sovelluksille.  
* *Scout*, saatavilla Laravel 5.3 versiossa, tarjoaa ajuripohjaisen ratkaisun tekstihaun lisäämiseen Eloquent-malleihin. 
* *Dusk*, saatavilla Laravel 5.4 versiossa, tarjoaa selaimen automaation ja testausrajapinnan. 
* *Horizon,* saatavilla Laravel 5.5 versiossa, tarjoaa kojelaudan Laravel-pohjaisiin Redis- jonoihin. 
* *Telescope,* saatavilla Laravel 5.7 versiossa, tarjoaa näkyvyyttä sovelluksen pyyntöihin, poikkeuksiin, lokimerkintöihin, tietokantakyselyihin, jonossa oleviin töihin, sähköposteihin, ilmoituksiin, välimuistioperaatioihin, ajoitettuihin tehtäviin, muutujien dumppaukseen, ja muihin. 
* *Sanctum*, saatavilla Laravel 7.0 versiossa, tarjoaa todennusjärjestelmän SPA:ille (Singe Page Applications), mobiilisovelluksille ja yksinkertaisille, token perusteisille rajapinnoille. . Aluksi nimeltään Laravel Airlock, mutta tuote jouduttiin uudelleennimeämään 'Airlock' nimeä koskevasta tavaramerkkiriidasta. 

### Artisan CLI
Laravelin komentoriviliittymä (CLI), nimeltään *Artisan*, otettiin alun perin käyttöön Laravel 3:ssa rajoitetuilla ominaisuuksilla. Laravelin myöhempi siirtyminen Composer-pohjaiseen arkkitehtuuriin antoi Artisanille mahdollisuuden sisällyttää erilaisia komponentteja Symfony- kehyksestä, minkä seurauksena Artisan-lisäominaisuuksia oli saatavana Laravel 4:ssä. 

Artisanin ominaisuudet on jaoteltu erilaisiin alikomentoihin Artisan komentoriviohjelmassa, joka tarjoaa toimintoja, jotka auttavat hallitsemaan ja rakentamaan Laravel-pohjaisia sovelluksia. Artisanin yleisiä käyttötapoja ovat tietokantojen siirtojen hallinta ja siemennys, pakettien assettien julkaiseminen ja alkukoodin luominen uusille käsittelijöille ja migraatioille. Jälkimmäinen näistä vapauttaa kehittäjän luomasta oikeita koodirunkoja. Artisanin toimintoja ja ominaisuuksia voidaan myös laajentaa toteuttamalla uusia mukautettuja komentoja, joita voidaan esimerkiksi käyttää sovelluskohtaisten toistuvien tehtävien automatisointiin. 

## Kokoukset

*Laracon* on virallinen Laravel-konferenssi, jonka keskipisteenä on Laravel-kehys, joka kattaa sen kehittämisen, käytön ja niihin liittyvät yleiset ohjelmistokehitysaiheet . Laracon on tapahtunut aiemmin Yhdysvalloissa, Euroopassa ja verkossa. Konferenssi tapahtuu tyypillisesti Yhdysvalloissa ja Euroopassa joka vuosi. 2017 oli ensimmäinen vuosi, jolloin Laracon pidettiin vain verkkotapahtumana. 2018 oli ensimmäinen vuosi, jolloin Laracon pidettiin Australiassa. Konferenssissa on joka vuosi erilaisia sponsoreita ja järjestäjiä, mutta Laravel, Laravel News ja UserScape ovat yleensä ensisijaisia järjestäjiä.

## Lähteet

## Kirjallisuutta
* Laravel Design Patterns and Best Practices, Packt, , heinäkuu 2014, kirjoittanut Arda Kılıçdağı ja H. İbrahim Yilmaz 

## Aiheesta muualla
* Virallinen verkkosivu