詞彙

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
) {
}
//...
}

可使用 autowired 類型之 type-hint

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

Recipe(設定範本)

在 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 來模擬它。