用語集
AJAX
Asynchronous JavaScript and XML – クライアントとサーバー間でHTTPプロトコルを介して情報を交換する技術で、各リクエストごとにページ全体を再読み込みする必要がありません。名前からはXML形式でのみデータを送信するように思えるかもしれませんが、一般的にはJSON形式も使用されます。
Presenterのアクション
Presenterの論理的な部分で、1つのアクションを実行します。例えば、製品ページの表示、ユーザーのログアウトなどです。1つのPresenterは複数のアクションを持つことができます。
BOM
いわゆる*byte order mark*は、ファイルの先頭にある特別な文字で、エンコーディングにおけるバイトオーダーのインジケータとして使用されます。一部のエディタはこの文字をファイルに挿入します。実際には見えませんが、PHPからの出力やヘッダーの送信に問題を引き起こします。一括で削除するには、Code Checkerを使用できます。
Controller
ユーザーのリクエストを処理し、それに基づいて適切なアプリケーションロジック(つまりモデル)を呼び出し、その後ビューにデータの描画を依頼するコントローラー。Nette Frameworkにおけるコントローラーに相当するものはPresenterです。
Cross-Site Scripting (XSS)
Cross-Site Scriptingは、エスケープされていない出力を悪用してウェブサイトを侵害する手法です。攻撃者はページに独自のコードを挿入し、それによってページを変更したり、訪問者の機密情報を取得したりすることができます。XSSに対する防御は、すべての文字列を徹底的かつ正確にエスケープすることによってのみ可能です。
Nette Frameworkは、画期的な技術であるContext-Aware Escapingを提供しており、これによりCross-Site Scriptingのリスクから永久に解放されます。すべての出力は自動的にエスケープされるため、コーダーが何かを忘れることはありえません。
Cross-Site Request Forgery (CSRF)
Cross-Site Request Forgery攻撃は、攻撃者が被害者をあるページに誘い込み、そのページが被害者のブラウザで、被害者がログインしているサーバーに対して密かにリクエストを実行するというものです。サーバーは、そのリクエストが被害者自身の意思によって実行されたものと誤認します。そして、被害者のアイデンティティの下で、被害者が知らないうちに特定の操作(データの変更や削除、メッセージの送信など)を実行します。
Nette Frameworkは、Presenter内のフォームとシグナルを自動的にこの種の攻撃から保護します。これは、異なるドメインからの送信や呼び出しを防ぐことによって行われます。
Dependency Injection
Dependency Injection(DI)は、オブジェクトの作成とその依存関係の分離方法を示すデザインパターンです。つまり、クラスは自身の依存関係の作成や初期化に責任を負わず、代わりにこれらの依存関係は外部のコード(DIコンテナなど)によって提供されます。利点は、依存関係が容易に置換可能で、コードの他の部分から隔離されているため、コードの柔軟性が向上し、理解しやすくなり、アプリケーションのテストが容易になることです。詳細はDependency Injectionとは?の章を参照してください。
Dependency Injectionコンテナ
Dependency Injectionコンテナ(DIコンテナまたはIoCコンテナとも呼ばれる)は、アプリケーション内の依存関係(つまりサービス)の作成と管理を担当するツールです。コンテナは通常、どのクラスが他のクラスに依存しているか、どの具体的な依存関係の実装を使用するか、そしてこれらの依存関係をどのように作成するかを定義する設定を持ちます。その後、コンテナはこれらのオブジェクトを作成し、それらを必要とするクラスに提供します。詳細はDIコンテナとは?の章を参照してください。
エスケープ
エスケープとは、特定のコンテキストで特別な意味を持つ文字を、対応する別のシーケンスに変換することです。例:引用符で囲まれた文字列内に引用符を書き込みたい場合。引用符は文字列のコンテキストで特別な意味を持ち、そのまま記述すると文字列の終了と解釈されるため、別の対応するシーケンスで記述する必要があります。どのシーケンスを使用するかは、コンテキストのルールによって決まります。
フィルタ (以前はヘルパー)
テンプレートでは、フィルタという用語は通常、データを最終的な形式に調整または再フォーマットするのに役立つ関数を指します。テンプレートにはいくつかの標準フィルタがあります。
無効化
スニペットに再描画を通知すること。別の意味では、キャッシュの内容を削除することでもあります。
JSON
JavaScriptの構文(そのサブセット)に基づいたデータ交換フォーマット。正確な仕様はwww.json.orgで確認できます。
コンポーネント
アプリケーションの再利用可能な部分。コンポーネントの作成の章で説明されているように、ページの視覚的な部分である場合もあれば、コンポーネントという用語はクラスComponentを指す場合もあります(そのようなコンポーネントは視覚的である必要はありません)。
制御文字
制御文字は、テキスト中に存在する可能性があり、問題を引き起こす可能性もある目に見えない文字です。ファイルから一括で削除するにはCode Checkerを使用でき、変数から削除するにはStrings::normalize()関数を使用できます。
イベント
イベントとは、オブジェクト内で予期される状況であり、それが起こると、いわゆるハンドラ、つまりイベントに反応するコールバックが呼び出されます(デモ of Control*の一形態です。
例えば、ユーザーのログインはNette\Security\User::login()
メソッドで行われます。User
オブジェクトにはパブリック変数$onLoggedIn
があり、これは誰でもコールバックを追加できる配列です。ユーザーがログインすると、login()
メソッドはこの配列内のすべてのコールバックを呼び出します。onXyz
形式の変数名は、Nette全体で使用される規約です。
Latte
最も先進的なテンプレートエンジンの1つ。
モデル
モデルは、アプリケーション全体のデータと、特に機能的な基盤です。すべてのアプリケーションロジック(ビジネスロジックという用語も使われます)が含まれています。これはMVCまたはMVPのMです。ユーザーのあらゆるアクション(ログイン、商品をカートに入れる、データベースの値を変更する)は、モデルのアクションを表します。
モデルは自身の内部状態を管理し、外部には固定されたインターフェースを提供します。このインターフェースの関数を呼び出すことで、その状態を照会したり変更したりできます。モデルはビューやコントローラーの存在を知りません。
Model-View-Controller
グラフィカルインターフェースを持つアプリケーションにおいて、操作コード(コントローラー)をアプリケーションロジックコード(モデル)およびデータ表示コード(ビュー)から分離する必要性から生まれたソフトウェアアーキテクチャ。これにより、アプリケーションが明確になり、将来の開発が容易になり、個々の部分を別々にテストすることが可能になります。
Model-View-Presenter
Model-View-Controllerに基づいたアーキテクチャ。
モジュール
モジュールは、アプリケーションの論理的な部分を表します。典型的な構成では、特定の機能領域を扱うPresenterとテンプレートのグループです。モジュールは、Front/
、Admin/
、Shop/
などの独立したディレクトリに配置します。
例えば、eショップを次のように分割します:
- フロントエンド (
Shop/
):製品の閲覧と購入用 - 顧客セクション (
Customer/
):注文管理用 - 管理画面 (
Admin/
):運営者用
技術的には、これらは通常のディレクトリですが、明確な構造化によりアプリケーションのスケーリングに役立ちます。Presenter
Admin:Product:List
は、物理的には例えばapp/Presentation/Admin/Product/List/
ディレクトリに配置されます(Presenterのマッピングを参照)。
Namespace
名前空間は、PHPバージョン5.3以降および他のいくつかのプログラミング言語の一部であり、異なるライブラリで同じ名前が付けられたクラスを、名前の衝突なしに使用できるようにします。PHP ドキュメントを参照してください。
Presenter
Presenterは、ルーターによってHTTPリクエストから変換されたリクエストを受け取り、レスポンスを生成するオブジェクトです。レスポンスは、HTMLページ、画像、XMLドキュメント、ディスク上のファイル、JSON、リダイレクト、または考えられるあらゆるものにすることができます。
通常、Presenterという用語は、クラスNette\Application\UI\Presenterの子孫を指します。受信したリクエストに応じて、対応するアクションを実行し、テンプレートを描画します。
Router
HTTPリクエスト/URLとPresenterのアクション間の双方向トランスレータ。双方向とは、HTTPリクエストからPresenterのアクションを導き出すことができるだけでなく、逆も同様に、アクションに対応するURLを生成できることを意味します。詳細はURLルーティングの章を参照してください。
SameSite cookie
SameSite
cookiesは、ページの読み込みにつながった原因を認識するメカニズムを提供します。Lax
、Strict
、None
(これはHTTPSが必要)の3つの値を持つことができます。ページへのリクエストがウェブサイトから直接来た場合、またはユーザーがアドレスバーに直接入力するかブックマークをクリックしてページを開いた場合、ブラウザはすべてのCookie(つまり、Lax
、Strict
、None
フラグを持つもの)をサーバーに送信します。ユーザーが別のウェブサイトからのリンクをクリックしてウェブサイトにアクセスした場合、Lax
およびNone
フラグを持つCookieがサーバーに送信されます。リクエストが他の方法で発生した場合、例えば別のウェブサイトからのPOSTフォームの送信、iframe内での読み込み、JavaScriptによるものなどでは、None
フラグを持つCookieのみが送信されます。
サービス
Dependency Injectionの文脈では、サービスとはDIコンテナによって作成および管理されるオブジェクトを指します。サービスは、例えばテスト目的や、サービスを使用するコードを変更することなくアプリケーションの動作を変更するために、別の実装に簡単に置き換えることができます。
スニペット
スニペット、AJAXリクエスト中に個別に再描画できるページの一部。
ビュー
ビューは、リクエストの結果を表示する役割を担うアプリケーションのレイヤーです。通常、テンプレートエンジンを使用し、特定のコンポーネントやモデルから取得した結果をどのように表示するかを知っています。