Rumah >pembangunan bahagian belakang >tutorial php >Bina kerangka PHP anda sendiri dengan komponen Symfony
Tutorial ini menunjukkan membina rangka kerja PHP yang minimum menggunakan komponen Symfony. Walaupun tidak lengkap, ia meliputi elemen teras untuk aplikasi berfungsi. Untuk menyelam yang lebih mendalam, berunding dengan dokumentasi Symfony rasmi.
Konsep Utama:
Tutorial ini memanfaatkan komponen simfoni untuk membina rangka kerja yang fleksibel. Ia menggunakan HTTPFoundation untuk menguruskan permintaan dan respons HTTP, menggantikan Global PHP standard. Komponen penghalaan membolehkan pengendalian URL dinamik, dan komponen EventDispatcher memudahkan modulariti dan extensibility melalui corak pemerhati. Akhirnya, komponen httpkernel menyelaraskan pemprosesan permintaan dan penjanaan tindak balas.
Persediaan Projek:
Mulakan dengan fail asas dan pasang komponen yang diperlukan menggunakan komposer: index.php
<code class="language-bash">php composer.phar require symfony/http-foundation symfony/http-kernel symfony/routing symfony/event-dispatcher</code>
httpfoundation menyediakan
dan kelas. Pada mulanya, Request
mungkin kelihatan seperti ini (menggunakan global): Response
index.php
<code class="language-php">switch($_SERVER['PATH_INFO']) { case '/': echo 'Home'; break; case '/about': echo 'About'; break; default: echo 'Not Found!'; }</code>
<code class="language-php">require 'vendor/autoload.php'; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; $request = Request::createFromGlobals(); $response = new Response(); switch ($request->getPathInfo()) { case '/': $response->setContent('Home'); break; case '/about': $response->setContent('About'); break; default: $response->setContent('Not Found!')->setStatusCode(Response::HTTP_NOT_FOUND); } $response->send();</code>
untuk merangkum logik rangka kerja, buat kelas (mis.,
):
Core
lib/Framework/Core.php
UPDATE
<code class="language-php"><?php namespace Framework; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\HttpKernelInterface; class Core implements HttpKernelInterface { public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) { switch ($request->getPathInfo()) { case '/': return new Response('Home'); case '/about': return new Response('About'); default: return new Response('Not Found!', Response::HTTP_NOT_FOUND); } } }</code>
index.php
<code class="language-php">require 'lib/Framework/Core.php'; $request = Request::createFromGlobals(); $app = new Framework\Core(); $response = $app->handle($request); $response->send();</code>
kelas dipertingkatkan dengan sistem penghalaan menggunakan komponen penghalaan:
Core
laluan kini ditakrifkan dalam
<code class="language-php"><?php // ... (previous code) ... use Symfony\Component\Routing\Matcher\UrlMatcher; use Symfony\Component\Routing\RequestContext; use Symfony\Component\Routing\RouteCollection; use Symfony\Component\Routing\Route; use Symfony\Component\Routing\Exception\ResourceNotFoundException; class Core implements HttpKernelInterface { protected $routes; public function __construct() { $this->routes = new RouteCollection(); } public function handle(Request $request) { $context = new RequestContext(); $context->fromRequest($request); $matcher = new UrlMatcher($this->routes, $context); try { $attributes = $matcher->match($request->getPathInfo()); $controller = $attributes['controller']; unset($attributes['controller']); return call_user_func_array($controller, $attributes); } catch (ResourceNotFoundException $e) { return new Response('Not Found!', Response::HTTP_NOT_FOUND); } } public function map($path, $controller) { $this->routes->add($path, new Route($path, ['controller' => $controller])); } }</code>
index.php
<code class="language-php">$app->map('/', function() { return new Response('Home'); }); $app->map('/about', function() { return new Response('About'); }); // ...</code>
Komponen EventDispatcher menambah keupayaan pengendalian acara. Tambah kaedah dan kaedah
ke kelas dan kelas on
. (Butiran pelaksanaan yang ditinggalkan untuk keringkasan, tetapi serupa dengan contoh dalam input asal). Pendengar boleh ditambah menggunakan fire
. Core
RequestEvent
Rangka kerja ini menyediakan asas untuk membina aplikasi yang lebih kompleks menggunakan kuasa dan fleksibiliti Symfony. Ingatlah untuk berunding dengan dokumentasi Symfony rasmi untuk ciri -ciri dan butiran komponen yang lebih canggih. $app->on('request', ...);
Atas ialah kandungan terperinci Bina kerangka PHP anda sendiri dengan komponen Symfony. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!