- Laravelin konfigurointi Supabase Postgres -tietokannan käyttöön edellyttää ajurin, skeeman ja ympäristömuuttujien oikeaa säätämistä.
- Supabasen Laravelille tarkoitettu ajuri ratkaisee automaattisesti yleisiä UUID-sarakkeisiin liittyviä ongelmia kyselyissä ja liitoksissa.
- Flysystem-sovittimen avulla voit käsitellä Supabase Storagea kuin tavallista Laravel-levyä, mikä helpottaa tiedostojen latausten integrointia.
- Etuoikeutettujen palveluavainten ja hyvin konfiguroitujen säilöjen käyttö on avainasemassa kirjoitusvirheiden välttämiseksi ja vakaan työnkulun varmistamiseksi.
Jos työskentelet Laravelin kanssa ja olet omistautunut taustaohjelmointi ja sinusta tuntuu, että haluat hypätä tietokantaan moderni, hallittu PostgreSQL, kuten SupabaseOlet luultavasti huomannut, ettei .env-tiedostossa riitä, että muutat vain muutaman muuttujan. On olemassa yhteystietoja, skeemiä, todennusta ja tiedostojen tallennusta koskevia tietoja, jotka voivat laiminlyödessä johtaa melko arvoituksellisiin virheisiin.
Lisäksi, kun haluat mennä askeleen pidemmälle ja käyttää Supabase tiedostojen tallennustilana Kun se integroidaan Laravelin tallennusjärjestelmään, asiat monimutkaistuvat hieman: palveluavaimet, säiliöt, päätepisteet, mukautetut Flysystem-ajurit jne. Hyvä uutinen on, että kaikki – tietokanta, tallennustila ja UUID-käsittely – voidaan integroida täydellisesti melko siistillä tavalla.
Laravelin yhdistäminen Supabase-tietokantaan
Ensimmäinen askel on luoda toimiva Laravel-projekti ja linkittää se Supabasen tarjoamaan Postgres-tietokantaan. Tätä varten tarvitset ympäristön, jossa on PHP ja Composer päivitetty ja luo uusi projekti tai käytä olemassa olevaa. Konsolissa luo projekti yksinkertaisesti tyypillisellä Laravel-komennolla ja aloita sitten yhteyden muodostaminen.
Kun projektin runko on valmis, tavallisin vaihe on asentaa yksinkertainen todennusjärjestelmä. Laravel Breeze sopii tähän erittäin hyvin, koska se sisältää Terämallit ja peruskirjautumis- ja rekisteröitymisprosessiNäin voit nopeasti varmistaa, että tietokantayhteytesi on määritetty oikein ja että voit luoda käyttäjiä ongelmitta.
Saadaksesi yhteystiedot, kirjaudu sisään Supabase-paneeliin ja luo uusi tietokantaprojekti (voit tehdä tämän suoraan kohdasta tietokanta.uusi(joka ohjaa ohjattuun toimintoon). Jos sinulla ei vielä ole tiliä, näet ensin rekisteröitymisnäytön. Jos sinulla on jo tili, siirryt suoraan projektin asetuksiin ja osioon, jossa voit tarkistaa yhteysmerkkijonon.
Projektisivun yhteysosiosta löydät painikkeen, kuten "Yhdistä" tai vastaavaa. Kun napsautat sitä, Supabase näyttää useita yhteysmerkkijonojen muotoja (URI, yksittäiset parametrit jne.). Kopioi koko URI, mutta muista, että sinun on korvaa salasana sille, jota tosiasiallisesti käytät tietokannassa, koska usein näytetään oletusarvo tai paikkamerkki.
Näiden tietojen avulla sinun on mentävä Laravel-projektisi .env-tiedostoon ja päivitettävä DB_HOST-, DB_PORT-, DB_DATABASE-, DB_USERNAME- ja DB_PASSWORD-muuttujat tai määritettävä DATABASE_URL-muuttuja, jos haluat käyttää koko merkkijonomuotoa. Tavoitteena on, että kaikki osoittaa Supabase Postgres -klusteri eikä paikalliselle koneellesi.
Postgres-ajurin ja Supabase-skeeman määrittäminen Laravelissa
Laravelissa tietokannan konfiguroinnin avaintiedosto on config/tietokanta.phpVaikka voit käyttää suoraan kehyksen mukana tulevaa pgsql-ajuria, Supabasen kanssa työskennellessä on yleistä tehdä joitakin lisäsäätöjä, erityisesti skeemojen ja Postgres-kohtaisten asetusten osalta.
Tyypillinen Postgresin konfiguraatio Laravelissa saattaa näyttää tältä connections-taulukon sisällä avaimen alla 'pgsql':
'pgsql' => ,
Avain tässä on parametrissa hakupolkuSupabase käyttää oletusarvoisesti julkista skeemaa, joka on se, joka on näkyvissä sen API-rajapintojen kautta. Jos haluat pitää Laravel-sovelluksesi erillään tästä skeemasta ja välttää taulukko- tai käytäntöristiriitoja, on erittäin suositeltavaa muuttaa search_path esimerkiksi omaksi skeemaksesi. laravel, kuten edellisessä esimerkissä nähtiin.
Tällä tavoin projektisi luomat migraatiot ja taulukot luodaan kyseisessä vaihtoehtoisessa skeemassa eivätkä julkisesti. Tämä erottelu helpottaa hallintaa huomattavasti. suojaussäännöt, RLS ja käyttöoikeus Supabase-paneelista astumatta millekään väärälle ja pitäen tietokannan rakenteen järjestyksessä.
Kun olet säätänyt määritystiedostoa, voit käynnistää migraatiot tavallisilla Laravel-komennoilla. Tämä luo todennustaulukot ja muut määrittämäsi taulukot. Jos kaikki on määritetty oikein, komennot suoritetaan Supabase Postgres ilman että sinun tarvitsee tehdä mitään muuta.
Kun migraatiot ovat valmiit, käynnistä kehityspalvelin komennolla `artisan serve` ja yritä rekisteröidä ja kirjautua sisään käyttäjiä. Jos yhteys- tai migraatiovirheitä ei ilmene, Laravel toimii. kommunikoi oikein Supabasen kanssa ja sinä voit jatka liiketoimintalogiikkasi rakentamista yleensä.
Tietyn Supabase-ajurin käyttäminen Laravelissa
Vaikka tavallinen pgsql-ajuri toimii, on olemassa paketti, joka lisää Supabase-tietokanta-ajuri Laravelille, laajentaen PostgreSQL:n toimintaa erittäin hyödyllisillä parannuksilla, erityisesti UUID-sarakkeiden käsittelyn ja kyselyiden rakentamistavan osalta.
Tämä prahsys/laravel-supabase-niminen paketti asennetaan Composerin kautta ja se rekisteröi ylimääräisen ajurin nimeltä supabase, jota voit käyttää config/database.php-tiedostossasi. Sisäisesti se perustuu Laravelin Postgres-ajuriin, mutta sisältää asetukset ja hakukieliopit optimoitu tiettyyn Supabase-ympäristöön.
Asennuksen jälkeen voit ilmoittaa jotain seuraavanlaista sisällä liitännät-osio:
'connections' => ,
// otras conexiones...
],
Tämän ajurin käytön etuna on, että saat edelleen kaiken Postgres-moottorin tehon, mutta se käsittelee myös automaattisesti tiettyjä Supabasen herkkiä yksityiskohtia, erityisesti työskenneltäessä UUID:t ensisijaisina avaimina tai suhdekenttinäNäin vältetään manuaalisen casting-määrityksen kirjoittaminen jokaiselle monimutkaiselle kyselylle.
Paketti on myös suunniteltu sopimaan hyvin yhteen kehyksen ja PHP:n nykyaikaisten versioiden kanssa, ja se tarjoaa virallisen yhteensopivuuden seuraavien kanssa: Laravel 10.x, 11.x, 12.x ja PHP:llä versiosta 8.1 eteenpäin, sekä millä tahansa tavallisella PostgreSQL-tietokannalla, mukaan lukien tietenkin Supabase.
Jotta kaikki toimisi oikein, paketti sisältää joukon automatisoituja testejä. Voit suorittaa testit komennolla `composer test`, joka käyttää muistissa olevaa SQLite-tietokantaa nopeuden varmistamiseksi, tai valmistella Supabaseesi osoittavan `.env.testing`-tiedoston ja suorittaa `composer test-supabase`-komennon varmistaaksesi toiminnan todellisessa ympäristössä. Etä-Postgres.
UUID-hallinta Supabasessa ja Laravelissa
Supabasella on erikoisuus UUID-sarakkeiden kanssa: jos yrität verrata UUID:ta suoraan tekstimerkkijonoon ilman muuntamista, kysely saattaa epäonnistuu tai palauttaa odottamattomia tuloksia"Yksinkertaisessa" Postgres-järjestelmässä tämän voisi ratkaista globaaleilla casteilla tai mukautetuilla operaattoreilla, mutta Supabasessa nämä globaalit mukautukset eivät ole sallittuja.
Tämä tarkoittaa kuin suora tyylikysely:
SELECT *
FROM users
WHERE id = '123e4567-e89b-12d3-a456-426614174000';
Se ei toimi kuten odottaa saattaa. Jos kuitenkin suoritat eksplisiittisen castingin:
SELECT *
FROM users
WHERE CAST(id AS TEXT) = '123e4567-e89b-12d3-a456-426614174000';
Kysely onnistuu. Ongelmana on, että Laravelissa, kun kirjoitat kyselyitä Eloquentilla tai kyselyiden luontityökalulla, et halua mennä laittamalla CAST-merkin jokaiseen kohtaanTässä kohtaa edellä mainitun paketin supabase-ajuri tulee mukaan kuvaan, joka huolehtii näiden cast-tiedostojen lisäämisestä puolestasi.
Kun kyseinen ajuri on aktiivinen, voit suorittaa yleisiä kyselyitä kuten:
$user = User::find($uuidString);
$user = User::where('id', $uuidString)->first();
$users = User::whereIn('id', )->get();
Eikä vain suorissa neuvotteluissa, vaan myös liittyyJos esimerkiksi haluat hakea viestejä ja liittää ne käyttäjät-taulukkoon UUID-kentän avulla, voit tehdä jotain tällaista:
$posts = Post::join('users', 'posts.user_id', '=', 'users.id')
->where('users.email', '[email protected]')
->get();
Kuljettaja on vastuussa sääntöjen soveltamisesta tekstiviestien lähettämiseen tarvittavat castit asiaankuuluvissa UUID-sarakkeissa läpinäkyvästi. Tällä tavoin koodisi pysyy idiomaattisena Laravelille, eikä sinun tarvitse kirjoittaa raakaa SQL:ää tai käyttää outoja temppuja jokaisessa monimutkaisessa kyselyssä.
Jos haluat tarkempaa hallintaa siihen, mitkä sarakkeet katsotaan UUID-tunnuksiksi, paketti tarjoaa ominaisuuden CastsUuidColumns Eloquent-malleillesi. Käytä sitä vain malliluokassa ja määritä suojattu taulukko lisäsarakkeista:
use Prahsys\Supabase\Traits\CastsUuidColumns;
class Post extends Model
{
use CastsUuidColumns;
protected $uuidColumns = ;
}
Tämä ominaisuus tekee kolme tärkeää asiaa: se lisää oletusarvoisesti ensisijaisen avaimen UUID:ksi ja lisää kaikki ominaisuuteen määrittämäsi sarakkeet. $uuidSarakkeet ja välittää tiedot kyselyn luontityökalulle, jotta se tietää, mihin muunnoksia sovelletaan. Näin ollen kaikki UUID-tunnuksiin liittyvä datan käyttö muuttuu johdonmukainen ja automatisoitu.
Vieläkin edistyneempiin tapauksiinVoit rekisteröidä mukautetun UUID-sarakkeen tunnistimen. PostgresGrammar-paketin avulla voit määrittää takaisinkutsufunktion, joka sarakkeen nimen tai kyselykontekstin perusteella päättää, käsitelläänkö sitä UUID:na. Esimerkiksi:
use Prahsys\Supabase\Database\Query\Grammars\PostgresGrammar;
PostgresGrammar::detectUuidColumnsWith(function ($columnName, $query) {
return str_contains($columnName, 'uuid_')
|| in_array($columnName, );
});
Kun tämä funktio on määritetty, järjestelmä voi pitää UUID-tunnuksina kaikkia sarakkeita, joiden nimi noudattaa tiettyä kaavaa tai jotka ovat tietyssä listassa, mukautuen hyvin tarkat nimeämiskäytännöt projektistasi.
Integroi Supabase Storage tiedostojärjestelmänä Laraveliin
Tietokannan lisäksi monien projektien on tallennettava kuvia, dokumentteja tai muita käyttäjien lataamia tiedostoja. Supabase sisältää ämpäripohjaisen tallennuspalvelun, jota voit hyödyntää Laravel-levy Flysystemin avullaTätä tarkoitusta varten on olemassa erityinen sovitin, jonka avulla Supabase Storagea voidaan käsitellä vain yhtenä ajurina config/filesystems.php-tiedostossa.
Kyseinen paketti tarjoaa Flysystem-sovittimen, joka integroituu läpinäkyvästi kehyksen tallennusjärjestelmään. Se täyttää vähimmäisvaatimukset PHP >= 8.1, Laravel 10.x tai 11.x ja PHP:n fileinfo-tiedostopääte (ext-fileinfo), jota Laravel jo suosittelee tiedostojen käsittelyyn. Asennus tehdään Composerilla, ja kun se on lisätty, sinun tarvitsee vain määrittää supabase-levy asetuksissa.
Tiedostossa config/tiedostojärjestelmät.phpLevytaulukon sisällä lisäisit jotain seuraavanlaista:
'supabase' => ,
],
'signedUrlExpires' => 60 * 60 * 24,
],
Kauhaparametri on yleensä yksinkertaisesti tallennussäiliön nimi jonka loit Supabase-paneelissa (esimerkiksi myapp-file-uploads). Päätepiste on projektin tallennuspalvelun perus-URL-osoite, joka näkyy myös paneelin vastaavassa osiossa ja joka on yleensä johdettu projektin URL-osoitteesta ja alueesta.
`public`-vaihtoehto määrittää, käsitelläänkö säilön sisältöä oletusarvoisesti julkisena. Jos arvo on `true`, sovitin luo esteettömiä URL-osoitteita ilman erityistä allekirjoitusta; jos arvo on `false`, käyttöön tulee `defaultUrlGeneration`-vaihtoehto, joka voi pakottaa allekirjoitettujen URL-osoitteiden luomisen `signedUrlExpires`-asetuksen määrittämällä vanhenemisajalla. Tämän määrityksen avulla voit tasapainottaa kuormitusta. turvallisuutta ja mukavuutta riippuen käsittelemiesi tiedostojen tyypistä.
Yleinen levyn URL-osoite jätetään yleensä tyhjäksi, jotta sovitin päättelee sen automaattisesti päätepisteestä. Kosketa sitä vain, jos käytät välityspalvelin tai välittäjä CDN ja haluat luotujen reittien osoittavan kyseiseen verkkotunnukseen Supabase-alkuperäisen verkkotunnuksen sijaan.
Vianmääritys latausvirheille ja Supabase Storagen avaimen ymmärtäminen
Melko yleinen ongelma tiedostojen lataamisessa Laravelista Supabase Storageen on seuraavanlaisten viestien vastaanottaminen: "Tiedostoon ei voida kirjoittaa sijaintiin: lataukset/..."Tämä yleensä tarkoittaa, että vaikka ajuri on konfiguroitu, Supabase estää kirjoitustoiminnon riittämättömien käyttöoikeuksien tai väärin konfiguroidun avaimen vuoksi.
Config/filesystems.php-tiedoston supabase-levyllä kokoonpanossa mainitaan käyttö "etuoikeutettu avain" avainkentässä nimenomaisesti todeten, että vain luku -avain ei toimi. Tämä tarkoittaa, että sinun on käytettävä palveluavainta, jolla on kirjoitusoikeudet säilöyn, ei pelkästään asiakkaalle tarkoitettua julkista API-avainta tai S3-yhteensopivuuteen tarkoitettua avainta ilman muokkausoikeuksia.
Supabase-paneelissa, API- ja tallennuskokoonpano-osiossa, löydät sekä anonyymit avaimet että palvelurooli tai vastaavaNäillä on laajennetut oikeudet. Sinun tulee sijoittaa kyseinen palveluavain, ei julkinen avain, SUPABASE_SECRET_ACCESS_KEY-muuttujaan, jonka ajuri sitten lukee env('SUPABASE_SECRET_ACCESS_KEY') -metodin avulla.
Jos olet testannut tallennuskonfiguraation S3-avaimella tai projektin yleisillä API-avaimilla, on hyvin todennäköistä, että näillä tunnistetiedoilla ei ole oikeutta kirjoittaa tiettyyn säilöön, mikä johtaa kirjoitusvirheeseen. Avaimen arvon muuttaminen arvoon kelvollinen palveluavain kirjoitusoikeuksilla Ja varmistamalla, että ämpäri on olemassa ja se on kirjoitettu oikein, ongelma yleensä ratkeaa.
Avaimen lisäksi on tärkeää varmistaa, että SUPABASE_STORAGE_BUCKET-muuttujassa määritelty säilö vastaa täsmälleen Supabase-rajapinnassa luotua säilöä, ottaen huomioon isot ja pienet kirjaimet, ja että päätepiste vastaa kyseisen tallennusinstanssin oikeaa URL-osoitetta. Ylimääräinen merkki tai virheellinen verkkotunnus voi estää sovittimen toiminnan. paikanna tiedostojen todellinen kohde.
Työnkulku Laravel Breezen, Bladen ja Supabase Storagen kanssa
Kun tietokanta ja tallennustila on määritetty, seuraava luonnollinen vaihe on integroida kaikki palvelimeesi. Laravel Breeze -käyttöliittymä ja Blade-mallitTällä tavoin käyttäjät voivat rekisteröityä, todentaa itsensä ja ladata tiedostoja Supabaseen poistumatta Laravel-ekosysteemistä.
Ohjaimiesi sisällä käyttäisit Varastojulkisivu osoittaen supabase-levylle. Esimerkiksi lomakkeelta vastaanotetun tiedoston lataamiseksi tiedostosyötteellä voit tehdä jotain seuraavanlaista:
if ($request->hasFile('file')) {
$path = $request->file('file')
->store('uploads', 'supabase');
}
Tämä koodi käskee Laravelin käyttämään levyä supabase ja sijoita tiedosto virtuaaliseen latauskansioon määritetyssä säilössä. Jos avain ja päätepiste ovat oikein, tiedosto ladataan Supabase-tallennustilaan, ja voit hakea sen polun tai luoda julkisia tai allekirjoitettuja URL-osoitteita vakiotallennusmenetelmillä.
Tämän lähestymistavan etuna on, että sovelluksesi ylläpitää yhtä tallennusrajapintaa riippumatta siitä, käyttääkö se paikallista levyä, Amazon S3:a, Supabasea vai muuta tuettua palvelua. Palveluntarjoajien vaihtaminen vähenee säädä config/filesystems.php-tiedostoa ja ympäristömuuttujat, koskematta liiketoimintalogiikkaan.
Yhdistämällä tämän Bladen ja Breezen kanssa voit tarjota latauslomakkeita, tiedostoluetteloita ja latauslinkkejä, jotka on täysin integroitu sovelluksesi käyttökokemukseen. Lisäksi Supabase Storagen säiliö- ja käytäntöpohjainen lähestymistapa antaa sinulle mahdollisuuden hyödyntää sen... käyttöoikeuksien hallinta ja turvallisuussäännöt määrittää, mitä kukin käyttäjä voi nähdä tai ladata.
Tämä koko pakettien, ajureiden ja konfiguraatioiden ekosysteemi mahdollistaa Laravelin erittäin mukavan työskentelyn Supabasen kanssa, sekä relaatiodatan osalta Postgresin kanssa että... tiedostojen tallennus ja UUID-hallintaSäätämällä avaimia, skeemoja ja ajureita oikein saavutat erittäin vankan integraation, joka välttää monia tyypillisiä virheitä, joita esiintyy yritettäessä yhdistää molemmat alustat manuaalisesti ja ilman näitä tukikerroksia.
Laravelin yhdistäminen Supabaseen tietokannan ja tallennuksen osalta, erillisen Supabase-ajurin hyödyntäminen UUID-tunnusten saumattomaan hallintaan ja Flysystem-sovittimen käyttö tallennukseen mahdollistavat nykyaikaisten sovellusten rakentamisen, joissa Koko monimutkainen infrastruktuuri on kapseloitu Laravelin puhtaan API:n kulissien takana, migraatioista ja todennuksesta tiedostojen lataamiseen suojattuihin säilöihin.