Langsung ke konten

Framework ​

Rezure menentukan framework yang dipakai setiap proyek dengan membaca file-filenya, dan framework menentukan cara Nginx melayaninya:

  • Framework PHP menentukan folder mana yang dilayani. Laravel, CodeIgniter 4, dan Symfony menaruh front controller-nya di public/index.php, jadi dilayani dari public/. Kalau dilayani dari folder proyek, setiap URL menjawab 404, padahal kodenya baik-baik saja.
  • Framework JavaScript atau Node (Vue, React, Svelte, Angular, Astro, Next.js, Nuxt, Node) dilayani oleh dev server-nya sendiri, yang bisa dijalankan Rezure untukmu. Lihat Dev Server.

Deteksinya otomatis, dan kamu selalu bisa menimpanya. Tidak ada yang dieksekusi untuk mengetahuinya; Rezure hanya membaca file.

Framework yang didukung ​

FrameworkDikenali dariDilayani dari
Laravelartisan, atau laravel/framework di composer.jsonpublic/
CodeIgniter 4spark, atau codeigniter4/frameworkpublic/
CodeIgniter 3system/core/CodeIgniter.php, atau codeigniter/frameworkfolder proyek
WordPresswp-config.php atau wp-load.phpfolder proyek
Bedrock (Roots)roots/wordpress dan folder web/app/web/
Drupaldrupal/core, drupal/core-recommended, atau core/lib/Drupal.phpweb/
Joomlafolder administrator/ dan includes/defines.phpfolder proyek
Symfonysymfony/framework-bundlepublic/
Yii 2yiisoft/yii2web/
CakePHPcakephp/cakephpwebroot/
Slimslim/slimpublic/
Laminas / Mezziolaminas/laminas-mvc atau mezzio/mezziopublic/
Next.js, Nuxt, Astronext, nuxt, astro di package.jsondev server
Vue, React, Svelte, Angularvue, react, svelte atau @sveltejs/kit, @angular/coredev server
PHP (public/)public/index.php dan tanpa index.php sendiripublic/
PHPcomposer.json atau index.phpfolder proyek
Nodepackage.json lainnyadev server
Staticindex.htmlfolder proyek

Sebuah package dihitung kalau ada di require atau require-dev (Composer) atau di dependencies atau devDependencies (npm). Proyek yang tidak cocok dengan apa pun menjadi Unknown dan dilayani dari foldernya sendiri.

Kalau folder sebuah framework tidak ada di proyek tertentu, misalnya aplikasi Symfony tanpa public/, proyeknya dilayani dari foldernya sendiri.

Bagaimana framework yang tepat menang ​

Proyek nyata sering cocok dengan lebih dari satu framework. Aplikasi CodeIgniter 4 yang punya package.json untuk meng-compile Sass cocok dengan CodeIgniter 4 dan Node, dan aplikasi Laravel dengan Inertia cocok dengan Laravel dan Vue. Rezure tidak mengambil yang pertama dicek. Semua kecocokan ditimbang, dan yang paling spesifik yang menang:

PrioritasJenisContoh
90Framework PHP dengan file penanda sendiriLaravel, CodeIgniter 3 dan 4, WordPress, Bedrock, Drupal, Joomla
80Framework PHP yang dikenali lewat ComposerSymfony, Yii 2, CakePHP, Slim, Laminas
55Meta-framework JavaScriptNext.js, Nuxt, Astro
50Framework JavaScriptVue, React, Svelte, Angular
30Aplikasi PHP apa pun dengan public/index.php dan tanpa index.phpPHP (public/)
20 / 15 / 10CadanganPHP, Node, Static

Jadi "PHP plus npm untuk aset" (Sass, Vite, Laravel Mix) terdeteksi sebagai framework PHP-nya, dan aplikasi Next.js tetap Next.js, bukan React.

Melihat sebagai apa proyek dilayani ​

Setiap proyek menampilkan framework-nya sebagai badge di halaman Proyek, baik di tampilan list maupun grid. Arahkan kursor untuk melihat folder yang dilayani, misalnya public/, dan klik untuk mengganti framework. Untuk proyek dev server, badge juga menampilkan port-nya, misalnya Astro · :4400.

Saat kamu menautkan folder dengan Add folder, dialog menampilkan framework dan folder yang akan dilayani sebelum apa pun disimpan, dengan Change di sebelah framework.

Tidak sengaja menautkan folder public/? ​

Rezure versi lama melayani CodeIgniter 4 dan Symfony dari folder proyek, dan cara akalinya biasanya dengan menautkan folder public/ proyek secara langsung. Kalau sekarang kamu memilih folder public/, web/, atau webroot/, dialog bertuliskan "This looks like the public folder of a CodeIgniter 4 project" dan menawarkan Add {project} instead.

Untuk membersihkan tautan lama seperti itu: hapus dari Rezure (foldernya tidak disentuh), lalu tambahkan folder root proyeknya. Domain polosnya (myapp.test, bukan myapp-2.test) kembali, dan Folder serta Terminal membuka root proyek, bukan public/.

Mengganti framework proyek ​

  1. Di halaman Projects, klik badge framework proyek.
  2. Pilih framework lain dari daftar. Search frameworks memfilternya.
  3. Perubahannya langsung berlaku: Rezure menulis ulang virtual host proyek dan me-reload Nginx.

Daftarnya juga punya dua entri khusus:

  • Auto kembali ke deteksi otomatis.
  • Custom folder… ("Serve a subfolder you name") melayani subfolder apa pun yang kamu ketik, misalnya public atau src/web. Ini juga cara melayani folder dist/ hasil build proyek JavaScript sebagai file biasa, bukan lewat dev server-nya.

Badge dengan titik berarti diatur olehmu. Tooltip-nya tetap menyebut hasil deteksi (misalnya "detected: Node"), jadi kamu selalu bisa melihat apa tebakan Rezure.

Mengganti framework berlaku untuk proyek di www maupun proyek tertaut. Pilihan disimpan di C:\rezure\etc\project-frameworks.json:

  • Proyek di www dikenali dari nama foldernya, jadi mengganti nama folder membuang pilihannya.
  • Menghapus proyek tertaut juga membuang pilihannya.

Menambahkan framework yang belum dikenal Rezure ​

Framework internal, atau yang belum dibawa Rezure, bisa ditambahkan tanpa menunggu rilis. Jelaskan di C:\rezure\etc\frameworks.json:

json
{
  "frameworks": [
    {
      "id": "acme-cms",
      "label": "Acme CMS",
      "priority": 85,
      "detect": { "any": [{ "composer": "acme/cms-core" }, { "file": "acme.php" }] },
      "docroot": "htdocs"
    }
  ]
}

Lalu buka dialog framework proyek mana pun dan klik Reload frameworks.json, atau restart Rezure. Framework milikmu tampil paling atas di pemilih, di bawah "Your frameworks".

  • id baru menambahkan framework. id bawaan (laravel, codeigniter4, dan seterusnya) menggantikan definisi itu sepenuhnya.
  • Entri yang tidak bisa dipakai dilewati sendiri dan sisa file tetap berlaku. Halaman Projects menampilkan "Some framework settings aren't being used" beserta alasannya. File yang bukan JSON valid diabaikan seluruhnya, dan itu juga dilaporkan.

Field ​

FieldWajibArti
idyaHuruf kecil, angka, dan tanda hubung, sampai 64 karakter. unknown dan custom dicadangkan.
labelyaYang ditampilkan halaman Projects, sampai 40 karakter.
priorityya0–100. Kecocokan tertinggi menang; kalau seri, yang tercantum lebih dulu. Pakai rentang di Bagaimana framework yang tepat menang.
detectyaKapan sebuah proyek dianggap framework ini. Lihat Aturan detect.
docroottidakSubfolder yang dilayani, relatif terhadap proyek. Kalau dikosongkan: folder proyek.
categorytidakJudul grup di pemilih, sampai 24 karakter.
servetidakphp (default) atau proxy untuk dev server. Lihat Dev Server.
devtidakHanya dengan "serve": "proxy": { "script": "dev", "port": "vite" }. Lihat cara port diteruskan.

Field yang tidak dikenal ditolak, bukan diabaikan, jadi salah ketik seperti docRoot dilaporkan, bukan diam-diam tidak berbuat apa-apa.

Aturan detect ​

Sebuah aturan adalah object dengan tepat satu key:

AturanCocok kalau
{ "file": "artisan" }file itu ada (path bertingkat bisa: system/core/CodeIgniter.php)
{ "dir": "web/app" }folder itu ada
{ "composer": "laravel/framework" }composer.json mencantumkan package itu di require atau require-dev
{ "npm": "next" }package.json mencantumkan package itu di dependencies atau devDependencies
{ "any": [ … ] }minimal satu aturan di dalamnya cocok
{ "all": [ … ] }semua aturan di dalamnya cocok
{ "not": { … } }aturan di dalamnya tidak cocok

Nama package dibandingkan tanpa membedakan huruf besar kecil, dan aturan bersarang paling dalam 8 tingkat. Path di docroot, file, dan dir harus relatif terhadap proyek: tanpa huruf drive, tanpa garis miring di depan, tanpa ... / dan \ sama-sama bisa.

Untuk membagikan definisi ke semua orang, buka pull request yang menambahkannya ke src-tauri/resources/frameworks.json beserta fixture tes kecil. docs/v1/frameworks.md di repositori menjelaskan caranya.

Cara Nginx melayani tiap jenis ​

ProfilYang dilakukan NginxDipakai oleh
phpMelayani file di folder apa adanya dan mengirim sisanya ke index.php lewat FastCGI. Dotfile seperti .env dan .git menjawab 404, kecuali .well-known.Setiap framework PHP, Static, dan Custom folder
proxyMeneruskan setiap request, termasuk websocket hot reload, ke dev server proyek di port-nya sendiri.Next.js, Nuxt, Astro, Vue, React, Svelte, Angular, Node

Memblokir dotfile penting untuk proyek yang dilayani dari foldernya sendiri, seperti WordPress, CodeIgniter 3, dan PHP biasa: sebelum Rezure 3.3, http://myapp.test/.env bisa mengunduh .env milik proyek itu.

Definisi framework hanya memilih profil. Ia tidak bisa menambahkan directive Nginx sendiri, karena semua situs berbagi satu konfigurasi Nginx dan satu directive yang rusak akan menghentikan semuanya.

Pemecahan masalah ​

Situs menjawab 404, atau menampilkan daftar folder ​

Proyeknya kemungkinan dilayani dari folder yang salah. Arahkan kursor ke badge framework-nya untuk mengecek dari mana dilayani. Lalu klik badge dan pilih framework yang benar, atau Custom folder… kalau proyek memakai struktur sendiri.

"Some framework settings aren't being used" ​

Sebuah entri di etc\frameworks.json dilewati (pesannya menjelaskan alasannya), atau sebuah proyek diatur ke framework yang sudah tidak didefinisikan. Sementara itu proyek tersebut dilayani sesuai hasil deteksi. Perbaiki file-nya, lalu klik Reload di sebelah pesan.

Domain mendapat akhiran -2 ​

Proyek lain, sering kali tautan lama ke folder public/ proyek yang sama, sudah memakai nama polosnya. Lihat Tidak sengaja menautkan folder public/?.

Apa yang dikirim tentang framework ​

Saat kamu menambahkan folder atau mengganti framework proyek, data pemakaian anonim Rezure mencatat id framework yang terdeteksi dan yang kamu pilih, misalnya node dan codeigniter4. Ini menunjukkan di mana deteksi salah menebak proyek. Tidak pernah nama proyek, path, domain, atau file-nya. Framework dari frameworks.json milikmu hanya dilaporkan sebagai user-defined, dan custom folder hanya sebagai custom. Lihat Privasi & Data Penggunaan.