Struktur seni bina ThinkPHP6


Fail entri (index.php) direktori. Fail entri yang paling biasa Ia adalah index.php 6.0 menyokong berbilang entri aplikasi Anda boleh menambah fail entri pada setiap aplikasi, seperti menetapkan fail entri yang berasingan admin.php untuk aplikasi latar belakang.

Jika anda mendayakan berbilang aplikasi automatik, anda biasanya hanya memerlukan satu fail masukan index.php.

Aplikasi (aplikasi>

menyokong berbilang aplikasi. Setiap aplikasi ialah subdirektori bagi direktori aplikasi. Setiap aplikasi mempunyai penghalaan bebas, konfigurasi dan fail berkaitan MVC seperti pengawal dan model. Aplikasi ini boleh dikongsi teras Rangka Kerja dan sambungan. Dan boleh menyokong pemuatan aplikasi komposer

Bekas (bekas)

ThinkPHP menggunakan bekas (objek) untuk mengurus kejadian objek dan suntikan kebergantungan secara seragam

Kerja kelas kontena . Dalam kebanyakan kes, kami menyelesaikan operasi kontena melalui kelas aplikasi (kelas thinkApp) atau fungsi pembantu aplikasi Semua contoh objek dalam bekas boleh dipanggil melalui pengecam bekas Anda boleh mengikat objek pada contoh objek , jika tiada pengikatan, gunakan nama kelas sebagai pengenalan kontena

Perkhidmatan sistem

Konsep perkhidmatan sistem merujuk kepada beberapa perkhidmatan asas yang perlu dipercayai semasa melaksanakan komponen atau fungsi rangka kerja tertentu. Kelas perkhidmatan biasanya boleh digunakan untuk mewarisi kelas thinkService sistem, tetapi ia tidak wajib

Anda boleh mendaftarkan objek dalam perkhidmatan sistem kepada bekas, atau melakukan suntikan pergantungan yang berkaitan pada objek tertentu untuk memastikan komponen yang berkaitan berada dalam. Suntikan pergantungan yang berkaitan telah selesai semasa pelaksanaan

Laluan (laluan)

Penghalaan digunakan untuk merancang (biasanya memudahkan) alamat akses permintaan, dan mewujudkan laluan antara alamat akses dan operasi sebenar. kaedah. Rules => Hubungan pemetaan alamat penghalaan

ThinkPHP tidak dipaksa untuk menggunakan penghalaan, ia boleh diakses secara langsung menggunakan kaedah "pengawal/operasi". yang sepadan dengan laluan adalah Ia tidak boleh diakses secara langsung Setelah parameter penghalaan mandatori dihidupkan, laluan mesti ditentukan untuk setiap permintaan (termasuk halaman utama

Terdapat kehilangan prestasi tertentu apabila menggunakan penghalaan). juga lebih selamat kerana setiap laluan mempunyai syarat yang tersendiri, jika permintaan yang tidak memenuhi syarat ditapis, ia adalah lebih praktikal daripada membuat pelbagai pertimbangan dalam operasi pengawal daripada semudah spesifikasi URL. Ia juga boleh melaksanakan pengesahan , kebenaran, pengikatan parameter dan tetapan respons dan fungsi lain

Pengawal

Terdapat beberapa pengawal di bawah aplikasi yang bertanggungjawab untuk membalas permintaan, dan setiap aplikasi mempunyai perpustakaan kelas dan fail konfigurasi sendiri Pengawal sebenarnya adalah kelas pengawal bebas

.

Pengawal bertanggungjawab terutamanya untuk menerima permintaan, memanggil pemprosesan model yang berkaitan, dan akhirnya mengeluarkan melalui paparan. Tegasnya, pengawal tidak seharusnya terlalu terlibat dalam pemprosesan logik perniagaan.

Malah, pengawal boleh dilangkau Melalui penghalaan, kami boleh terus menghantar permintaan kepada model atau kelas lain untuk diproses.

Kelas pengawal ThinkPHP agak fleksibel dan tidak perlu mewarisi mana-mana perpustakaan kelas asas.

Kelas pengawal Indeks biasa (mod aplikasi tunggal) adalah seperti berikut:

<?php
namespace app\controller;

class Index 
{
    public function index()
    {
        return 'hello,thinkphp!';
    }
}

Secara amnya disyorkan untuk mewarisi pengawal asas untuk memudahkan pengembangan. Sistem ini menyediakan kelas pengawal appBaseController secara lalai.

Operasi (tindakan)

Sebuah pengawal mengandungi berbilang operasi (kaedah), dan kaedah pengendalian ialah unit terkecil akses URL.

Berikut ialah definisi kaedah operasi pengawal Indeks biasa, yang mengandungi dua kaedah operasi:

<?php
namespace app\controller;

class Index 
{
    public function index()
    {
        return 'index';
    }
    
    public function hello(string $name)
    {
        return 'Hello,'.$name;
    }
}

Kaedah operasi tidak boleh menggunakan sebarang parameter Jika parameter bukan pilihan ditakrifkan dan ia bukan jenis objek, parameter Ia mesti dihantar melalui permintaan pengguna Jika ia adalah permintaan URL, ia biasanya dihantar melalui permintaan semasa Parameter kaedah operasi menyokong suntikan pergantungan.

Model

Kelas model biasanya melengkapkan logik perniagaan sebenar dan enkapsulasi data, dan mengembalikan data bebas format.

Kelas model tidak semestinya perlu mengakses pangkalan data, dan dalam reka bentuk seni bina ThinkPHP, sambungan pangkalan data hanya akan dibuat apabila operasi pertanyaan pangkalan data sebenar dilakukan, yang merupakan sambungan malas sebenar.

Lapisan model ThinkPHP menyokong reka bentuk berbilang lapisan Anda boleh melakukan reka bentuk dan pembahagian kerja yang lebih terperinci pada lapisan model, seperti membahagikan lapisan model kepada lapisan logik/lapisan perkhidmatan/lapisan peristiwa, dsb.

Kelas model biasanya perlu mewarisi kelas thinkModel Kelas pemodel Pengguna biasa adalah seperti berikut:

<?php
namespace app\model;

use think\Model;

class User extends Model
{
}

Lihat (pandangan)

Selepas pengawal memanggil kelas model, data yang dikembalikan dihimpunkan ke dalam format yang berbeza bagi output melalui paparan. Pandangan memutuskan untuk memanggil enjin templat untuk menghuraikan kandungan dan kemudian mengeluarkannya atau mengeluarkannya secara langsung mengikut keperluan yang berbeza.

Enjin templat (templat)

Sesetengah teg templat khas boleh digunakan dalam fail templat, dan penghuraian teg ini biasanya dilaksanakan oleh enjin templat.

Versi baharu tidak lagi mempunyai enjin templat think-template terbina dalam Jika anda perlu menggunakan enjin templat rasmi ThinkPHP, anda perlu memasang sambungan pemacu enjin templat think-view secara berasingan.

Drive

Banyak komponen sistem menggunakan reka bentuk pemacu, yang boleh dikembangkan dengan lebih fleksibel Lokasi kelas pemandu diletakkan di bawah direktori perpustakaan kelas teras secara lalai, dan nama perpustakaan kelas pemandu juga boleh ditakrifkan semula ruang untuk menukar lokasi fail pemacu.

Versi pemacu 6.0 dipasang dan diurus menggunakan Komposer.

Middleware

Middleware digunakan terutamanya untuk memintas atau menapis permintaan HTTP aplikasi dan melaksanakan pemprosesan perniagaan yang diperlukan.

Beberapa fungsi teras versi baharu diproses oleh perisian tengah, yang boleh anda matikan secara fleksibel. Termasuk fungsi Sesi, fungsi Trace halaman, caching permintaan dan fungsi berbilang bahasa.

event

6.0 telah menggunakan mekanisme acara untuk menggantikan gelagat asal dan mekanisme Cangkuk Ciri mekanisme acara boleh digunakan dalam aplikasi untuk mengembangkan fungsi.

Selain itu, mekanisme panggil balik untuk operasi pangkalan data dan operasi model untuk melengkapkan operasi data juga menggunakan mekanisme acara.

Fungsi pembantu (penolong)

Sistem ini menyediakan sokongan fungsi pembantu untuk beberapa operasi biasa, tetapi rangka kerja teras itu sendiri tidak bergantung pada mana-mana fungsi pembantu. Menggunakan fungsi pembantu tidak mempunyai kesan langsung pada prestasi, tetapi kadangkala anda tidak dapat menikmati kemudahan peringatan automatik daripada IDE Walau bagaimanapun, sama ada untuk menggunakan fungsi pembantu bergantung pada spesifikasi projek itu sendiri Anda juga boleh menulis semula fungsi pembantu yang disediakan oleh sistem fail fungsi awam permohonan itu.