Rumah >pembangunan bahagian belakang >tutorial php >Membina sumber rehat dengan laravel

Membina sumber rehat dengan laravel

William Shakespeare
William Shakespeareasal
2025-02-20 11:50:10526semak imbas

Membina sumber rehat dengan laravel

Di bahagian ini, kita akan mula bekerja dengan antara muka rehat. Mewujudkan API REST di Laravel tidak begitu sukar. Apa yang perlu kita ingat ialah kita berurusan dengan EmberJs dan kita tidak mahu menulis penyesuai baru dari awal. Seperti biasa, anda boleh mencari kod sumber untuk bahagian ini di GitHub.

Takeaways Key

    Gunakan konvensyen Ember.js semasa membina API REST dengan Laravel untuk memastikan keserasian dan menyelaraskan proses pembangunan.
  • Buat pengawal sumber di Laravel menggunakan alat baris perintah artisan untuk menguruskan sumber yang tenang dengan cekap tanpa perlu menentukan operasi CRUD secara manual.
  • mengatur laluan dengan berkesan dengan mengumpulkannya di bawah ruang nama tertentu di Laravel, meningkatkan struktur API dan kebolehcapaian.
  • Melaksanakan pengendalian ralat dan pemformatan tindak balas dalam pengawal untuk menguruskan pengambilan data dan memastikan titik akhir API yang mantap.
  • Leverage Leverage Laravel's Eloquent dan API Sumber Classes untuk mengubah data model ke dalam tanggapan JSON, memudahkan integrasi mudah dengan rangka front-end seperti Ember.js.
  • di mana hendak bermula?

itu adalah soalan yang sukar. Ember mempunyai aliran kerja dan logiknya sendiri. Jika kita mula menulis rehat kita dengan logik itu dalam fikiran kita akan menjimatkan sedikit masa, kita akan mempunyai seni bina yang bagus dan sesuatu yang boleh diguna semula. Saya fikir Ember telah membuat pilihan yang baik dengan seni bina rehat mereka. Lihatlah bagaimana Ember mengharapkan data.

Mari kita anggap bahawa kita mahu mengambil pengguna. Ember mengharapkan sesuatu seperti ini:

Jika kita mahu mengambil senarai pengguna, Ember akan mengharapkan JSON seperti ini:
{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }

Yang pertama memerlukan "pengguna", tetapi yang kedua memerlukan "pengguna". Yang kedua adalah jamak. Ember meletakkan beberapa peraturan untuk itu juga. Sekiranya anda tidak menentukan plural sendiri dengan menggunakan:
{
      "users": 
      [
          {
            "firstName": "firstPersonsName",
            "lastName": "lastname"
          },
          {
            "firstName": "secondPersonName",
            "lastName": "lastName"
          }
      ]
    }

EmberJs akan membuat andaian dan meminta "formula". Kadang -kadang, rangka kerja itu sendiri menyediakan perkara -perkara seperti itu, tetapi di sisi lain perkara -perkara yang dapat dikawal jika anda melupakan butiran ini.
Ember.Inflector.inflector.irregular('formula', 'formulae');

Sebelum meneroka lebih mendalam dengan Ember, amaran: Ember sukar dan berkuasa. Luangkan masa untuk mengetahui bagaimana ia berfungsi.

Jika kita merumitkan perkara sedikit dan meletakkan beberapa hubungan antara objek, contohnya kita mengatakan bahawa pengguna mempunyai beberapa gambar. Bagaimana kita akan mengeluarkannya?

Ini adalah hubungan satu-ke-banyak. Jika kami meminta pengguna, gambarnya juga akan ditarik. Kami telah menyediakan beberapa hubungan di Laravel, anda boleh menggunakannya jika anda mahu dan menggunakan hubungan tersebut di Ember juga.
{
      "user": {
        "id": 1,
        "name": "firstName",
        "lastname": "lastname,
        "photos": [1, 2, 3]
      },
    
      "photos": 
      [
          {
            "id": 1,
            "title": "Lorem Ipsum"
          },
          {
            "id": 2,
            "title": "Lorem Ipsum"
          }
      ]
    }

Saya bermula dengan Ember untuk melihat bagaimana rangka kerja ini mahu data. Lebih mudah jika anda tahu bagaimana untuk membina struktur. Pengesahan dan mendapatkan data dari pangkalan data adalah mudah, tetapi membina antara muka rehat yang kukuh dan yang pintar, itu adalah bahagian yang sukar.

bersiap untuk selebihnya

Apabila anda mengembangkan sesuatu, mockup boleh sangat membantu. Walaupun anda seorang pengaturcara guru dan anda benci berurusan dengan Photoshop atau GIMP, terdapat alat yang baik untuk prototaip. Saya menggunakan balsamiq dan prototaip halaman depan saya adalah:

Membina sumber rehat dengan laravel

mari mula membinanya. Buka /app/views/index.php. Ini berfungsi sebagai aplikasi halaman tunggal kami. Kami mencipta fail ini di bahagian pertama siri ini.

{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }
izinkan saya menerangkan ini. Tag NAV bertanggungjawab untuk navigasi. Tag UL dengan kawasan tajuk kelas adalah teks yang digunakan sebagai logo yang menghubungkan ke tahap pertama aplikasi. Saya juga telah menambah drop-down dengan senarai kategori. Kepala ke Yayasan 5 Dokumen jika anda ingin mengetahui lebih lanjut. Kebanyakan masa ia hanya salin/tampal operasi, jadi jangan risau tentang bahagian ini.

Juga, saya menggunakan sistem grid Yayasan untuk kawasan kandungan. Ini akan dipenuhi dengan semua maklumat dan akan diubah semasa menavigasi. Semua kemas kini dalaman akan dikendalikan oleh Ember. Kami akan membina hanya 3 templat di sini. Satu untuk pengguna, satu untuk satu foto dan satu untuk halaman pendaratan.

Adakah anda perasan bahawa semua kod kami berada di dalam tag skrip? Ember menggunakan hendal sebagai bahasa templatnya. Jenis teks/x-handlebars adalah jenis skrip khas. Jika anda telah menggunakan Ember dan Hendal untuk seketika, anda mungkin menggunakan nama templat. Saya tidak menyatakannya dalam satu ini kerana templat ini akan digunakan sebagai bekas untuk semua permohonan. Jika anda tidak menentukan nama, Ember menggunakannya sebagai templat aplikasi.

Pengawal Sumber

Ketika saya membangunkan aplikasi yang sangat mudah ini, saya dapati bahawa pengawal sumber menjadi berguna ketika mengembangkan API REST. Itulah titik seni bina yang lain - semuanya adalah sumber. Semua sumber boleh mempunyai kata kerja HTTP yang digunakan: Dapatkan, pos, padam, letakkan (kemas kini). Tidak semua kata kerja diperlukan.

{
      "users": 
      [
          {
            "firstName": "firstPersonsName",
            "lastName": "lastname"
          },
          {
            "firstName": "secondPersonName",
            "lastName": "lastName"
          }
      ]
    }
Ini adalah bagaimana kita membuat pengawal sumber melalui Artisan. Pilihan -Eksepsi meninggalkan kedua -dua kaedah ini dari pengawal ini. Kami tidak memerlukan kaedah membuat dan mengedit. Kaedah CREATE berkaitan dengan antara muka grafik untuk mewujudkan sumber itu. Semasa kami membuat aplikasi satu halaman, tidak bijak untuk membuat pandangan di luar Ember.

Buat pengawal sumber lain untuk kategori. Seperti yang anda lihat, hanya menunjukkan dan kaedah indeks boleh didapati dalam pengawal ini. Saya fikir bahawa menunjukkan kategori individu dan mengambil semua kategori sudah cukup.

{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }

Pengawal lain ialah pengawal imej. Mengapa Pengawal Imej Jika Kita Sudah Mempunyai Satu? Kerana kita memerlukan titik akhir untuk melayani imej. Dropbox memegang imej kami, tetapi kami tidak dapat mengaksesnya dari luar. Jika anda ingin membuat folder awam, anda perlu membayar. Itulah sebab pertama. Alasan kedua ialah saya tidak mahu setiap imej menjadi awam. Ringkasnya, pengawal ini akan merebut imej dari Dropbox dan menyampaikannya kepada pelanggan.

{
      "users": 
      [
          {
            "firstName": "firstPersonsName",
            "lastName": "lastname"
          },
          {
            "firstName": "secondPersonName",
            "lastName": "lastName"
          }
      ]
    }

dan yang terakhir tetapi paling tidak adalah usercontroller:

Ember.Inflector.inflector.irregular('formula', 'formulae');

Laluan

Sekarang kita mempunyai pengawal, kita perlu menghubungkan pengawal tersebut dengan laluan yang berkaitan. Mari kita mengemas kini /app/routes.php. Pertama, kumpulan mereka di dalam ruang nama URL dengan menggunakan Route :: Group.

{
      "user": {
        "id": 1,
        "name": "firstName",
        "lastname": "lastname,
        "photos": [1, 2, 3]
      },
    
      "photos": 
      [
          {
            "id": 1,
            "title": "Lorem Ipsum"
          },
          {
            "id": 2,
            "title": "Lorem Ipsum"
          }
      ]
    }

di sini kami menetapkan awalan, ruang nama. Semua yang ada di dalam kumpulan ini boleh diakses seperti ini:

<script type="text/x-handlebars">
    
        <!-- The navigation top-bar -->
        <nav  data-topbar>

            <ul >
                <li >
                    <h1><a href="#">Photo Upload</a></h1>
                </li>
            </ul>

            <section >

                <!-- Left Nav Section -->
                <ul >
                    <li >
                        <a href="#">Categories</a>
                        <ul >
                            <li><a href="#">Category1</a></li>
                            <li><a href="#">Category2</a></li>
                            <li><a href="#">Category3</a></li>
                            <li><a href="#">Category4</a></li>
                        </ul>
                    </li>
                </ul>

            </section>

            <div ></div>
            
        </nav><!-- END Navigation -->
        
        <!-- Content -->
        <div style="margin-top: 50px;">
            <!-- The content will be here -->
        </div><!-- END Content -->

    </script>

Juga, kita boleh menentukan penapis di dalam kumpulan itu. Sebagai contoh, anda boleh menambah penapis Auth :: OnceBasic ('Nama Pengguna') atau buatnya dan tambahkannya dalam kumpulan ini. Anda juga boleh menggunakan pengesahan lain.

Tambah tiga pengawal di dalam kumpulan itu. Photocontroller, UserController dan CategoryController.

php artisan controller:make PhotoController --except=create,edit

Tambah ImageScontroller di luar kumpulan itu. Saya tidak fikir bahawa pengawal ini memerlukan ruang nama - imej adalah imej dan tidak ada gunanya memberi mereka ruang nama.

php artisan controller:make CategoryController --only=show,index

Akhirnya, fail /p/routes.php sepatutnya kelihatan seperti ini:

php artisan controller:make ImagesController --only=show

Perhatikan nama sumber adalah jamak, kerana keperluan Ember.

Mengisi pengawal tersebut

sekarang kita boleh mula membina sesuatu. Saya tidak akan menutup semua rehat di sini kerana sangat sukar untuk menerangkan semua perkara - untuk mengetahui lebih mendalam, lihat siri ini. Mari kita mulakan dengan pengawal foto.

Kaedah Indeks () harus mengembalikan foto terbaru dari pangkalan data. Di sini, kita boleh melakukan beberapa penomboran tetapi saya tidak mahu perkara menjadi terlalu kompleks. Sekiranya terdapat minat yang cukup dalam komen, kami akan mengemas kini aplikasi ini dalam artikel masa depan.

php artisan controller:make UserController --only=show,index

izinkan saya menerangkan ini. Saya memasukkan segala -galanya di dalam percubaan, menangkap dan akhirnya menyekat. Sekiranya ada masalah, kembalikan JSON yang berbeza dengan kod status.

<span>Route<span>::</span>group(array('prefix' => 'api/v1'), function()
</span>    <span>{
</span>        
    
    <span>});</span>

Ini merebut 9 foto dari pangkalan data. Kemudian, ambil setiap foto dan paparkannya dalam pelbagai format yang akan ditukar kepada format JSON di kemudian hari.

Jika semuanya berjalan lancar atau jika pengecualian tidak dibuang oleh fasih, ini memaparkan output yang betul. Jika anda ingin memaparkan kod status tertentu, tangkap setiap pengecualian yang boleh dilemparkan dengan fasih dan memaparkan kod status yang tepat.

mari kita isi kaedah () sekarang. Sekali lagi, kami ingin mengambil semua maklumat mengenai foto dengan ID yang diberikan.

example.com/api/v1

Apabila membina aplikasi anda sendiri, jangan lupa untuk menambah pengesahan kepada input pengguna.

Logik untuk usercontroller hampir sama. Kali ini, kami akan meminta model pengguna.

{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }

semuanya hampir sama, hanya model dan medan berubah. Output JSON. Kaedah pertunjukan akan kelihatan seperti ini:

{
      "users": 
      [
          {
            "firstName": "firstPersonsName",
            "lastName": "lastname"
          },
          {
            "firstName": "secondPersonName",
            "lastName": "lastName"
          }
      ]
    }

Fungsi ini mengambil pengguna dengan id yang diberikan.

Pengawal terakhir yang kita hadapi adalah ImagesController. Logik semudah meraih imej dari sistem fail dan melayani mereka. Ia mudah apabila anda menyimpan fail dan mengambil semula dengan sistem fail tempatan atau sistem fail pelayan. Malangnya, anda tidak boleh menyimpan fail ke Heroku, jadi anda akan menggunakan Dropbox dan menyampaikan fail tersebut dari titik akhir ini.

Import klien Dropbox dan penyesuai FlySystem. Jika persekitaran kami tempatan, maka kami akan menggunakan FlySystem dengan penyesuai tempatan; Jika persekitaran adalah pengeluaran, maka gunakan penyesuai Dropbox. Berikan kelas Flysystem ke dalam pemboleh ubah peribadi di dalam pengawal ini.

Ember.Inflector.inflector.irregular('formula', 'formulae');

Kaedah pertunjukan akan menyampaikan fail itu dan kaedah memusnahkan akan memadam fail tersebut dari sistem fail. Dengan menggunakan perpustakaan ini, kami meletakkan tahap abstraksi ke dalam aplikasi kami.

{
      "user": {
        "id": 1,
        "name": "firstName",
        "lastname": "lastname,
        "photos": [1, 2, 3]
      },
    
      "photos": 
      [
          {
            "id": 1,
            "title": "Lorem Ipsum"
          },
          {
            "id": 2,
            "title": "Lorem Ipsum"
          }
      ]
    }

fungsi hancur () sangat mudah. Hanya pilih fail itu dengan menggunakan kaedah padam dan lulus nama fail untuk dipadam. Sekiranya fail tidak dijumpai maka kembalikan 404.

<script type="text/x-handlebars">
    
        <!-- The navigation top-bar -->
        <nav  data-topbar>

            <ul >
                <li >
                    <h1><a href="#">Photo Upload</a></h1>
                </li>
            </ul>

            <section >

                <!-- Left Nav Section -->
                <ul >
                    <li >
                        <a href="#">Categories</a>
                        <ul >
                            <li><a href="#">Category1</a></li>
                            <li><a href="#">Category2</a></li>
                            <li><a href="#">Category3</a></li>
                            <li><a href="#">Category4</a></li>
                        </ul>
                    </li>
                </ul>

            </section>

            <div ></div>
            
        </nav><!-- END Navigation -->
        
        <!-- Content -->
        <div style="margin-top: 50px;">
            <!-- The content will be here -->
        </div><!-- END Content -->

    </script>

Akhirnya, ImageController harus kelihatan seperti ini:

php artisan controller:make PhotoController --except=create,edit

Format yang kami berkhidmat ialah HTML. Ok, itu agak pelik. Kami mahu melayani imej, bukan HTML. Walau bagaimanapun, itu bukan masalah kerana penyemak imbas mencari format fail dan mengiktiraf cara menggunakan fail itu.

Teruskan dan cuba buat KategoriController. Saya meninggalkannya sebagai latihan untuk anda.

Menguji API

Saya harus mengakui, saya suka dengan phpStorm, dan untuk menguji API REST saya menggunakan alat yang dipanggil REST Client. Ia adalah antara muka grafik yang memudahkan ujian. Anda juga boleh menggunakan curl dari terminal jika anda mahu. Mari buat beberapa ujian:

php artisan controller:make CategoryController --only=show,index

Dan inilah yang dikembalikan:

Membina sumber rehat dengan laravel

Dengan pelanggan REST PHPSTORM, saya mendapat hasil yang sama di JSON.

Membina sumber rehat dengan laravel Dan jika saya ingin melihat hasilnya dalam format yang lebih baik, saya hanya boleh menekan ikon JS di sebelah kiri alat dan pelanggan lain memberi saya perwakilan yang lebih baik.

Anda juga boleh menguji kata kerja lain seperti Padam dan Pos. Teruskan dan uji seberapa banyak yang anda boleh. Terdapat pelanggan lain yang boleh anda gunakan untuk ujian: Konsol Rest dan Postman adalah dua daripadanya. Yang pertama hanya tersedia di Chrome, dan yang kedua, Postman, boleh didapati di Chrome dan Firefox. Postman nampaknya lebih mudah dan lebih mesra pengguna. Teruskan dan cubalah mereka.

Kesimpulan

Laravel memudahkan kerja kami untuk membina API REST dengan pengawal sumber. Kami melihat bagaimana antara muka harus dibina dengan menggunakan konvensyen Ember. Ember telah memilih antara muka yang baik dan dengan melekat pada logik itu, anda boleh menggunakan semula kod anda pada platform lain dengan mudah.

Di bahagian ini, saya memberi tumpuan lebih kepada konsep dan tidak melakukan pengekodan terlalu banyak. Mengisi semua kaedah dan menambah pengesahan tidak perlu dilanjutkan dengan jawatan ini, apabila sudah cukup lama dan dalam siri yang panjang. Apabila berkembang, anda harus sentiasa mengesahkan input. Jangan lupa, dan ujian, ujian, ujian. Ujian mestilah sahabat anda.

Dalam ansuran akhir siri ini, kami akan meletakkannya bersama -sama ke dalam aplikasi langsung berfungsi sepenuhnya.

soalan yang sering ditanya mengenai membina sumber rehat dengan Laravel

Bagaimana saya membuat pengawal sumber di laravel?

Di Laravel, anda boleh membuat pengawal sumber menggunakan alat baris perintah artisan. Perintah itu adalah PHP Artisan Make: Controller Controllername -Resource. Gantikan "Nama Pengawal" dengan nama yang anda mahu berikan kepada pengawal anda. Perintah ini akan membuat pengawal dengan kaedah untuk semua operasi CRUD yang diperlukan. Ingat, nama pengawal harus berada dalam bentuk tunggal dan harus menjadi nama kelas php yang sah. Model ORM yang fasih dan koleksi model ke dalam format JSON. Ini amat berguna apabila membina API, kerana ia membolehkan anda mengawal bentuk dan format data yang tepat yang anda ingin hantar dalam respons API anda. Ia menyediakan cara yang konsisten dan terkawal untuk mengawal output data.

Bagaimana saya menggunakan sumber API Laravel? Ini boleh dilakukan dengan menggunakan Artisan Command Php Artisan Buat: sumber sumber sumber. Sebaik sahaja kelas sumber dibuat, anda boleh menentukan transformasi dalam kaedah ToArray sumber anda. Untuk mengembalikan sumber dari laluan, anda hanya mengembalikan contoh baru kelas sumber, lulus dalam data yang anda ingin transformasi. 🎜> Anda boleh menyesuaikan data yang dikembalikan oleh sumber Laravel dengan mengubah kaedah ToArray dalam kelas sumber anda. Kaedah ToArray adalah di mana anda memetakan atribut model fasih kepada atribut tindak balas API anda. Anda boleh menambah, membuang atau menukar atribut seperti yang diperlukan.

Apakah perbezaan antara sumber dan koleksi di Laravel? sumber. Koleksi sumber digunakan untuk mengubah array atau koleksi model ke dalam JSON. Artisan Command PHP Artisan Make: ResourcenNeNeNeNeSollection -Koleksi. Ini akan mewujudkan kelas pengumpulan sumber di mana anda boleh menentukan transformasi untuk koleksi. Di Laravel, anda hanya mengembalikan satu contoh baru kelas pengumpulan sumber, lulus dalam pengumpulan model yang anda mahu ubah.

Ya, anda boleh menambah data meta ke respons sumber di Laravel. Ini boleh dilakukan dengan menentukan dengan kaedah pada sumber. Dengan kaedah harus mengembalikan pelbagai data meta yang anda ingin sertakan dalam respons. Secara kondisikan menambah atribut kepada respons sumber. Kaedah apabila menerima dua argumen: keadaan yang menentukan jika atribut harus dimasukkan, dan nilai atribut jika keadaan itu benar. Ya, sumber Laravel berfungsi dengan sempurna dengan penomboran terbina dalam Laravel. Apabila anda menunaikan pertanyaan Laravel yang fasih, Laravel secara automatik akan mengembalikan respons JSON yang merangkumi hasil paginated bersama -sama dengan pautan penomboran. Jika anda ingin menyesuaikan respons paginated, anda boleh menggunakan koleksi sumber.

Atas ialah kandungan terperinci Membina sumber rehat dengan laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn