FQCN
FQCN (Fully Qualified Class Name) 是類別的整名稱,因此類別名稱跟前面的命名空間。
例如 : Symfony\Component\HttpFoundation\Request
以上的類別名稱是 Request ,集合就組成 FQCN。
MVC
MVC 的意思是 模型 - 視圖 - 控制器。
這是一個安排應用程式的方式,把應用程式分為三個部份:
- 模型,代表數據(數據庫)
- 視圖,為了顯示資訊(範本)
- 控制器,包含商業邏輯(程式碼)
Type-hint
在 Symfony 的應用程式裡面,一個 type-hint 是在控制器或類別建構函式的參數可以宣告。
宣告後來會被 Symfony 分析來找到相應的服務,而對控制器或服務提供一個實例。
控制器
例如,在控制器的參數:
#[Route('/new', name: 'app_article_crud_new', methods: ['GET', 'POST'])]
public function new(
Request $request, // <-- 特別 Type-hint : 提供進入要求
EntityManagerInterface $entityManager, // <-- Type-hint
SluggerInterface $slugger // <-- Type-hint
): Response
{
//...
}
服務
class NewsletterService
{
public function __construct(
private MailerInterface $mailer, // <-- Type-hint
private string $adminEmail
) {
}
//...
}
可以 type-hint autowired 類型
Slug
Slug 是一個沒有空間、重音符號、特殊字母的字串,就可以在網址或檔案名稱裡面用。
比如說一個文章的標題是:
Découvrez l'injection de dépendances dans Symfony
那相應的 slug 可能是:
decouvrez-l-injection-de-dependances-dans-symfony
也可以瀏覽以下的網址:
https://domain.com/articles/decouvrez-l-injection-de-dependances-dans-symfony
配方
配方用於安裝套件之前先安裝套件的組態。由 Symfony Flex 工具執行。
Symfony Flex 是一個 Composer 外掛程式:當用 composer require XXX 安裝套件時,Symfony Flex 會尋找套件有沒有相應的配方。配方可以包含組態檔案,或者專案內需要建立的檔案。目的是讓 Symfony 應用程式的套件整合更容易。
界面類型
在物件導向程式設計中,界面類型是一種抽象的類型:裡面只有函式的簽章。因此,所有實作的類別必須提供函式的定義。
例子
我想要開發一個通知系統。當活動發生時,我想通知使用者或管理員。
但是傳送通知的方法有多種:簡訊、郵件、手機通知等等。
所以我先會定義一個界面類型,抽象的,以描述通知系統的行為:
<?php
interface AlertInterface
{
/**
* 傳送通知
*/
public function sendAlert();
}
接下來,如果我想定義怎麼傳送簡訊通知,我可以建立一個類別而實作 AlertInterface:
<?php
class SmsAlert implements AlertInterface
{
public function sendAlert()
{
// 傳送簡訊
}
}
然後我也可以定義郵件通知:
<?php
class EmailAlert implements AlertInterface
{
public function sendAlert()
{
// 傳送郵件
}
}
這樣,我在 AlertInterface 裡面只會描述通知系統的行為。然後,我可以定義實作這個界面類型的類別,以實作不同的通知方式。
Polyfill
一個 polyfill 可以在特定的版本中,使用在更新的版本中出現的功能,並模擬它們。
例如,如果我在 PHP 7 中,我無法使用 PHP 8 中的功能。
但如果我用 Symfony 的 PHP 8.0 Polyfill 套件,我就可以使用 str_contains 函式,因為這個函式在 PHP 8.0 中出現,而 Symfony 已經寫了一個 polyfill 來模擬它。