Organisasi rute di Laravel

Halo Habr. Baru-baru ini, saya setuju untuk meninjau situs yang dipesan secara freelance. Saya berharap untuk melihat pengontrol yang melakukan segalanya dan menempati lebih dari 200 baris (dan manifestasi kode buruk lainnya), tetapi semuanya cukup baik. Validasi tidak terletak pada controller, yang cukup umum. Terkadang, tentu saja, ada beberapa inkonsistensi PSR-2, tetapi semuanya tampak baik-baik saja sampai saya melihat ke dalam file dengan rute. Itu menduduki beberapa layar dan memiliki komentar tentang grup rute. Saya menghubungi pengembang dan dia mengatakan bahwa semuanya telah "tumbuh" sedikit dan setuju untuk memperbaikinya. Dalam versi berikutnya, saya melihat bahwa ia menciptakan beberapa kelas dengan metode statis, di mana ia mentransfer kode dan memanggil mereka, seperti yang biasanya dilakukan, dengan otorisasi. Kemudian saya ingat bahwa saya sudah menemukan ini dan bertemu dengan argumen seperti itu: "Dokumentasi tidak mengatakan apa-apa tentang mengambil rute ke file yang berbeda." Hanya beberapa menit kemudian saya menemukan sebuah artikel dan mengirimkannya ke pengembang. Setelah setengah jam, saya menerima rute dalam bentuk normal dan memutuskan bahwa artikel ini akan bermanfaat bagi banyak pemula. Jadi terjemahan gratis ini lahir.

Jika Anda belum pernah mengedit file RouteServiceProvider, selamat datang di cat.

Jika Anda bekerja dengan proyek kecil dan Anda hanya memiliki beberapa rute, maka tidak akan ada masalah. Tetapi ketika jumlah rute terlalu besar, bekerja dalam satu file menjadi sulit, terutama ketika Anda memiliki halaman untuk pengguna yang berbeda, administrator, dll.

Awalnya, laravel membuat 4 file:

  • api.php
  • console.php
  • channels.php
  • web.php

Misalkan Anda berencana membuat proyek dengan sepuluh halaman untuk setiap jenis pengguna:

  • Administrator [pengaturan situs, statistik, dll. ]
  • Pengguna [pendaftaran, masuk, manajemen profil, dll. ]
  • Tamu [blog, kontak, dll. ]

Buat dua direktori di dalam rute :

  • web - di sini adalah semua rute yang terkait dengan antarmuka web.
  • api - ini semua rute terkait API


Kami memindahkan api.php dari rute ke direktori rute / api dan web.php di route / web , dan meninggalkan console.php dan channels.php yang tersisa di rute.

Buat file admin.php di dalam rute / web . File ini akan berisi semua rute web kami yang terkait dengan administrator, dan kemudian buat user.php di sana untuk rute yang terkait dengan pengguna.



app / Providers / RouteServiceProvider.php - file ini bertanggung jawab untuk mengunduh semua rute aplikasi kita. Metode map () memanggil metode mapApiRoutes () dan mapWebRoutes () untuk memuat file web.php dan api.php yang telah kita pindahkan, jadi mari kita perbaiki path ke file rute.

protected function mapWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->group(base_path('routes/web/web.php')); } 

 protected function mapApiRoutes() { Route::prefix('api') ->middleware('api') ->namespace($this->namespace) ->group(base_path('routes/api/api.php')); } 

Sekarang buat metode baru untuk rute / web / admin.php dan rute / web / user.php di dalam RouteServiceProvider.php

 protected function mapAdminWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->prefix('admin') ->group(base_path('routes/web/admin.php')); } 

 protected function mapUserWebRoutes() { Route::middleware('web') ->namespace($this->namespace) ->prefix('user') ->group(base_path('routes/web/user.php')); } 

Harap dicatat bahwa dalam kode ini dimungkinkan untuk menambahkan namespace, middleware, awalan, dll. Untuk path.

Selanjutnya, panggil saja mereka dari peta ():

 public function map() { $this->mapApiRoutes(); $this->mapWebRoutes(); $this->mapAdminWebRoutes(); $this->mapUserWebRoutes(); } 

Langkah terakhir:

Buka rute / web / user.php dan tambahkan rute uji:

 Route::get('/test', function () { return response(' ', 200); }); 

Pergi ke site.local / user / test, Anda akan melihat teks "Test Route".

Source: https://habr.com/ru/post/id474788/


All Articles