Takeaways Key
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.
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:
{ "user": { "firstName": "firstName", "lastName": "lastName" } }
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
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }
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');
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.
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.
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:
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.
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.
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.
Atas ialah kandungan terperinci Membina sumber rehat dengan laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!