国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Rumah rangka kerja php Laravel Laravel melaksanakan pengembalian maklumat halaman tersuai dengan Sumber!

Laravel melaksanakan pengembalian maklumat halaman tersuai dengan Sumber!

Feb 03, 2022 am 04:00 AM
laravel

Laravel melaksanakan pengembalian maklumat halaman tersuai dengan Sumber!


Baru-baru ini menyerahkan idea kepada rangka kerja Laravel - tambah pengesanan kaedah maklumat penomboran tersuai dalam PaginatedResourceResponse supaya ia boleh dikeluarkan apabila menggunakan Resource kelas Apabila melihat maklumat, adalah sangat mudah untuk menyesuaikan maklumat paging.

Mengapa anda memerlukannya

Pada dasarnya saya membangunkan API. Pada hari-hari awal, saya selalu kembali secara langsung, tetapi kaedah ini kadangkala menyebabkan beberapa masalah dan menyusahkan untuk diselenggara Selain itu, selalunya perlu untuk menambah medan tersuai dan menyediakan data yang berbeza untuk tujuan yang berbeza yang saya gunakan Resource tentukan data yang dikembalikan. [Disyorkan: tutorial video laravel]

Menggunakan Resource sangat mudah dan boleh menjelaskan logiknya. Tetapi ia mempunyai kelemahan, iaitu, terdapat terlalu banyak maklumat penomboran. Untuk projek API, dalam kebanyakan kes, banyak medan dalam maklumat paging output lalai tidak diperlukan, dan kerana ia sering disambungkan kepada beberapa projek lama, format data lama perlu digunakan atau dibuat serasi Medan maklumat paging adalah agak berbeza, tidak ada cara untuk menggunakan maklumat paging yang dikembalikan secara lalai.

Saya tidak tahu bagaimana semua orang mengendalikan maklumat paging dalam situasi yang sama, tetapi sebelum itu, untuk mencapai matlamat, saya biasanya mempunyai dua kaedah Satu ialah menyesuaikan Response, di mana Maklumat data adalah ditakrifkan semula, dan yang kedua adalah untuk menyesuaikan semua Resource kelas yang berkaitan.

Saya tidak tahu banyak tentang lapisan bawah Laravel, dan saya tidak mahir dalam pembangunan rangka kerja abstrak, tetapi selepas melalui ini, saya mendapati bahawa perkara boleh menjadi lebih mudah Seperti yang saya jelaskan dalam PR, jika anda boleh Apabila membina maklumat paging dalam src/Illuminate/Http/Resources/Json/PaginatedResourceResponse.php, anda boleh menggunakan maklumat paging komponen yang sepadan dengan kelas Resource Kemudian anda tidak perlu menghabiskan banyak masa untuk menyesuaikan banyak kelas. Jadi saya menyerahkan idea ini kepada rangka kerja Laravel. Komit ini tidak diterima secara langsung pada mulanya, tetapi telah digabungkan selepas pelarasan Taylor dan dikeluarkan dalam v8.73.2.

Ini adalah kali pertama saya menyumbang kod kepada Laravel, dan ini juga kali pertama saya menyerahkan permintaan gabungan kepada pangkalan kod yang begitu besar Walaupun ia tidak diterima pakai secara langsung, hasilnya menarik cukuplah.

Contoh Penggunaan

Nah, izinkan saya memberikan contoh mudah tentang cara menggunakannya.

Output lalai

{??
????"data":?[],
????"links":?{
????????"first":?"http://cooman.cootab-v4.test/api/favicons?page=1",
????????"last":?"http://cooman.cootab-v4.test/api/favicons?page=1",
????????"prev":?null,
????????"next":?null
????},
????"meta":?{
????????"current_page":?1,
????????"from":?1,
????????"last_page":?1,
????????"links":?[
????????????{
????????????????"url":?null,
????????????????"label":?"??上一頁",
????????????????"active":?false
????????????},
????????????{
????????????????"url":?"http://cooman.cootab-v4.test/api/favicons?page=1",
????????????????"label":?"1",
????????????????"active":?true
????????????},
????????????{
????????????????"url":?null,
????????????????"label":?"下一頁??",
????????????????"active":?false
????????????}
????????],
????????"path":?"http://cooman.cootab-v4.test/api/favicons",
????????"per_page":?15,
????????"to":?5,
????????"total":?5
????}}

Ini ialah output maklumat paging oleh Laravel secara lalai. Sudah tentu, ini sudah cukup untuk menghadapi banyak senario . Tetapi kadang-kadang kita mendapat masalah kerananya. Kami memerlukan sedikit fleksibiliti.

Apabila menggunakan kelas ResourceCollection

Mari kita lihat logik asas dahulu!

Apabila ResourceCollection dikembalikan daripada pengawal, kaedah toResponsenya akhirnya akan dipanggil sebagai tindak balas. Kemudian anda boleh terus mencari kaedah ini dan lihat:

???/**
?????*?Create?an?HTTP?response?that?represents?the?object.
?????*
?????*?@param??\Illuminate\Http\Request??$request
?????*?@return?\Illuminate\Http\JsonResponse
?????*/
????public?function?toResponse($request)
????{
????????if?($this->resource?instanceof?AbstractPaginator?||?$this->resource?instanceof?AbstractCursorPaginator)?{
????????????return?$this->preparePaginatedResponse($request);
????????}

????????return?parent::toResponse($request);
????}

Lihat, jika sumber semasa ialah objek paging, ia akan mengalihkan tugas untuk memproses respons paging. Pandangan seterusnya:

????/**
?????*?Create?a?paginate-aware?HTTP?response.
?????*
?????*?@param??\Illuminate\Http\Request??$request
?????*?@return?\Illuminate\Http\JsonResponse
?????*/
????protected?function?preparePaginatedResponse($request)
????{
????????if?($this->preserveAllQueryParameters)?{
????????????$this->resource->appends($request->query());
????????}?elseif?(!?is_null($this->queryParameters))?{
????????????$this->resource->appends($this->queryParameters);
????????}

????????return?(new?PaginatedResourceResponse($this))->toResponse($request);
????}

Oh, ia telah dipindahkan ke PaginatedResourceResponse sekali lagi. Ini adalah kelas yang akhirnya perlu kami ubah suai Memandangkan kandungan toResponse terlalu panjang, saya tidak akan menyiarkannya Di sini, ia adalah Di sini kita mula membina data respons Sudah tentu, maklumat paging juga diproses di sini, tetapi ia mempunyai kaedah bebas. Kaedahnya ialah paginationInformation, iaitu logik sebelum menyerahkan PR:

/**
?????*?Add?the?pagination?information?to?the?response.
?????*
?????*?@param??\Illuminate\Http\Request??$request
?????*?@return?array
?????*/
????protected?function?paginationInformation($request)
????{
????????$paginated?=?$this->resource->resource->toArray();

????????return?[
????????????'links'?=>?$this->paginationLinks($paginated),
????????????'meta'?=>?$this->meta($paginated),
????????];
????}

Jika anda berhati-hati, anda sepatutnya dapat berfikir bahawa $this->resource di sini sebenarnya adalah contoh di atas ResourceCollection. Maka resource ialah data senarai kami, yang merupakan contoh maklumat halaman. Oleh itu, mengapa kami tidak boleh memproses maklumat halaman dalam ResourceCollection? Sudah tentu, tetapi kami perlu menambah sesuatu, dan itulah idea yang saya serahkan.

Selepas menggabungkan PR, logiknya adalah seperti berikut:

/**
?????*?Add?the?pagination?information?to?the?response.
?????*
?????*?@param??\Illuminate\Http\Request??$request
?????*?@return?array
?????*/
????protected?function?paginationInformation($request)
????{
????????$paginated?=?$this->resource->resource->toArray();

????????$default?=?[
????????????'links'?=>?$this->paginationLinks($paginated),
????????????'meta'?=>?$this->meta($paginated),
????????];

????????if?(method_exists($this->resource,?'paginationInformation'))?{
????????????return?$this->resource->paginationInformation($request,?$paginated,?$default);
????????}

????????return?$default;
????}

Kaedah pemprosesan yang sangat mudah Jika terdapat kaedah pembinaan maklumat paging tersuai dalam kelas sumber yang sepadan, gunakannya Saya sendiri, buat masa ini, ini sememangnya idea yang baik.

Pada ketika ini, cara untuk menyesuaikan maklumat halaman harus jelas. Iaitu untuk menambah kaedah ResourceCollection pada kelas paginationInformation anda yang sepadan, contohnya:

public?function?paginationInformation($request,?$paginated,?$default):?array
????{
????????return?[
????????????'page'?=>?$paginated['current_page'],
????????????'per_page'?=>?$paginated['per_page'],
????????????'total'?=>?$paginated['total'],
????????????'total_page'?=>?$paginated['last_page'],
????????];
????}

這是自定義后的數(shù)據(jù)輸出情況:

{
????"data":?[],
????"page":?1,
????"per_page":?15,
????"total":?5,
????"total_page":?1}

結(jié)果如我所愿。

使用 Resource 類時

我通常只喜歡定義一個 Resource 類來應對單個對象和列表的情況,這里主要關(guān)注如何處理列表數(shù)據(jù)的分頁自定義。

在控制器中,我一般都是這樣使用:

public?function?Index(){
????//?....
????return??SomeResource::collection($paginatedData);}

再來看看 collection 方法里做了什么:

???/**
?????*?Create?a?new?anonymous?resource?collection.
?????*
?????*?@param??mixed??$resource
?????*?@return?\Illuminate\Http\Resources\Json\AnonymousResourceCollection
?????*/
????public?static?function?collection($resource)
????{
????????return?tap(new?AnonymousResourceCollection($resource,?static::class),?function?($collection)?{
????????????if?(property_exists(static::class,?'preserveKeys'))?{
????????????????$collection->preserveKeys?=?(new?static([]))->preserveKeys?===?true;
????????????}
????????});
????}

原來它把數(shù)據(jù)轉(zhuǎn)給了 ResourceCollection,那么只需要將這個 ?AnonymousResourceCollection 做個自定義不就可以了。

總結(jié)

這是一個很小優(yōu)化,但是很有用。

在此之前,如果想要隨著 Resource 返回自定義分頁信息,會比較麻煩,需要自定義很多東西,這樣的方式,對老用戶而言小菜一碟,但是對新手就可能是件棘手的問題。那么自此之后,無論是老用戶還是新手這件事將變得易如反掌。只需要在對應的 ResourceCollection 類中添加 paginationInformation 方法,類似下面這樣:

public?function?paginationInformation($request,?$paginated,?$default):?array
????{
????????return?[
????????????'page'?=>?$paginated['current_page'],
????????????'per_page'?=>?$paginated['per_page'],
????????????'total'?=>?$paginated['total'],
????????????'total_page'?=>?$paginated['last_page'],
????????];
????}

不過,如果你使用的是 Resource::collection($pageData) 方式,那么還需要額外自定義一個 ResourceCollection 類,并重寫對應 Resource 類的 collection 方法。

我通常會定義一個對應的基類,然后其它的都繼承它。也可以做個 trait,然后共用。

最后

其實,這個想法我很早就想提交的,但是我一直比較猶豫,這到底是不是一個很大眾的需求。不過我最后想明白了,這樣做既然能為我節(jié)省大量重復且危險的工作,有那么多的開發(fā)者,總會有人需要的,所以我提交了,同時也是驗證下我的想法到底是否可行,我的做法是否最優(yōu),結(jié)果當然是我學到了很多,比如寫稍微復雜的測試用例。

另外,我想知道大家有沒其它方法,或你們是怎么對待不同情況的分頁信息的。

最后的最后,你如果也有好的想法,那么盡快提交吧!? ? ? ? ??? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Atas ialah kandungan terperinci Laravel melaksanakan pengembalian maklumat halaman tersuai dengan Sumber!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276
Cara Menetapkan Pembolehubah Alam Sekitar dalam Persekitaran PHP Penerangan Menambah Pembolehubah Alam Sekitar PHP Cara Menetapkan Pembolehubah Alam Sekitar dalam Persekitaran PHP Penerangan Menambah Pembolehubah Alam Sekitar PHP Jul 25, 2025 pm 08:33 PM

Terdapat tiga cara utama untuk menetapkan pembolehubah persekitaran dalam PHP: 1. Konfigurasi global melalui php.ini; 2. Melalui pelayan web (seperti setenv Apache atau fastcgi_param of nginx); 3. Gunakan fungsi Putenv () dalam skrip PHP. Antaranya, php.ini sesuai untuk konfigurasi global dan jarang mengubah konfigurasi, konfigurasi pelayan web sesuai untuk senario yang perlu diasingkan, dan putenv () sesuai untuk pembolehubah sementara. Dasar kegigihan termasuk fail konfigurasi (seperti php.ini atau konfigurasi pelayan web), fail .Env dimuatkan dengan perpustakaan dotenv, dan suntikan dinamik pembolehubah dalam proses CI/CD. Maklumat sensitif pengurusan keselamatan harus dielakkan dengan keras, dan disyorkan untuk digunakan.

Apakah caching konfigurasi di Laravel? Apakah caching konfigurasi di Laravel? Jul 27, 2025 am 03:54 AM

Cache konfigurasi Laravel meningkatkan prestasi dengan menggabungkan semua fail konfigurasi ke dalam fail cache tunggal. Mengaktifkan cache konfigurasi dalam persekitaran pengeluaran dapat mengurangkan operasi I/O dan penguraian fail pada setiap permintaan, dengan itu mempercepat pemuatan konfigurasi; 1. Ia harus diaktifkan apabila permohonan itu digunakan, konfigurasi stabil dan tiada perubahan yang kerap diperlukan; 2. Selepas membolehkan, ubah suai konfigurasi, anda perlu menjalankan semula phpartisanconfig: cache untuk berkuat kuasa; 3. Elakkan menggunakan logik dinamik atau penutupan yang bergantung kepada keadaan runtime dalam fail konfigurasi; 4. Apabila masalah penyelesaian masalah, anda harus terlebih dahulu membersihkan cache, periksa pembolehubah .Env dan cache semula.

Bagaimana Membuat Bekas PHP Sokongan Pembinaan Automatik? Kaedah konfigurasi CI bersepadu persekitaran PHP Bagaimana Membuat Bekas PHP Sokongan Pembinaan Automatik? Kaedah konfigurasi CI bersepadu persekitaran PHP Jul 25, 2025 pm 08:54 PM

Untuk membolehkan bekas PHP menyokong pembinaan automatik, terasnya terletak pada mengkonfigurasi proses integrasi berterusan (CI). 1. Gunakan Dockerfile untuk menentukan persekitaran PHP, termasuk imej asas, pemasangan lanjutan, pengurusan ketergantungan dan tetapan kebenaran; 2. Konfigurasi alat CI/CD seperti Gitlabci, dan tentukan peringkat binaan, ujian dan penempatan melalui fail .gitlab-ci.yml untuk mencapai pembinaan, pengujian dan penggunaan automatik; 3. Mengintegrasikan kerangka ujian seperti PHPUnit untuk memastikan ujian secara automatik dijalankan selepas perubahan kod; 4. Gunakan strategi penempatan automatik seperti Kubernet untuk menentukan konfigurasi penempatan melalui fail penyebaran.yaml; 5. Mengoptimumkan Dockerfile dan mengamalkan pembinaan pelbagai peringkat

PHP Pembangunan Pengguna Kebenaran Pengguna Pengewangan Kawalan Kebenaran dan Pengurusan Peranan PHP PHP Pembangunan Pengguna Kebenaran Pengguna Pengewangan Kawalan Kebenaran dan Pengurusan Peranan PHP Jul 25, 2025 pm 06:51 PM

Pengurusan kebenaran pengguna adalah mekanisme teras untuk merealisasikan pengewangan produk dalam pembangunan PHP. Ia memisahkan pengguna, peranan dan keizinan melalui model kawalan akses berasaskan peranan (RBAC) untuk mencapai peruntukan dan pengurusan kebenaran yang fleksibel. Langkah -langkah khusus termasuk: 1. 2. Melaksanakan kaedah pemeriksaan kebenaran dalam kod seperti $ user-> can ('edit_post'); 3. Gunakan cache untuk meningkatkan prestasi; 4. Gunakan kawalan kebenaran untuk merealisasikan fungsi produk dan perkhidmatan yang dibezakan, dengan itu menyokong sistem keahlian dan strategi harga; 5. Elakkan kebenaran butiran terlalu kasar atau terlalu halus, dan gunakan "pelaburan"

Terangkan lingkungan laravel fasih. Terangkan lingkungan laravel fasih. Jul 26, 2025 am 07:22 AM

Eloquentscopes Laravel adalah alat yang merangkumi logik pertanyaan biasa, dibahagikan kepada skop tempatan dan skop global. 1. Skop tempatan ditakrifkan dengan kaedah yang bermula dengan skop dan perlu dipanggil secara eksplisit, seperti pos :: diterbitkan (); 2. Skop global secara automatik digunakan untuk semua pertanyaan, sering digunakan untuk pemadaman lembut atau sistem multi-penyewa, dan antara muka skop perlu dilaksanakan dan didaftarkan dalam model; 3. Skop boleh dilengkapi dengan parameter, seperti penapisan artikel mengikut tahun atau bulan, dan parameter yang sepadan diluluskan ketika memanggil; 4. Perhatikan spesifikasi penamaan, panggilan rantai, pelepasan sementara dan pengembangan gabungan apabila menggunakan untuk meningkatkan kejelasan kod dan kebolehgunaan semula.

Bagaimana untuk membuat fail penolong di Laravel? Bagaimana untuk membuat fail penolong di Laravel? Jul 26, 2025 am 08:58 AM

Createahelpers.phpfileinapp/welterswithcustomfunctionsLikeFormatprice, isactiveroute, andisadmin.2.addthefiletothe "files" Sectionofcomposer.jsonunderautoload.3.RuncomposerdumpoMakions

Cara Membina Sistem Pengurusan Log dengan Pengumpulan Log dan Analisis PHP PHP Cara Membina Sistem Pengurusan Log dengan Pengumpulan Log dan Analisis PHP PHP Jul 25, 2025 pm 08:48 PM

Pilih kaedah pembalakan: Pada peringkat awal, anda boleh menggunakan ralat terbina dalam () untuk php. Selepas projek diperluaskan, pastikan anda beralih ke perpustakaan yang matang seperti monolog, menyokong pelbagai pengendali dan tahap log, dan pastikan log mengandungi cap waktu, tahap, nombor talian fail dan butiran ralat; 2. Struktur Penyimpanan Reka Bentuk: Sebilangan kecil balak boleh disimpan dalam fail, dan jika terdapat sebilangan besar log, pilih pangkalan data jika terdapat sejumlah besar analisis. Gunakan MySQL/PostgreSQL ke data berstruktur. Elasticsearch Kibana disyorkan untuk separa berstruktur/tidak berstruktur. Pada masa yang sama, ia dirumuskan untuk sandaran dan strategi pembersihan tetap; 3. Antara muka Pembangunan dan Analisis: Ia sepatutnya mempunyai fungsi carian, penapisan, pengagregatan, dan visualisasi. Ia boleh diintegrasikan secara langsung ke Kibana, atau menggunakan Perpustakaan Carta Kerangka PHP untuk membangunkan pembangunan diri, yang memberi tumpuan kepada kesederhanaan dan kemudahan antara muka.

Bagaimana untuk melaksanakan sistem rujukan di Laravel? Bagaimana untuk melaksanakan sistem rujukan di Laravel? Aug 02, 2025 am 06:55 AM

Buat jadual rujukan untuk merekodkan hubungan cadangan, termasuk rujukan, rujukan, kod cadangan dan masa penggunaan; 2. Tentukan hubungan dan hubungan hasmany dalam model pengguna untuk menguruskan data cadangan; 3. Menjana kod cadangan yang unik semasa mendaftar (boleh dilaksanakan melalui peristiwa model); 4. Menangkap kod cadangan dengan menanyakan parameter semasa pendaftaran, mewujudkan hubungan cadangan selepas pengesahan dan mencegah penyimpanan diri; 5. mencetuskan mekanisme ganjaran apabila pengguna yang disyorkan melengkapkan tingkah laku yang ditentukan (urutan langganan); 6. Menjana pautan cadangan yang boleh dikongsi, dan gunakan URL tandatangan Laravel untuk meningkatkan keselamatan; 7. Statistik cadangan paparan di papan pemuka, seperti jumlah cadangan dan nombor yang ditukar; Adalah perlu untuk memastikan kekangan pangkalan data, sesi atau kuki berterusan,

See all articles