Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penggunaan lanjutan dan contoh demonstrasi perisian tengah rangka kerja Symfony

Penggunaan lanjutan dan contoh demonstrasi perisian tengah rangka kerja Symfony

WBOY
WBOYasal
2023-07-28 23:09:071317semak imbas

Penggunaan lanjutan dan contoh demonstrasi perisian tengah rangka kerja Symfony

Pengenalan:
Perisian tengah ialah salah satu konsep biasa dalam rangka kerja web moden Ia boleh melakukan pemprosesan berbilang lapisan permintaan dan respons HTTP, memproses permintaan atau melakukan pemprosesan pada respons. Pasca pemprosesan. Rangka kerja Symfony juga menyediakan fungsi perisian tengah yang kaya Artikel ini akan memperkenalkan penggunaan lanjutan perisian tengah rangka kerja Symfony dan menunjukkan fungsinya melalui contoh praktikal.

  1. Menggunakan middleware dalam Symfony
    Symfony middleware dilaksanakan melalui Kernel dan EventSubscriber. Sebelum menggunakan perisian tengah, kita perlu memastikan bahawa rangka kerja Symfony telah dipasang dan projek telah dibuat.

1.1 Cipta perisian tengah tersuai
Kami boleh menentukan perisian tengah kami sendiri dengan mencipta kelas baharu. Mula-mula, cipta fail baharu SampleMiddleware.php dalam direktori src/Middleware.

<?php

namespace AppMiddleware;

use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;

class SampleMiddleware
{
    public function handle(Request $request, Closure $next)
    {
        // 在中间件处理请求之前的逻辑
        // ...

        // 调用下一个中间件或路由处理器
        $response = $next($request);

        // 在中间件处理完响应之后的逻辑
        // ...

        return $response;
    }
}

Dalam contoh di atas, kami mentakrifkan kelas SampleMiddleware dan melaksanakan kaedah pemegang, yang menerima objek permintaan $request dan penutupan $next sebagai parameter. Dalam kaedah ini, kita boleh menulis logik sebelum perisian tengah memproses permintaan dan logik selepas memproses respons.

1.2 Daftar middleware
Seterusnya, kita perlu mendaftar middleware tersuai ke dalam rangka kerja Symfony. Buka fail config/services.yaml dan tambahkan konfigurasi berikut:

services:  
    AppMiddlewareSampleMiddleware:
        tags:
            - { name: kernel.event_subscriber }

Melalui konfigurasi di atas, rangka kerja akan menemui dan mendaftarkan perisian tengah yang kami takrifkan secara automatik.

  1. Penggunaan lanjutan middleware
    Rangka kerja Symfony menyediakan fungsi middleware yang kaya, termasuk penghalaan middleware, middleware global dan middleware pengendalian pengecualian, dsb. Berikut akan memperkenalkan cara menggunakan ketiga-tiga middleware ini masing-masing.

2.1 Perisian tengah penghalaan
Perisian tengah penghalaan boleh memproses laluan tertentu. Kami boleh menentukan laluan yang perlu digunakan middleware dalam fail route.yaml.

index:
    path: /
    controller: AppControllerDefaultController::indexAction
    middleware: ['AppMiddlewareSampleMiddleware']

Dalam contoh di atas, kami menggunakan perisian tengah SampleMiddleware pada permintaan penghalaan laluan indeks.

2.2 Global middleware
Global middleware boleh digunakan untuk semua laluan dan sangat berguna untuk logik yang perlu diproses untuk setiap permintaan. Kami boleh mengkonfigurasi perisian tengah global dalam fail config/packages/framework.yaml.

framework:
    middleware: ['AppMiddlewareSampleMiddleware']

Dengan konfigurasi di atas, perisian tengah SampleMiddleware akan digunakan pada semua permintaan penghalaan.

2.3 Perisian tengah pengendalian pengecualian
perisian tengah pengendalian pengecualian boleh digunakan untuk mengendalikan pengecualian yang dilemparkan dalam aplikasi. Kita boleh mencipta perisian tengah baharu untuk menangkap pengecualian dan mengendalikannya.

<?php

namespace AppMiddleware;

use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentHttpKernelExceptionHttpExceptionInterface;

class ExceptionHandlerMiddleware
{
    public function handle(Request $request, Closure $next)
    {
        try {
            $response = $next($request);
        } catch (HttpExceptionInterface $e) {
            $response = new Response($e->getMessage(), $e->getStatusCode());
        }

        return $response;
    }
}

Dalam contoh di atas, kami mencipta kelas ExceptionHandlerMiddleware dan menggunakan blok cuba-tangkap dalam kaedah pemegang untuk menangkap pengecualian HttpExceptionInterface yang dilemparkan. Jika pengecualian ditangkap, kami boleh menyesuaikan pengendalian mengikut keperluan.

  1. Contoh Demonstrasi
    Seterusnya, kami akan menggunakan contoh untuk menunjukkan aplikasi middleware dalam rangka kerja Symfony.

Andaikan kami mempunyai keperluan Apabila pengguna mengakses laluan /admin, kami perlu menyemak sama ada pengguna telah log masuk. Jika anda tidak log masuk, lompat ke halaman log masuk Jika anda log masuk, teruskan melawat halaman pentadbir. Kita boleh mencapai keperluan ini dengan mencipta perisian tengah.

Pertama, buat perisian tengah AdminMiddleware.

<?php

namespace AppMiddleware;

use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentHttpKernelExceptionAccessDeniedHttpException;

class AdminMiddleware
{
    public function handle(Request $request, Closure $next)
    {
        // 检查用户是否已登录
        // ...

        // 如果未登录,则抛出AccessDeniedHttpException异常
        if (!$user->isLoggedIn()) {
            throw new AccessDeniedHttpException('Access Denied');
        }

        return $next($request);
    }
}

Kemudian, gunakan perisian tengah AdminMiddleware pada laluan untuk laluan /admin.

admin:
    path: /admin
    controller: AppControllerAdminController::indexAction
    middleware: ['AppMiddlewareAdminMiddleware']

Dengan konfigurasi di atas, apabila pengguna mengakses laluan /admin, perisian tengah AdminMiddleware akan menyemak sama ada pengguna telah log masuk. Jika tidak log masuk, pengguna akan dialihkan ke halaman log masuk jika log masuk, teruskan ke halaman pentadbir.

Kesimpulan:
Artikel ini memperkenalkan penggunaan lanjutan dan contoh demonstrasi perisian tengah rangka kerja Symfony. Dengan menyesuaikan perisian tengah dan mengkonfigurasi perisian tengah, kami boleh memproses permintaan dan respons secara fleksibel untuk mencapai pelbagai keperluan fungsian. Ini memberikan kemudahan kepada kami untuk membangunkan aplikasi web yang cekap dan berskala.

Atas ialah kandungan terperinci Penggunaan lanjutan dan contoh demonstrasi perisian tengah rangka kerja Symfony. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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