Sejauh manakah anda tahu tentang parameter penghalaan?



Parameter penghalaan

Penghimpunan penghalaan dan definisi peraturan menyokong menentukan parameter penghalaan, yang terutamanya melengkapkan pengesanan padanan laluan dan tindakan seterusnya.

Parameter penghalaan boleh dihantar secara langsung (dalam kelompok) apabila menentukan peraturan penghalaan Adalah disyorkan untuk menggunakan kaedah untuk mengkonfigurasinya dengan lebih jelas.


deny_extURL melarang pengesanan akhiran, disokong Padanan berbilang akhirandenyExthttpsKesan sama ada permintaan httpshttpsdomainPengesanan nama domain adalah laluan Perlawanan lengkapcompleteMatch modelBind modelmodelcacheMinta cachecacheajaxAjax detectionPengesanan Pjaxpjax jsonDaftar penghalaan middleware Penapis tidak berkuat kuasa dan terus mengesan peraturan penghalaan seterusnya. Jika anda perlu menetapkan parameter penghalaan dalam kelompok, anda juga boleh menggunakan kaedah pilihan. Imbuhan URLPenerangan
ParameterPeneranganNama kaedah
ext pengesanan suffies
Pengesanan JSON middleware
middleware
Route::get('new/:id', 'News/read')
    ->ext('html')
    ->https();
Jika akhiran URL disatukan secara global, anda boleh menetapkan parameter url_html_suffix dalam fail konfigurasi aplikasi route.php Jika akhiran URL dalam alamat URL yang diakses sekarang ialah pseudo- yang dibenarkan. akhiran statik, kemudian akhiran Ia tidak akan dihantar sebagai nilai parameter. Perbezaan antara tetapan parameter yang berbeza adalah seperti berikut:
Nilai konfigurasi
Nilai konfigurasi Penerangan
Palseu akses palsuPhibitan

rentetan kosong

Benarkan mana-mana imbuhan pseudo-statik

html

Hanya benarkan set akhiran pseudo-statik

html|htm


html berbilang suffix statik


Route::get('new/:id', 'News/read')
    ->option([
        'ext'   => 'html',
        'https' => true
    ]);

menyokong pemadanan berbilang akhiran, contohnya:

// 定义GET请求路由规则 并设置URL后缀为html的时候有效
Route::get('new/:id', 'News/read')
    ->ext('html');

Jika kaedah ext tidak melepasi sebarang nilai, ini bermakna tiada akses akhiran dibenarkan.

Anda boleh menetapkan akhiran URL yang dilarang daripada akses, contohnya:

Route::get('new/:id', 'News/read')
    ->ext('shtml|html');

Jika kaedah denyExt tidak melepasi sebarang nilai, ini bermakna akhiran mesti digunakan untuk akses.

Pengesanan nama domain

menyokong penggunaan nama domain atau nama subdomain yang lengkap untuk pengesanan, contohnya:

// 定义GET请求路由规则 并设置禁止URL后缀为png、jpg和gif的访问
Route::get('new/:id', 'News/read')
    ->denyExt('jpg|png|gif');

Jika anda perlu menentukan peraturan penghalaan kelompok untuk nama subdomain, adalah disyorkan untuk menggunakan kaedah domain untuk definisi penghalaan.

Pengesanan HTTPS

Menyokong pengesanan akses HTTPS semasa

// 完整域名检测 只在news.thinkphp.cn访问时路由有效
Route::get('new/:id', 'News/read')
    ->domain('news.thinkphp.cn');
// 子域名检测
Route::get('new/:id', 'News/read')
    ->domain('news');

Pengesanan AJAX/PJAX/JSON

Boleh mengesan sama ada permintaan semasa JSONX/PJAX

// 必须使用HTTPS访问
Route::get('new/:id', 'News/read')
    ->https();

Minta pengesanan pembolehubah

Selain memadankan alamat penghalaan, anda juga boleh menyemak sama ada pembolehubah permintaan sepadan Hanya apabila pembolehubah permintaan yang ditentukan juga konsisten, laluan boleh dipadankan.

// 必须是JSON请求访问
Route::get('new/:id', 'News/read')
    ->json();

Tambahkan parameter tambahan

Anda boleh menambahkan parameter tambahan secara tersirat apabila menentukan laluan Parameter ini tidak akan muncul dalam alamat URL.

// 检查type变量
Route::post('new/:id', 'News/save')
    ->filter('type', 1);   
    
// 检查多个请求变量
Route::post('new/:id', 'News/save')
    ->filter([ 'type' => 1,'status'=> 1 ]);

Apabila permintaan penghalaan, dua parameter, app_id dan status, akan dihantar pada masa yang sama.

Model pengikatan laluan

Peraturan penghalaan dan data model pengikatan sokongan pengumpulan, contohnya:

Route::get('blog/:id', 'Blog/read')
    ->append(['app_id' => 1, 'status' => 1]);

akan mengikat data model Pengguna secara automatik dengan id nilai pembolehubah penghalaan semasa kepada laluan semasa.

Jika penjilidan model anda menggunakan id sebagai syarat pertanyaan, ia juga boleh dipermudahkan kepada kaedah berikut

Route::get('hello/:id', 'index/hello')
    ->model('id', '\app\index\model\User');

Secara lalai, jika data model tidak ditanya, pengecualian akan dilemparkan Jika anda tidak mahu membuang pengecualian , anda boleh menggunakan

Route::get('hello/:id', 'index/hello')
    ->model('\app\index\model\User');

untuk menentukan syarat pertanyaan bagi data model, contohnya:

Route::rule('hello/:id', 'index/hello')
    ->model('id', '\app\index\model\User', false);

menunjukkan bahawa id pertanyaan dan nilai nama adalah sama dengan data model pembolehubah penghalaan semasa.

Anda juga boleh menggunakan penutupan untuk menyesuaikan objek model yang diperlukan dikembalikan

Route::rule('hello/:name/:id', 'index/hello')
    ->model('id&name', '\app\index\model\User');

Parameter fungsi penutupan ialah maklumat pembolehubah URL permintaan semasa.

Model terikat boleh disuntik terus secara automatik dalam kaedah seni bina pengawal atau kaedah operasi Untuk butiran, sila rujuk suntikan kebergantungan dalam bab permintaan. . .

Route::rule('hello/:id', 'index/hello')
    ->model(function ($id) {
        $model = new \app\index\model\User;
        return $model->where('id', $id)->find();
    });

Jika anda gunakan ditakrifkan dalam mod malar, dan parameter middleware boleh dihantar sebagai parameter kedua.

Route::get('new/:name$', 'News/read')
    ->cache(3600);
Jika anda perlu mentakrifkan berbilang middleware, gunakan kaedah tatasusunan
Route::rule('hello/:name','hello')
	->middleware('Auth');

untuk memasukkan parameter tambahan yang sama

Route::group('hello', function(){
	Route::rule('hello/:name','hello');
})->middleware('Auth');

atau nyatakan parameter middleware secara individu.

Route::rule('hello/:name','hello')
	->middleware('Auth:admin');

Parameter dinamik


Jika anda perlu menyesuaikan beberapa parameter penghalaan tambahan, anda boleh menggunakan kaedah berikut:

Route::rule('hello/:name','hello')
	->middleware(Auth::class, 'admin');

atau gunakan kaedah dinamik

Route::rule('hello/:name','hello')
	->middleware([Auth::class, 'Check']);

Anda boleh memanggil parameter peraturan laluan seterusnya Semakan kebenaran.