Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perisian tengah rangka kerja Symfony: menyediakan pengendalian ralat dan fungsi pengurusan pengecualian

Perisian tengah rangka kerja Symfony: menyediakan pengendalian ralat dan fungsi pengurusan pengecualian

WBOY
WBOYasal
2023-07-28 13:45:151351semak imbas

Perisian tengah rangka kerja Symfony: Menyediakan pengendalian ralat dan fungsi pengurusan pengecualian

Apabila kami membangunkan aplikasi, kami sering menghadapi ralat dan pengecualian. Untuk mengoptimumkan pengalaman pengguna dan menyediakan alat pembangun yang lebih baik, rangka kerja Symfony menyediakan pengendalian ralat yang berkuasa dan fungsi pengurusan pengecualian. Dalam artikel ini, kami akan memperkenalkan penggunaan perisian tengah rangka kerja Symfony dan kod sampel.

Fungsi pengurusan ralat dan pengurusan pengecualian dalam rangka kerja Symfony dilaksanakan terutamanya melalui perisian tengah. Middleware ialah komponen berfungsi khas yang mengendalikan permintaan dan respons sebelum ia sampai ke pengawal atau sebelum respons dikembalikan kepada klien. Middleware boleh digunakan untuk pelbagai tujuan, termasuk ralat dan pengendalian pengecualian.

Pertama, kita perlu memasang dan mengkonfigurasi rangka kerja Symfony untuk menggunakan fungsi perisian tengah. Rangka kerja Symfony boleh dipasang melalui Komposer, menggunakan arahan berikut:

composer require symfony/symfony

Selepas pemasangan selesai, kita perlu menambah perisian tengah pada fail kemasukan aplikasi. Dalam rangka kerja Symfony, middleware boleh diuruskan melalui Kernel. Tambahkan kod berikut dalam fail public/index.php: public/index.php文件中添加以下代码:

use AppKernel;
use SymfonyComponentDebugDebug;
use SymfonyComponentDotenvDotenv;
use SymfonyComponentHttpFoundationRequest;

require dirname(__DIR__).'/config/bootstrap.php';

if ($_SERVER['APP_DEBUG']) {
    umask(0000);

    Debug::enable();
}

$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

在上述代码中,我们使用Kernel类来初始化应用程序的内核。然后,我们创建一个Request对象并将其发送给内核处理。最后,我们将响应发送给客户端并终止内核。

接下来,我们可以使用中间件来处理错误和异常。在Symfony框架中,我们可以使用FaultTolerantMiddleware中间件来捕获和处理错误和异常。在src/Kernel.php文件中,添加以下代码:

use SymfonyBundleFrameworkBundleKernelMicroKernelTrait;
use SymfonyComponentDependencyInjectionContainerBuilder;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentHttpKernelExceptionHttpExceptionInterface;
use SymfonyComponentHttpKernelKernel as BaseKernel;
use SymfonyComponentRoutingRouteCollectionBuilder;

class Kernel extends BaseKernel
{
    use MicroKernelTrait;

    protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader)
    {
        // 配置服务容器
    }

    protected function configureRoutes(RouteCollectionBuilder $routes)
    {
        // 配置路由
    }

    protected function build(ContainerBuilder $container)
    {
        $container->register('middleware.fault_tolerant', FaultTolerantMiddleware::class)
            ->setAutowired(true);
    }

    protected function renderException(Throwable $exception): Response
    {
        if ($exception instanceof HttpExceptionInterface) {
            $statusCode = $exception->getStatusCode();
        } else {
            $statusCode = Response::HTTP_INTERNAL_SERVER_ERROR;
        }

        $response = new Response();
        $response->setStatusCode($statusCode);
        $response->setContent($exception->getMessage());

        return $response;
    }
}

在上述代码中,我们注册了FaultTolerantMiddleware中间件,并设置其自动注入为真。然后,我们重写了renderException方法,该方法用于处理异常并返回响应。

现在,我们可以通过示例代码来演示中间件的使用。假设我们的应用程序有一个路由,用于处理用户登录请求。在src/Controller/LoginController.php文件中,添加以下代码:

use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAnnotationRoute;

class LoginController
{
    /**
     * @Route("/login", name="login", methods={"POST"})
     */
    public function login(Request $request): Response
    {
        $username = $request->request->get('username');
        $password = $request->request->get('password');

        if ($username === 'admin' && $password === 'secret') {
            return new Response('Login successful');
        } else {
            throw new Exception('Invalid username or password');
        }
    }
}

在上述代码中,我们创建了一个用于处理用户登录请求的控制器方法。如果用户名和密码正确,我们返回一个成功的响应;否则,我们抛出一个异常。

当用户发送登录请求时,中间件将捕获异常并调用renderExceptionrrreee

Dalam kod di atas, kami menggunakan kelas Kernel untuk memulakan kernel aplikasi. Kemudian, kami mencipta objek Request dan menghantarnya ke kernel untuk diproses. Akhir sekali, kami menghantar respons kepada pelanggan dan menamatkan kernel.

Seterusnya, kita boleh menggunakan perisian tengah untuk mengendalikan ralat dan pengecualian. Dalam rangka kerja Symfony, kita boleh menggunakan perisian tengah FaultTolerantMiddleware untuk menangkap dan mengendalikan ralat dan pengecualian. Dalam fail src/Kernel.php, tambahkan kod berikut:

rrreee

Dalam kod di atas, kami telah mendaftarkan perisian tengah FaultTolerantMiddleware dan menetapkan suntikan automatiknya kepada benar. Kemudian, kami mengatasi kaedah renderException, yang digunakan untuk mengendalikan pengecualian dan mengembalikan respons. 🎜🎜Kini, kami boleh menunjukkan penggunaan perisian tengah melalui kod sampel. Katakan aplikasi kami mempunyai laluan yang mengendalikan permintaan log masuk pengguna. Dalam fail src/Controller/LoginController.php, tambahkan kod berikut: 🎜rrreee🎜Dalam kod di atas, kami telah mencipta kaedah pengawal yang mengendalikan permintaan log masuk pengguna. Jika nama pengguna dan kata laluan adalah betul, kami mengembalikan respons yang berjaya jika tidak, kami membuang pengecualian. 🎜🎜Apabila pengguna menghantar permintaan log masuk, perisian tengah akan menangkap pengecualian dan memanggil kaedah renderException untuk mengendalikan pengecualian dan mengembalikan respons yang sepadan kepada klien. Dalam contoh di atas, jika nama pengguna dan kata laluan tidak betul, kami akan mengembalikan respons dengan mesej ralat. 🎜🎜Ringkasan: 🎜🎜Artikel ini memperkenalkan penggunaan perisian tengah rangka kerja Symfony dan kod sampel. Dengan menggunakan perisian tengah, kami boleh mengendalikan ralat dan pengecualian dengan mudah dan mengembalikan respons yang sesuai kepada pelanggan. Rangka kerja Symfony menyediakan pengendalian ralat yang berkuasa dan fungsi pengurusan pengecualian untuk menjadikan aplikasi kami lebih stabil dan boleh dipercayai. 🎜

Atas ialah kandungan terperinci Perisian tengah rangka kerja Symfony: menyediakan pengendalian ralat dan fungsi pengurusan pengecualian. 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