Fuelphp-quick-guide

提供:Dev Guides
移動先:案内検索

FuelPHP-はじめに

FuelPHPは、オープンソースのWebアプリケーションフレームワークです。 PHP 5.3で書かれており、HMVCパターンを実装しています。 HMVC は、通常のMVCのように完全なページではなく、コメント、メニューなどの部分的なページを返すコントローラーをサブリクエストすることを可能にする、階層モデルビューコントローラーフレームワークです。

FuelPHPは、 CodeIgniterKohana などのフレームワークのベストプラクティスを、独自の改善やアイデアとともに取り入れたいという要望を持って作成されています。 FuelPHPデータベース移行ツールとスキャフォールディング機能は、人気のある Ruby on Rails フレームワークに触発されています。

  • FuelPHPは、 "Oil" と呼ばれるユーティリティを介して*コマンドライン*のパワーを活用します。 このユーティリティは、開発の高速化、効率の向上、テスト、デバッグ、HTMLサポートを支援するように設計されています。
  • FuelPHPは、純粋にオブジェクト指向のアプローチです。 そのアーキテクチャは、モジュール性の概念に基づいています。 アプリケーションはモジュールに分割でき、コードを1行も書き直すことなく、すべてのコンポーネントを拡張または置換できます。 Fuelは、* Smarty、Twig、PHPTalなどのテンプレートパーサーをサポートしています。 ビューの解析用。
  • * FuelPHPコミュニティは大きく、300人以上の貢献者がいます。 その大規模なコミュニティは、定期的にパッケージと拡張機能を作成および改善します。 FuelPHPフレームワークの主な目的は、柔軟性と互換性を提供することです。 これは、高速で習得しやすく、Webアプリケーションを開発するための完全なソリューションです。
  • FuelPHPをPHP開発者が使用する最高のフレームワークの1つにしているのは、–新しいバージョンのFuelPHPは、その安定したAPIにより、以前のバージョンと逆互換です。 非常に柔軟です。
  • *パッケージとモジュール*により、既存のコードを体系的に再利用することが簡単かつ簡単になります。 FuelPHPは、小さなライブラリを通じて最大のパフォーマンスを提供します。 インタラクティブなデバッグにより、開発時のエラーを簡単に排除できます。 また、そのクリーンで安定したコードにより、プログラミングが容易になります。

FuelPHP-機能

FuelPHPは、本格的なWebアプリケーションを作成するための多くの機能を提供します。 柔軟なコンポーネント、シンプルな構成、使いやすいORM、RESTベースのアプリケーション開発モードなどを提供します。 以下は、顕著な特徴のいくつかです-

  • 柔軟でコミュニティ主導のWebフレームワーク
  • 構成と使用が簡単
  • FuelPHPは非常に移植性が高く、ほぼすべてのサーバーで動作します
  • 柔軟なURIルーティングシステム
  • FuelPHPはRESTful API開発サポートを提供します
  • 軽量ORMモデル
  • 入力フィルタリングとSQLインジェクションの防止
  • 安全な認証および承認フレームワーク
  • 再利用可能なコードと保守が容易なコード
  • クラスの自動ロード、セッション管理、および例外処理。

FuelPHP-利点

FuelPHPは、次の利点を持つWebアプリケーションを構築するためのコンポーネントのセットを提供するエレガントなHMVC PHP 5.3フレームワークです-

  • モジュール構造-燃料は、モジュールまたはHMVCファイル構造の使用を強制しません。 使用する場合、このプロセスは非常に簡単に統合できます。 FuelPHPアプリはモジュール構造で作成されており、開発者にとって明らかな利点があります。
  • * HMVCパターン*-このフレームワークの最も重要な機能はHMVC(Hierarchical Model View Controller)であり、プロパティ、クラスメソッド、関数、ファイルに簡単にアクセスしたり使用したりできます。
  • 安全なハッシュ関数-FuelPHPは強力な暗号化ツールとパスワードハッシュ技術をサポートしています。 強力なPHPSecLibを使用して、暗号化、復号化、およびハッシュを処理します。
  • スキャフォールディング機能-スキャフォールディングは、データベース操作を構築するためのメタプログラミング手法です。 燃料の足場は非常に簡単です。 これにより、非常に簡単な手順で基本的なCRUDアプリケーションを取得できます。

以下の人気製品は、FuelPHP Frameworkを使用しています-

  • Matic Technology -オフショアカスタムソフトウェア開発ソリューションのグローバルプロバイダー。 Matic Technologiesでは、クライアントの要件に応じて、FuelPHPを通じて可能な限り最高のソリューションを提供します。
  • Kroobe -Kroobeはソーシャルネットワーキングの広告会社です。 Fuelは、非常に低い開発コストとサービスをKroobeチームに提供して、効率的なソリューションを実現しています。

FuelPHP-インストール

この章では、FuelPHPフレームワークをマシンにインストールする方法について説明します。 FuelPHPのインストールは非常に簡単で簡単です。 FuelPHPアプリケーションを作成するには2つの方法があります-

  • 最初の方法は、 Oil と呼ばれるFuelPHPツールを使用した*コマンドライン*インストールです。
  • 2番目の方法は、* Composerベース*のインストールです。 FuelPHPは、インストールとパッケージの依存関係の両方に Composer を使用するため、プロセスを続行する前に、コンポーザーがローカルにインストールされていることを確認してください。

次のセクションで、各方法を1つずつ詳しく見ていきましょう。

システム要求

インストールに移行する前に、次のシステム要件を満たしている必要があります。

Webサーバー(次のいずれか)

  • WAMP(Windows)
  • Microsoft IIS(Windows)
  • LAMP(Linux)
  • MAMP(Macintosh)
  • XAMP(マルチプラットフォーム)
  • Nginx(マルチプラットフォーム)
  • PHP組み込みの開発Webサーバー(マルチプラットフォーム)

ブラウザサポート(次のいずれか)

  • IE(Internet Explorer 8以降)
  • Firefox
  • グーグルクローム
  • サファリ
  • PHPの互換性*-PHP 5.3以降。 最大のメリットを得るには、最新バージョンを使用してください。

このチュートリアルでは、PHPの組み込み開発Webサーバーを使用します。 組み込みの開発Webサーバーは簡単に起動でき、Webサーバーと構成の世界の複雑さに触れることなく、FuelPHP Webアプリケーションの基本を理解するのに十分です。

コマンドラインインストール

FuelPHPのコマンドラインインストールは非常に簡単で、最大5分かかります。

オイルパッケージのインストール

Oilは、FuelPHPフレームワークによって提供される特別なパッケージ/コマンドであり、アプリケーションのインストール、開発、テストなど、FuelPHPアプリケーションの開発に必要な多くのタスクを実行します。

  • オイル*パッケージをインストールするには、シェルを開き、次のコマンドを実行します-
sudo curl https://get.fuelphp.com/oil | sh

このコマンドはcurlを使用して、オイルパッケージをダウンロードおよびインストールします。 このコマンドは、次の情報に類似した結果を表示し、最終的にオイルパッケージをインストールします。

 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   479  100   479    0     0    353      0  0:00:01  0:00:01 --:--:--   353

新しいプロジェクトを作成する

オイルを使用して新しいプロジェクトを作成するには、次のコマンドを使用します-

oil create <project_name>

次のコマンドを使用して、「HelloWorld」という名前の新しいプロジェクトを作成しましょう。

oil create HelloWorld

これで、次のような応答が表示され、最終的に単純なスケルトンFuelPHPアプリケーションを作成できます。

composer create-project fuel/fuel HelloWorld
Installing fuel/fuel (1.8.0.1)
   - Installing fuel/fuel (1.8.0.1)
      Loading from cache

Created project in HelloWorld

Loading composer repositories with package information
Updating dependencies (including require-dev)
   - Installing composer/installers (v1.3.0)
      Loading from cache
   - Installing fuelphp/upload (2.0.6)
      Loading from cache
   - Installing michelf/php-markdown (1.4.0)
      Loading from cache
   - Installing psr/log (1.0.2)
      Loading from cache
   - Installing monolog/monolog (1.18.2)
      Loading from cache
   - Installing phpseclib/phpseclib (2.0.0)
      Loading from cache
   - Installing fuel/core (1.8.0.4)
      Loading from cache
   - Installing fuel/auth (1.8.0.4)
      Loading from cache
   - Installing fuel/email (1.8.0.4)
      Loading from cache
   - Installing fuel/oil (1.8.0.4)
      Loading from cache
   - Installing fuel/orm (1.8.0.1)
      Loading from cache
   - Installing fuel/parser (1.8.0.4)
      Loading from cache
   - Installing fuel/docs (1.8.0.4)
      Loading from cache
   …………….
   …………….
   Writing lock file
   Generating autoload files

オイルバージョン

オイルが利用可能かどうかをテストし、バージョンを確認するには、次のコマンドを使用します-

$ cd HelloWorld
$ php oil -v

上記のコマンドは、次の結果を生成します-

Fuel: 1.8 running in "development" mode

オイルヘルプコマンド

オイルの基本的なヘルプドキュメントを取得するには、次のコマンドを使用します-

$ php oil help

上記のコマンドは、次の結果に似たヘルプドキュメントを表示します-

Usage:
   php oil [cell|console|generate|package|refine|help|server|test]
Runtime options:
   -f, [--force]    # Overwrite files that already exist
   -s, [--skip]     # Skip files that already exist
   -q, [--quiet]    # Supress status output
   -t, [--speak]    # Speak errors in a robot voice
Description:
   The 'oil' command can be used in several ways to facilitate quick development, help
   with testing your application and for running Tasks.
Environment:
   If you want to specify a specific environment oil has to run in, overload the
   environment variable on the commandline: FUEL_ENV=staging php oil <commands>
More information:
   You can pass the parameter "help" to each of the defined command to get
   information about that specific command: php oil package help
Documentation:
   http://docs.fuelphp.com/packages/oil/introl

今のところ、オイルを使用して燃料をインストールする方法のアイデアを持っています。 次のセクションで作曲家ベースのインストールを見ていきましょう。

Composerベースのインストール

Composerを使用してFuelPHPをインストールするには、次のコマンドを使用します。

$ composer create-project fuel/fuel --prefer-dist.

Gitリポジトリクローン

最新の開発バージョンをローカルgitリポジトリクローンとしてインストールするには、次のコマンドを使用します。

$ composer create-project fuel/fuel:dev-1.9/develop --prefer-source.

アプリケーションを実行する

プロジェクトディレクトリのパブリックフォルダーに移動し、次のコマンドで運用サーバーを使用してアプリケーションを実行します。

$ cd path/to/HelloWorld/public
$ php -S localhost:8080 index.php

次の応答が生成されます。

PHP 5.5.31 Development Server started at Sun May 21 12:26:10 2017
Listening on http://localhost:8080
Document root is/Users/workspace/php-fuel/HelloWorld/public
Press Ctrl-C to quit.

ここで、URL http://localhost:8080 を要求すると、次の結果が生成されます。

結果

ようこそページ

これは、開発環境でFuelPHPアプリケーションを実行する最も簡単な方法です。 実稼働環境でこの方法でアプリケーションを作成すると、セキュリティの問題に直面します。 推奨される方法は、仮想ホスト構成をセットアップすることです。 次のセクションでApache Webサーバーについて説明します。

仮想ホストのセットアップ

FuelPHPアプリケーションにアクセスするより安全な方法です。 仮想ホストをセットアップするには、Apache仮想ホストファイルをアプリケーションにリンクする必要があります。 イントラネットアプリケーションの場合、システムホストファイルURLを仮想ホストにリダイレクトします。

仮想ホストファイル

仮想ホストを開き、次の変更を追加します。

<VirtualHost *:80>
   ServerName hello.app
   DocumentRoot/path/to/public
   SetEnv FUEL_ENV “development”

   <Directory/path/to/public>
      DirectoryIndex index.php
      AllowOverride All
      Order allow,deny
      Allow from all
   </Directory>
</VirtualHost>

システムホストファイル

ここで、次のコマンドを使用してマシンにホストエントリを追加します。

sudo vi/etc/hosts

次に、ファイルの最後に次の行を追加します。

127.0.0.1 hello.app

すべての変更を有効にするには、Apacheサーバーを再起動して、URL * http://hello.app*を要求します。 FuelPHPホームページを作成します。

FuelPHP-アーキテクチャの概要

FuelPHPは、バトルテスト済みの Model-View-Controller アーキテクチャと* HMVC(Hierarchical MVC)*サポートに基づいています。 MVCは柔軟で階層化されたアプリケーション開発を提供しますが、HMVCはさらに一歩進んで、Webアプリケーションのウィジェット化を可能にします。

FuelPHPの強みは、アプリケーションを開発する特定の方法を強制しないことです。 シンプルで使いやすい標準構造を提供するだけです。 開発者は、FuelPHPが提供する定義済みの機能セットを自由に使用したり、必要なときにいつでも変更したりできます。 コア機能を含むFuelPHPが提供するすべての機能は、アプリケーションの要件に応じて変更できます。

モデル

モデルは、アプリケーションのビジネスエンティティです。 コントローラーとビューは、モデルの形式でデータを交換します。 モデルにより、ビジネスデータを統一的に表現できます。 これにより、データベースレイヤーがWebアプリケーションレイヤーと標準的な方法で対話できるようになり、データベースエンティティを選択、保存、編集、および削除するオプションが提供されます。

コントローラ

典型的なMVCアプリケーションは、コントローラーから開始します。 ユーザーがFuelPHP Webアプリケーションにリクエストを送信すると、アプリケーションはリクエストに関するすべての情報を収集し、それをコントローラーに送信します。 コントローラーは、要求されたページの必要なビジネスロジックを実行し、モデルの形式で処理されたデータとともに関連するビューを呼び出します。

View

ビューは、MVCアプリケーションのプレゼンテーションレイヤーです。 ビューは、モデルをユーザーに表示する方法を決定します。 高度なレイアウトへのシンプルなデータレンダリングをサポートしているため、Webサイトはすべてのページにわたってデザインを正規化できます。 Viewはテーマのサポートも提供します。これにより、アプリケーション全体の設計をすばやく変更できます。

プレゼンター

Presenterは、FuelPHPが提供する特別な機能です。 ControllerとViewの間の接着剤です。 コントローラーは、データベースからモデルを取得したり、ビューのデータを生成したりなど、低レベルの責任を共有できます。 コントローラは、Viewの代わりにPresenterを呼び出します。Viewは、Viewを呼び出します。 Presenterを使用すると、ビジネスロジックとプレゼンテーションレイヤーを完全に分離できます。

階層MVC

FuelPHPは、クライアント(ブラウザー)からの要求と同様に、1つのコントローラーを別のコントローラーから呼び出すオプションを提供します。 いずれかのコントローラーが別のコントローラーを呼び出すと、呼び出されたコントローラーは、クライアント(ブラウザー)にレンダリングするのではなく、呼び出し元のコントローラーに応答を返します。 これにより、Webアプリケーションの*ウィジェット化*が可能になります。 たとえば、コメントセクションは、スタンドアロンページとして表示することも、メイン(ブログ)ページのサブセクションとして表示することもできます。

モジュール

FuelPHPの顕著な特徴の1つは、Webアプリケーションのセクションをモジュールに変換し、異なるアプリケーション間で共有できることです。 たとえば、アプリケーション用に作成されたブログモジュールは、モジュールコードをソースアプリケーションからターゲットアプリケーションにコピーするだけで、別のアプリケーションで再利用できます。

新しいモジュールの作成は、メインアプリケーションの開発と同じくらい簡単です。 構造はメインモジュールに似ていますが、モジュールが別のフォルダーをコーディングする必要があるという唯一の例外があります。

パッケージ

FuelPHPには、パッケージと呼ばれる単一のユニットにコードを編成するオプションがあります。 パッケージには、Webアプリケーションに必要な1つ以上の機能を含めることができます。 たとえば、ORM、電子メールなどのデータベースコンポーネントをパッケージに整理し、必要なときにいつでも使用できます。

パッケージには、Webページまたは部分的なWebページが含まれないという意味で、モジュールとは異なります。 パッケージは、FuelPHPおよび他のPHPフレームワークで使用できます。

ワークフロー

FuelPHPのワークフローはシンプルで理解しやすいものです。 次の図に示されています。

ワークフロー

  • ユーザーがアプリケーションにリクエストを送信します。
  • コントローラーはリクエストを受信し、モデルと対話することで情報を収集します。モデルはデータベースと対話します。
  • コントローラーは、他のコントローラーにサブリクエストを送信して、他のコントローラーと対話することで情報を収集します。
  • コントローラーは、取得したモデルをビューに送信します。ビューは、プレゼンテーションを生成し、応答としてクライアントに送信します。
  • 場合によっては、コントローラーがコントロールをプレゼンターに渡すことがあります。 その場合、プレゼンターはモデルから情報を収集し、それをクライアントに送信します。 ここでは、プレゼンターは、データベースからモデルを取得する以外、ビジネスロジックを実行しません。

FuelPHP-シンプルなWebアプリケーション

この章では、FuelPHPフレームワークで簡単なアプリケーションを作成する方法を説明します。 前述のように、Fuelで新しいプロジェクトを作成する方法を知っています。 従業員の詳細の例を挙げることができます。

次のコマンドを使用して、Employeeという名前のプロジェクトを作成することから始めましょう。

oil create employee

コマンドを実行した後、*従業員*プロジェクトは次の*ファイル構造*で作成されます-

employee
├── CHANGELOG.md
├── composer.json
├── composer.lock
├── composer.phar
├── CONTRIBUTING.md
├── fuel
│   ├── app
│   │   ├── bootstrap.php
│   │   ├── cache
│   │   ├── classes
│   │   ├── config
│   │   ├── lang
│   │   ├── logs
│   │   ├── migrations
│   │   ├── modules
│   │   ├── tasks
│   │   ├── tests
│   │   ├── themes
│   │   ├── tmp
│   │   ├── vendor
│   │   └── views
│   ├── core
│   │   ├── base56.php
│   │   ├── base.php
│   │   ├── bootstrap.php
│   │   ├── bootstrap_phpunit.php
│   │   ├── classes
│   │   ├── composer.json
│   │   ├── config
│   │   ├── CONTRIBUTING.md
│   │   ├── lang
│   │   ├── phpunit.xml
│   │   ├── tasks
│   │   ├── tests
│   │   ├── vendor
│   │   └── views
│   ├── packages
│   │   ├── auth
│   │   ├── email
│   │   ├── oil
│   │   ├── orm
│   │   └── parser
│   └── vendor
│       ├── autoload.php
│       ├── composer
│       ├── fuelphp
│       ├── michelf
│       ├── monolog
│       ├── phpseclib
│       └── psr
├── LICENSE.md
├── oil
├── public
│   ├── assets
│   │   ├── css
│   │   ├── fonts
│   │   ├── img
│   │   └── js
│   ├── favicon.ico
│   ├── index.php
│   └── web.config
├── README.md
└── TESTING.md
42 directories, 21 files

アプリケーションの構造

FuelPHPフレームワークは、よく組織化されたアプリケーション構造を提供します。 アプリケーションの重要なファイルとフォルダのいくつかを確認しましょう。

  • fuel -すべてのPHPファイルが含まれています。
  • public -JavaScript、CSS、画像など、ブラウザから直接アクセスされるすべてのアセットが含まれます。
  • oil -コードの生成やアプリケーション内での対話型デバッグなどのコマンドラインタスクの実行に使用される実行可能ファイル。 オプションです。
  • fuel/app/ -アプリケーション固有のすべてのPHPファイルが含まれます。 モデル、ビュー、コントローラーが含まれています。
  • fuel/core/ -これは、Fuelフレームワーク自体が存在する場所です。
  • fuel/packages/ -すべての燃料パッケージが含まれています。 デフォルトでは、fuelには、oil、auth、ormの3つのパッケージが含まれます。 これらのパッケージは、必要でない限りロードされません。
  • fuel/app/config/ -すべてのアプリケーション関連の構成ファイルが含まれています。 メインのアプリケーション構成ファイルであるconfig.phpファイルはここにあります。
  • fuel/app/classes/ -アプリケーション固有のすべてのMVCベースのPHPファイルが含まれています。 コントローラー、モデル、ヘルパークラス、ライブラリなどが含まれています。
  • fuel/app/classes/controller/ -コントローラーはここに配置されます。
  • fuel/app/classes/model/ -モデルはここに配置されます。
  • fuel/app/views/ -ビューファイルが含まれています。 ビューには特定の命名規則はありません。

コントローラーを追加する

前述のように、FuelPHPはModel-View-Controller(MVC)開発パターンに基づいています。 MVCは、アプリケーションロジックをプレゼンテーションから分離するソフトウェアアプローチです。 MVCパターンでは、コントローラーが重要な役割を果たし、アプリケーション内のすべてのWebページをコントローラーで処理する必要があります。 デフォルトでは、コントローラーは fuel/app/classes/controller/ フォルダーにあります。 ここで独自のコントローラークラスを作成できます。

場所fuel/app/classes/controller/に移動し、employee.phpファイルを作成します。 新しいコントローラーを作成するには、FuelPHPが提供する次のように定義されたControllerクラスを拡張します。

employee.php

<?php
   class Controller_Employee extends Controller {
      public function action_home() {

        //functionality of the home page
         echo "FuelPHP-Employee application!";
      }
   }

これで、Employee Controllerを作成し、単純なテキストを出力するパブリックメソッドaction_homeを追加しました。

ルーティング

ルーティングは、WebページのURIを特定のコントローラーとアクションに解決します。 FuelPHPアプリケーションのすべてのWebページは、コントローラーを実際に実行する前にルーティングを実行する必要があります。 デフォルトでは、各コントローラーは次のURIパターンを使用して解決できます。

<controller>/<action>

どこで、

  • controller は、コントローラの名前から名前空間、従業員を引いたものです。
  • action は、メソッドの名前からaction_キーワード、homeを引いたものです

新しく作成されたコントローラーには、 http://localhost:8080/employee/home からアクセスでき、次の結果が生成されます。

結果

従業員申請

FuelPHP-設定

この章では、FuelPHPアプリケーションの設定方法を理解します。 デフォルトでは、構成ファイルは fuel/app/config フォルダー内に保存されます。 アプリケーションのメイン設定は fuel/app/config/config.php です。 設定は、PHPの関連配列を使用して指定されます。

概要

デフォルトでは、すべてのデフォルト構成ファイルは fuel/core/config フォルダーに定義されています。 デフォルトの設定を上書きするには、対応するキーを /fuel/app/config/config.php ファイルに追加し、値を変更します。 「ドット表記」を使用して、多次元配列を単純化できます。 たとえば、次の構成は同じ目的を果たします(指定されたパッケージをロードします)。

array("always_load" => array("packages" => array( ... ) ) );
always_load.packages = array( ... );

構成は目的ごとにグループ化し、データベース構成用のdb.php、パッケージ管理用のpackage.phpなどのさまざまなファイルを使用して指定できます。

構成形式のタイプ

FuelPHPは非常に柔軟で、構成を指定するためのさまざまな形式を提供します。 デフォルトの構成形式は、PHP配列を使用したPHPです。 他のオプションは-

*INI* -PHP言語自体を含む多くのソフトウェアでサポートされている単純なテキストベースの構成。
[group]
key = value
*YAML* -わかりやすく、インデントベースで、人間が読める構成管理。
group:
   key: value
*JSON* -わかりやすく、開発者が最も使用しているファイル形式。
{
   "group" :
   {
      "key": "value"
   }
}
*Memcached* -memcachedサーバーに構成を保存します。 memcachedサーバーの詳細は、メイン構成ファイル *fuel/app/config/config.php* で *config.memcached* エントリを使用して指定できます。
*DB* -RDBMSシステムに構成を保存します。 構成テーブルのテーブル構造は次のとおりです。
CREATE TABLE IF NOT EXISTS `config` (
   `identifier` char(100) NOT NULL,
   `config` longtext NOT NULL,
   `hash` char(13) NOT NULL,
   PRIMARY KEY (`identifier`)
)

データベースおよびテーブルの詳細は、_config.database_および_config.table_name_エントリを使用して構成ファイルで指定できます。

環境

環境は、異なる設定をロードすることにより、FuelPHPが異なるモードで動作することを可能にします。 FuelPHPは以下の環境をサポートしています。

  • 開発-\ Fuel :: DEVELOPMENTは開発モードを設定します
  • 生産-\ Fuel :: PRODUCTIONは生産モードを設定します
  • テスト-\ Fuel :: TESTはテストモードを設定します
  • ステージング-\ Fuel :: STAGINGはステージングモードを設定します

FuelPHPは、新しい環境の作成もサポートしています。 これにより、すべての開発者が独自の構成設定を持つことができ、アプリケーションのコーディングおよびテスト中にそれを有効にできます。 特定の環境の構成を追加するには、次のように、環境名(例:test)のフォルダーを作成し、新しく作成したフォルダー内に構成ファイルを配置します。

. ├── config.php
├── db.php
├── development
│   └── db.php
├── production
│   └── db.php
├── routes.php
├── staging
│   └── db.php
└── test
    └── db.php
4 directories, 7 files

環境を設定する

環境を設定するには3つの方法があります。

オプション1 *-Webサーバーの環境変数で環境を設定します。 Apache Webサーバーの *httpd.conf ファイルの仮想ホストセクションに次のコードを追加します。 .htaccess ファイルにも追加できます。

SetEnv FUEL_ENV production

オプション2 *-FuelPHPブートストラップファイル、 */fuel/app/bootstrap.php で環境を設定

Fuel::$env = (isset($_SERVER['FUEL_ENV']
  • オプション3 *-オイルを使用して環境を設定
$ env FUEL_ENV = production php oil -v

次の結果が生成されます。

Fuel: 1.8 running in "production" mode

FuelPHP-コントローラー

*Controllers* は、FuelPHPアプリケーションに送られる各リクエストを処理します。 FuelPHPによると、コントローラーは *fuel/app/classes/controller/* にあります。 最初に従業員コントローラーを作成しましょう。

employee.php

<?php
   class Controller_Employee extends Controller {
      public function action_home() {
         echo "FuelPHP-Employee application!";
      }

      public function action_index() {
         echo "This is the index method of employee controller";
      }
   }

コントローラーメソッド

コントローラーは、 action _メソッドの1つを使用してWeb要求を処理します。 アプリケーションの要件に応じて、_actionメソッドをいくつでも作成できます。 デフォルトの_actionメソッドは_action_index_です。 _action_index_メソッドは、次のURLのいずれかによって呼び出すことができます。

http://localhost:8080/employee/index
http://localhost:8080/employee/

結果

従業員管理者

*employee* アプリケーションで、新しい *action* メソッド_action_show_を作成しましょう。
<?php
   class Controller_Employee extends Controller {
      public function action_home() {
         echo "FuelPHP-Employee application!";
      }
      public function action_index() {
         echo "This is the index method of employee controller";
      }
      public function action_show() {
         echo "This is the show method of employee controller";
      }
   }

_action_show_メソッドは、次のURLを使用して呼び出すことができます。

http://localhost:8080/home/show

結果

メソッドの表示

before()メソッド

コントローラーで before メソッドを作成できます。 このメソッドは、すべての_action__メソッド呼び出しの前に実行されます。 そのメソッドが存在しないことが判明した場合は呼び出されません。 このメソッドは、ログインチェック、デフォルトのデータフェッチなどの一般的なアクションを記述するのに役立ちます。

_before_メソッドを作成して、簡単なテキストメッセージを出力してみましょう。

public function before() {
   echo "This message comes from <em>before()</em> method</br>";
}

アクション前のインデックスページ

アクション前のインデックス

アクション前のページを表示

アクションの前に表示

after()メソッド

  • after()メソッドは before()*メソッドに似ていますが、_action__メソッドが呼び出された後に実行されます。 _after()_メソッドは、_response_を入力として受け取り、_response_オブジェクトを返します。
public function after($response) {
   if ( ! $response instanceof Response) {
      $response = \Response::forge($response, $this->response_status);
   }
   return $response;
}

入力がNULLまたは応答オブジェクトではない場合、Responseのforgeメソッドを使用して新しい_Response_オブジェクトを作成し、それを返します。 Responseクラスについては、後続の章で詳しく説明します。

コントローラーの拡張

あるコントローラーを別のコントローラーから拡張できます。 基本的な構文は次のとおりです。

class Controller_Employee extends Controller_Welcome {
  //controller methods
}

これは、メソッドの共有に役立ちます。

コントローラーを生成

Fuelには、Oilコマンドを使用してコントローラーを生成するオプションがあります。 構文は次のとおりです。

構文

oil g controller <controller-name>

oil g controller sample

上記のコマンドを実行すると、次の応答が表示されます。

結果

Creating view:/path/to/project/fuel/app/views/template.php
Creating view:/path/to/project/fuel/app/views/sample/index.php
Creating controller:/path/to/project/fuel/app/classes/controller/sample.php

コントローラーのタイプ

FuelPHPは、さまざまな目的のために異なるタイプのコントローラーを提供します。 彼らは次のとおりです-

  • ベースコントローラー
  • テンプレートコントローラー
  • レストコントローラー
  • ハイブリッドコントローラー

ベースコントローラ

Controllerは、FuelPHPで使用可能なすべての異なるタイプのコントローラーのベースコントローラーです。 Web要求を処理するために必要なすべての基本機能を提供します。 要求、応答、セッションなどをサポートします。 特に指定がない限り、すべての例で使用します。

テンプレートコントローラー

テンプレートコントローラーは、ベースコントローラーの拡張機能です。 テンプレートのサポート、事前定義済みのbefore()およびafter()メソッドがあります。 基本的に、ヘッダー、フッター、サイドバーなどを含むレイアウトでビューをラップするために使用できます。 テンプレートコントローラーを作成するには、_Controller_Template_クラスを拡張する必要があります。 デフォルトでは、_Controller_Template_を拡張するクラスのすべてのメソッドでテンプレートを使用する必要があります。

次のように定義されています。

class Controller_Employee extends Controller_Template {
   public function action_index() {
     //add methods
   }
}

ビューの章でテンプレートコントローラーの詳細を説明します。

レストコントローラー

レストコントローラーは、ベースコントローラーの拡張機能です。 REST APIプログラミングの事前定義サポートがあります。 これにより、APIを簡単に構築できます。

休憩コントローラーを作成するには、_Controller_Rest_クラスを拡張する必要があります。 次のように定義されています。

class Controller_Employee extends Controller_Rest {
   public function action_index() {
     //add methods
   }
}

レストコントローラーの詳細については、Ajaxの章で説明します。

ハイブリッドコントローラー

ハイブリッドコントローラーは、RESTコントローラーとテンプレートコントローラーの両方の機能を単一のベースコントローラーで実行します。

FuelPHP-ルーティング

ルーティングマップは、特定のコントローラーのメソッドへのURIを要求します。 この章では、FuelPHPの*ルーティング*の概念について詳しく説明します。

設定

ルート設定ファイルは fuel/app/config/routes.php にあります。 デフォルトの routes.php ファイルは次のように定義されています-

<?php
   return array (
      '_root_'  => 'welcome/index',  //The default route
      '_404_'   => 'welcome/404',    //The main 404 route
      'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
   );

ここで、 _ root_ は定義済みのデフォルトルートであり、アプリケーションがルートパスで要求されたときに一致します。 http://localhost:8080/rootの値は、コントローラーと、一致したときに解決されるアクションです。 welcome/index は、_Controller_Welcome_コントローラーおよび_action_index_アクションメソッドに解決されます。 同様に、次の予約済みルートがあります。

  • root -URIが指定されていない場合のデフォルトルート。
  • 403 -HttpNoAccessExceptionが見つかった場合にスローされます。
  • 404 -ページが見つからない場合に戻ります。
  • 500 -HttpServerErrorExceptionが見つかった場合にスローされます。

シンプルなルーティング

ルートはリクエストURIと比較されます。 一致が見つかった場合、要求はURIにルーティングされます。 単純なルーティングは次のように説明されます。

return array (
   'about'  => 'site/about',
   'login' => 'employee/login',
);

ここで、 about はhttp://localhost:8080/aboutと一致し、コントローラー、Controller_Siteおよびアクションメソッド、action_aboutを解決します。

*login* はhttp://localhost:8080/loginと一致し、コントローラー、Controller_Loginおよびアクションメソッド、action_loginを解決します

高度なルーティング

ルートに正規表現を含めることができます。 燃料は、次の高度なルーティング機能をサポートしています-

  • *:any *-これはURIのその時点以降のすべてに一致し、「nothing」には一致しません
  • *:everything *-:anyに似ていますが、「nothing」にも一致します
  • *:segment *-これはURIの1つのセグメントのみに一致しますが、そのセグメントは何でもかまいません
  • *:num *-これは任意の数字と一致します
  • *:alpha *-これは、UTF-8を含むすべてのアルファ文字に一致します
  • *:alnum *-これは、UTF-8を含む任意の英数字と一致します

たとえば、次のルートはURI http://localhost:8080/hello/FuelPHP_に一致し、コントローラー、_Controller_Welcome、およびアクション_action_hello_を解決します

'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),

_Controller_Welcome_の対応するアクションメソッドは次のとおりです。

public function action_hello() {
   $this->name = Request::active()->param('name', 'World');
   $message = "Hello, " . $this->name;
   echo $message;
}

ここでは、Requestクラスを使用して、URLからnameパラメーターを取得しています。 名前が見つからない場合は、_World_をデフォルト値として使用しています。 _Request_および_Response_の章で_Request_クラスを学習します。

結果

コントローラーようこそ

HTTPメソッドアクション

FuelPHPは、HTTPメソッドのプレフィックス付きアクションに一致するルートをサポートします。 基本的な構文は次のとおりです。

class Controller_Employee extends Controller {
   public function get_index() {
     //called when the HTTP method is GET.
   }
   public function post_index(){
     //called when the HTTP method is POST.
   }
}

次のように、構成ファイルのHTTP動詞に基づいてURLをコントローラーとアクションにルーティングできます。

return array (
  //Routes GET/employee to/employee/all and POST/employee to/employee/create
   ‘employee’ => array(array('GET', new Route(‘employee/all')), array('POST',
      new Route(‘employee/create'))),
);

FuelPHP-リクエストとレスポンス

HTTP要求とHTTP応答は、あらゆるWebアプリケーションで重要な役割を果たします。 適切に処理するには、httpリクエストの完全な詳細を取得する必要があります。 処理されたら、処理されたデータをhttp応答を介してクライアントに送信する必要があります。

FuelPHPは、HTTPリクエストとHTTPレスポンスをそれぞれ読み書きするための優れた RequestResponse クラスを提供します。 この章では、 Request クラスと Response クラスの両方について学習します。

要求

典型的なWebアプリケーションでは、アプリケーションは現在のリクエストの詳細を解析する必要があります。 _Request_クラスは、アプリケーションによって処理される現在のリクエストを解析する簡単なメソッドを提供します。 _Request_は、httpクライアントとして機能することにより、新しいリクエストを作成するオプションも提供します。

新しいリクエストを作成すると、アプリケーションはアプリケーションの他の部分または完全に別のアプリケーションをリクエストして結果を表示できます。 この章で着信リクエストを解析する方法を学び、HMVCリクエストの章で新しいリクエストを作成する方法を学びましょう。

リクエストの解析

要求クラスには、http要求の詳細を取得するための3つのメソッドがあります。 それらは次のとおりです。

*active* -これは、現在のアクティブなhttp要求を返す静的メソッドです。
$currentRequest = Request::active();

param –指定されたパラメーターの値を返します。 2つの引数が含まれています。 現在のhttp要求でパラメーターが使用できない場合、最初の引数はパラメーター名で、2番目の引数は返す値です。

$param = Request::active()->param('employee_name', 'none');

params –すべてのパラメーターを配列として返すことを除いて、paramと同じです。

$params = Request::active()->params();

簡単なフォームを作成し、リクエストクラスを使用してフォームを処理しましょう。

  • ステップ1 *-従業員のコントローラーで新しいアクション_action_request_を作成します。
public function action_request() {
}
  • ステップ2 *-要求メソッドを呼び出して、現在の要求のすべてのパラメーターを取得します。
public function action_request() {
   $params = Request::active()->params();
}
  • ステップ3 *-取得したパラメーター配列をダンプします。
public function action_request() {
   $params = Request::active()->params();
   echo dump($params);
}
  • ステップ4 *-ルーティングを変更して、パラメーターをルート構成ファイル_fuel/app/config/routes.php_に含めます
'employee/request(/:name)?' => array('employee/request', 'name' => 'name'),

ここで、新しいアクション_http://localhost:8080/employee/request/Jon、_を要求すると、次の応答が表示されます。

解析リクエスト

応答

応答クラスは、http応答を作成するオプションを提供します。 デフォルトでは、ほとんどの状況で応答クラスを直接使用する必要はありません。 代わりに、View(次の章で学習します)を使用してhttp応答を作成します。 Viewは、開発者からhttp応答を非表示にし、基になる_Response_クラスを使用してクライアントに応答を送信します。 高度な状況では、_Response_クラスを直接使用し、完全なhttp応答を作成します。

応答を作成する

応答はヘッダーと本文で構成されます。 メインヘッダーはhttpステータスコードです。 HTTPステータスコードは、応答を記述するためにHTTPプロトコルで定義された標準コードです。 たとえば、ステータスコード200は、リクエストが成功したことを意味します。

応答クラスは、http応答を作成するための3つの引数を提供します。

  • $ body -HTTP応答の本文
  • $ status_code -http応答のステータスコード
  • $ headers -配列としてのオプションのヘッダー
$body = "Hi, FuelPHP";
$headers = array (
   'Content-Type' => 'text/html',
);
$response = new Response($body, 200, $headers);

次のように、従業員コントローラーに新しいアクション_action_response_を作成しましょう。

public function action_response() {
   $body = "Hi, FuelPHP";
   $headers = array ('Content-Type' => 'text/html',);
   $response = new Response($body, 200, $headers);

   return $response;
}

結果

アクションレスポンス

方法

応答クラスは、http応答を操作するための多くのメソッドを提供します。 それらは次のとおりです。

*forge* -上記の応答クラスコンストラクターと同じです。
return Response::forge("Hi, FuelPHP", 404);
*redirect* -応答を送信する代わりにURLにリダイレクトするオプションを提供します。 次の引数が含まれています。
*a.url* -宛先URL b。 method-リダイレクトメソッド。 _location_(デフォルト)および_refresh c_。 redirect_code-HTTPステータスコード。 デフォルト値は302です。
//use a URL
Response::redirect('http://some-domain/index', 'refresh');

//or use a relative URI
Response::redirect('employee/list');
*redirect_back* -前のページにリダイレクトすることを除いて、リダイレクト方法に似ています。 バックページが利用できない場合、リダイレクトページを指定できます。
//If there is no back page, go to the employee list page
Response::redirect_back('/employee/list', 'refresh');
*set_status* -HTTPステータスコードを設定するオプションを提供します。
$response = new Response();
$response->set_status(404);
*set_header* -httpヘッダーを設定するオプションを提供します。
$response = new Response();
$response->set_header('Content-Type', 'application/pdf');

//replace previous value using third arguments
$response->set_header('Content-Type', 'application/pdf', 'text/plain');
*set_headers* -配列を使用して複数のヘッダーを設定するオプションを提供することを除いて、 *set_header* と同じです。
$response = new Response();
$response->set_headers (array
   'Content-Type' => 'application/pdf',
   'Pragma' => 'no-cache',
));
*get_header* -以前に設定されたヘッダーの詳細を取得できます。
$response = new Response();
$response->set_header('Pragma', 'no-cache');

//returns 'no-cache'
$header = $response->get_header('Pragma');

//returns array('Pragma' => 'no-cache')
$header = $response->get_header();
*body* -HTTP応答の本文を設定するオプションを提供します。
$response = new Response();
$response->body('Hi, FuelPHP');

//returns 'Hi, FuelPHP'
$body = $response->body();
*send_headers* -要求されたクライアントにヘッダーを送信します。 FuelPHPはこのメソッドを使用して、応答をクライアントに送信します。 通常、このメソッドを使用する必要はありません。
$response->send_headers();

送信-ヘッダーがhttp応答で制限される場合があることを除いて、send_headersと同じです。

//send the headers as well
$response->send(true);

//only send the body
$response->send(false);
$response->send();

FuelPHP-ビュー

*View* は、MVCアプリケーションのプレゼンテーションレイヤーです。 プレゼンテーションロジックからアプリケーションロジックを分離します。 コントローラーがHTML、CSS、またはその他のコンテンツを生成する必要がある場合、コントローラーはタスクをビューエンジンに転送します。

FuelPHPは、ビューエンジンに必要なすべての機能を備えたシンプルで柔軟なクラスViewを提供します。 ビュークラスは、ビューファイルのレンダリングをサポートします。 ビューファイルは、PHP命令が埋め込まれたHTMLページです。 ビューファイルの変数は、Viewクラスを使用してPHP配列として設定し、配列のキーを使用してビューファイルで参照できます。 Viewクラスの重要なメソッドのいくつかをチェックしましょう。

フォージ

  • 目的-新しいViewオブジェクトを作成します
  • パラメータ-以下はパラメータです
  • $ file -ビューフォルダーfuel/app/viewsに対するビューファイルの相対パス
  • $ data -値の配列
  • $ filter -自動エンコーディングを設定します。デフォルトはメイン設定ファイルの設定です
  • Returns -ビューのインスタンス

例えば、

$view = View::forge ('path/to/view', array(
   'title' => "Show employee,
   'employees' => $employees,
));

auto_filter

  • 目的-データをエンコードするかどうかを設定する
  • パラメータ-以下はパラメータです
  • $ filter -true/false
  • Returns -現在のビューオブジェクト

例えば、

$view->auto_filter();
$view = $view->auto_filter(false);

set_filename

  • 目的-ビューファイルを設定または変更できます。
  • パラメータ-以下はパラメータです-
  • $ file -viewsフォルダー、fuel/app/viewsに相対的なビューファイルへのパス
  • Returns -現在のビューオブジェクト

例えば、

$view = new View();
$view>set_filename('path/to/view');

set

  • 目的-1つ以上の変数の値を設定する
  • パラメータ-以下はパラメータです
  • $ key -変数名または値の配列
  • $ value -値/null
  • $ filter -エンコーディング設定、true/false
  • Returns -現在のビューオブジェクト

例えば、

$view = new View();
$view->set(array('name' => 'Jon'));

set_global

set_globalは set に似ていますが、すべてのビューに適用され、すべてのビューから変数にアクセスできる点が異なります。 これは静的メソッドです。

View::set_global('name', 'Jon', false);

set_safe

  • 目的-安全なエンコーディングをオンにして1つ以上の変数の値を設定します。
  • パラメータ-以下はパラメータです-
  • $ key -変数名または値の配列
  • $ value -値/null
  • Returns -現在のビューオブジェクト

例えば、

$view = new View();
$view->set_safe(array('name' => 'Jon'), null);

get

  • 目的-1つ以上の変数の値を取得する
  • パラメータ-以下はパラメータです
  • $ key -変数名
  • $ default -キーが見つからない場合に返されるデフォルト値
  • 戻り値-入力キーの値

例えば、

$view = new View();
$name = $view>get('name'); //name = 'Jon'

レンダリングする

  • 目的-ビューファイルをローカル変数とグローバル変数にマージして文字列にレンダリングします
  • パラメータ-以下はパラメータです-
  • $ file -ビューのファイル名
  • Returns -文字列としてレンダリングされたビューファイル

例えば、

$html = View::forge()->render('/path/to/view');

ビューを作成する

ビューを理解するために、コントローラーの_action_show_アクション_Controller_Employee_を変更しましょう。

employee.php

<?php
   class Controller_Employee extends Controller {
      public function action_show() {
         return View::forge('employee/show');
      }
   }

次に、_fuel/app/views_にあるビューディレクトリにフォルダemployeeを作成します。 次に、従業員フォルダー内に_show.php_ファイルを作成し、次のコードを追加します。

show.php

<h3> My first view </h3>

ここで、URL _http://localhost:8080/employee/show_を要求すると、次の結果が生成されます。

ビューの表示

ビューにデータを渡す

前述のように、Viewメソッドを使用してビューにデータを渡すことができます。 以下は簡単な例です。

employee.php

class Controller_Employee extends Controller {
   public function action_show() {
      $data = array();//stores variables going to views
      $data['name'] = ‘Jon’;
      $data[‘job’] = ‘Designer’;

     //assign the view to browser output
      return View::forge('employee/show', $data);
   }
}

次に、 view ファイルに変更を追加します。

show.php

<html>
   <body>
      Hello, <?php echo $name; ?>.
      Your job is, <?php echo $job; ?>.
   </body>
</html>

URLを要求した後、それは次のように名前とジョブを表示します-

ビュー要求の受け渡し

ビューフィルター

ビューは出力エンコーディングを使用して、必要なものを渡します。 フィルタリングされていないデータを渡したい場合は、setメソッドを使用できます。

employee.php

class Controller_Employee extends Controller {
   public function action_show() {
      $view = \View::forge('employee/show');
      $view->set('name', 'Jon', true);
      $view->set('job', '<em>Designer</em>', false);
      return $view;
   }
}

URLをリクエストすると、次のようにジョブの詳細が強調スタイルで表示されます。

フィルターの表示

ネストされたビュー

FuelPHPはネストされたビューをサポートします。 ネストされたビューでは、ビューに1つ以上のビューを含めることができます。 別のビューにビューを設定するには、次のようにrenderメソッドを使用できます。

employee.php

class Controller_Employee extends Controller {
   public function action_nestedview() {

     //assign variables
      $data = array();
      $data['title'] = 'Home';
      $data['name'] = 'Jon';
      $data['job'] = 'Designer';
      $views = array();
      $views['head'] = View::forge('head', $data)->render();
      $views['content'] = View::forge('employee/show', $data)->render();
      return View::forge('layout', $views, false)->render();
   }
}

fuel/app/views/layout.php

<html>
   <head>
      <?php echo $head; ?>
   </head>

   <body>
      <?php echo $content; ?>
   </body>
</html>

fuel/app/views/head.php

<title>
   <?php echo $title; ?>
</title>

fuel/app/views/employee/show.php

Hello, <?php echo $name; ?>.
Your job is, <?php echo $job; ?>.

URL _http://localhost:8080/employee/nestedview_を要求し、ソースビューを確認すると、次のコードが表示されます。

<html>
   <head>
      <title>Home</title>
   </head>

   <body>
      Hello, Jon.
      Your job is, Designer.
   </body>
</html>

テンプレートコントローラー

FuelPHPは、組み込みのレイアウト概念を持つコントローラーController_Templateを提供します。 レイアウトの概念は、コントローラーの* before()および after()*メソッドを使用して行われます。 テンプレートコントローラーを使用するには、Controllerの代わりにController_Templateを使用してコントローラーを拡張する必要があります。 after()/before()メソッドを使用している間、parent
beforeとparent :: afterを呼び出す必要があります。そうしないと、テンプレートが壊れます。
<?php
   class Controller_Test extends Controller_Template {
      public function before() {
         parent::before();
        //do stuff
      }

      public function after($response) {
         $response = parent::after($response);

        //do stuff
         return $response;
      }
   }

template.php

これは、Fuelのデフォルトのテンプレートファイルです。 テンプレートファイルは、JS、CSS、HTMLを呼び出し、ビューパーシャルを呼び出すために使用されます。 fuel/app/views/ にあります。 テンプレートは、ヘッダー、フッター、サイドバーなどを含むレイアウトでビューをラップするために使用されます。 次のように、アクションメソッドで$ template変数を使用してデフォルトのテンプレートを変更できます。

fuel/app/classes/controller/test.php

<?php
   class Controller_Test extends Controller_Template {
      public $template = 'template_test';
      public function action_index() {
         $this->template->title = 'Example Page';
         $this->template->content = View::forge('test/index');
      }
   }

fuel/app/views/template_test.php

<!DOCTYPE html>
<html>
   <head>
      <meta charset = "utf-8">
      <title><?php echo $title; ?></title>
      <?php echo Asset::css('bootstrap.css'); ?>
   </head>

   <body>
      <div>
         <?php echo $content; ?>
      </div>
   </body>
</html>

fuel/app/views/test/index.php

<h3>My Test page</h3>

ここで、URL _http://localhost:8080/test_を要求すると、次の結果が生成されます。

結果

<!DOCTYPE html>
<html>
   <head>
      <meta charset = "utf-8">
      <title>Example Page</title>
      <link type = "text/css" rel = "stylesheet"
         href = "http://localhost:8080/assets/css/bootstrap.css?1464964766"/>
   </head>

   <body>
      <div>
         <h3>My Test page</h3>
      </div>
   </body>
</html>

ビューページの生成

FuelのOilコンソールを使用して、ビューページを生成できます。 基本的な構文は次のとおりです。

oil g controller <controller-name> <page1> <page2> ..

ホームページとログインページで管理コントローラーを生成するには、次のコマンドを使用します。

oil g controller admin home login

結果

Creating view:/path/to/app/fuel/app/views/admin/home.php
Creating view:/path/to/app/fuel/app/views/admin/login.php
Creating controller:/path/to/app/fuel/app/classes/controller/admin.php

FuelPHP-プレゼンター

FuelPHPは、ビューを生成するためにコントローラーの後に追加のレイヤーを提供します。 コントローラーが入力を処理し、ビジネスロジックを完了すると、コントロールを Presenter に送信します。これは、データベースからのデータの取得、ビューデータの設定などの追加ロジックを処理し、呼び出しますViewオブジェクト。

次のようにPresenterクラスを使用してビューをレンダリングできます-

fuel/app/classes/controller/employee.php

public Controller_Employee extends Controller {
   public function action_welcome() {
      return Presenter::forge('employee/hello');
   }
}

プレゼンタークラスのデフォルトの場所は_fuel/app/classes/presenter/_です。 以下は簡単な例です。

fuel/app/classes/presenter/employee/hello.php

<?php
   class Presenter_Employee_Hello extends Presenter {
      public function view() {
         $this->name = Request::active()->param('name', 'World');
      }
   }

上記のプレゼンタークラスのビューファイルは、_views_フォルダーに関連する_employee/hello.php_に解決されます。これは指定どおりです。

fuel/app/views/employee/hello.php

<h3>Hi, <?php echo $name; ?></h3>

最後に、次のように、従業員のウェルカムアクションに一致するようにルートを変更します-

fuel/app/config/routes.php

'employee/hello(/:name)?' => array('employee/welcome', 'name' => 'hello'),

ここで、_http://localhost:8080/employee/hello/Jon_というURLをリクエストすると、次の結果が表示されます。

結果

プレゼンタービュー

FuelPHP-モデルとデータベース

モデルは、FuelPHP Webフレームワークで重要な役割を果たします。 アプリケーションのビジネスエンティティを表します。 これらは、顧客から提供されるか、バックエンドデータベースから取得され、ビジネスルールに従って操作され、データベースに保持されます。 この章では、モデルとバックエンドシステムとの相互作用について学習します。

モデルを作成する

FuelPHPでは、モデルは組み込みのModelクラスを拡張する単純なPHPクラスです。 デフォルトでは、モデルはコントローラーと同様にModel_の接頭辞が付いている場合があり、 fuel/app/classes/model/ フォルダーに配置する必要があります。 基本的な従業員モデルを作成し、作業を進めながら拡張してみましょう。

fuel/app/classes/model/employee.php

<?php
   namespace Model;

   class Model_Employee extends \Model {
      public static function fetchAll() {
        //Code to fetch employee from database
      }
   }

モデルにアクセスする

モデルが定義されると、次のようにコントローラに含めるだけで、任意のコントローラで自由に使用できます。

use \Model\Employee;

class Controller_Employee extends Controller {
   public function action_index() {
      $employees = Employee::fetchAll();
   }
}

データベースの概要

FuelPHPは、データベースからデータを取得するための独自のデータベース抽象化レイヤーを提供します。 これは、基本的なORMと高度なORMベースのツールの両方を提供します。 基本的なツールキットは、DB、DBUtil、およびQuery_Builerベースのクラスで構成されています。 高度なツールキットはOrmです。 Ormツールキットは、ベースツールキットから派生し、個別のパッケージとしてバンドルされています。

データベース構成

FuelPHPはデータベース設定をメイン設定ファイルから分離し、ファイルは fuel/app/config/db.php です。 環境ごとに個別の設定をサポートします。 現在、FuelPHPはMySQL、MySQLi、およびPDOドライバーをサポートしています。 サンプル設定は次のとおりです-

<?php
   return array (
      'development' => array (
         'type'           => 'mysqli',
         'connection'     => array (
            'hostname'    => 'localhost',
            'port'        => '3306',
            'database'    => 'finddevguides_fueldb',
            'username'    => 'root',
            'password'    => 'password',
            'persistent'  => false,
            'compress'    => false,
         ),

         'identifier'     => '`',
         'table_prefix'   => '',
         'charset'        => 'utf8',
         'enable_cache'   => true,
         'profiling'      => false,
         'readonly'       => false,
      ),
   )

DBベースのツールキット

  • DBクラス*は、アプリケーションからデータベースにアクセスする最も簡単なオプションです。 データベースクエリを作成し、ターゲットデータベースに対して実行し、最終的に結果を取得するオプションを提供します。 _DB_クラスは、次のクラスと対話し、包括的なデータベースAPIを提供します。
  • Database_Connection -データベースと対話するシングルトンおよびメインクラス
  • Database_Query -SQLクエリを実行して結果を取得するためのベース、具象クラス
  • Database_Query_Builder -SQLクエリを構築するためのベース、抽象クラス
  • Database_Query_Builder_Join -SQL結合を構築するクラス
  • Database_Query_Builder_Where -SQLクエリ条件を構築する抽象クラス
  • Database_Query_Builder_Select -SQL選択クエリを構築する具体的なクラス
  • Database_Query_Builder_Insert -SQL挿入クエリを構築する抽象クラス
  • Database_Query_Builder_Update -SQL更新クエリを作成する抽象クラス
  • Database_Query_Builder_Delete -SQL削除クエリを作成する抽象クラス

次の図は、クラスとクラスによって提供されるメソッドとの関係を示しています。

クラスとメソッド

DB API

このセクションのDBクラスで利用可能な最も重要なメソッドを学びましょう。

実例

  • 目的-新しい_Database_Connection_インスタンスを作成して返します。
  • パラメータ-
  • $ db -構成ファイルで定義されたデータベース接続名、オプション。
  • 戻り値-_Database_Connection_オブジェクトを返します

例えば、

$db = DB::instance();
$db = DB::instance('test');

問い合わせ

  • 目的-提供されたSQLステートメントを準備し、データベースからデータを挿入、更新、削除、またはフェッチするために使用できるDatabase_Queryオブジェクトを返します。
  • パラメータ-
  • $ query -SQLステートメント。プレースホルダーを含めることができます。
  • $ type -SQLタイプ、オプション(DB :: SELECT、DB :: INSERT、DB :: UPDATEおよびDB :: DELETE)
  • 戻り値-_Database_Query_オブジェクトを返します

例えば、

$query = DB::query('SELECT * FROM 'employees'');

last_query

  • 目的-最後に実行されたクエリを取得する
  • パラメータ-なし
  • 戻り値-最後に実行されたクエリを返します

例えば、

$employees = DB::Select('Select * from 'employee'');
$sql = DB::last_query();

選択する

  • 目的-クエリの選択部分を生成する
  • パラメータ-
  • $ columns -データベースの列名のリスト
  • 戻り値-Database_Query_Builder_Selectオブジェクトを返します

例えば、

$query = DB::select();             //Select *
$query = DB::select('id', 'name');//Select id, name

select_array(DB)

selectと似ていますが、列を配列として送信できる点が異なります。

$query = DB::select_array(array('id', 'name'));//Select id, name

インサート

  • 目的-クエリの挿入部分を生成する
  • パラメータ-
  • $ table_name -データベーステーブルの名前。
  • $ columns -テーブル列の配列
  • 戻り値-Database_Query_Builder_Insertオブジェクトを返します

例えば、

$query = DB::insert('employee'); //Insert into employee
$query = DB::insert('employee', array('id', 'name'));//Insert into employee (id, name)

更新

  • 目的-クエリの更新部分を生成する
  • パラメータ-
  • $ table_name -データベーステーブルの名前
  • 戻り値-Database_Query_Builder_Updateオブジェクトを返します

例えば、

$query = DB::update('employee');//update `employee`

削除する

  • 目的-クエリの削除部分を生成する
  • パラメータ-
  • $ table_name -データベーステーブルの名前
  • 戻り値-Database_Query_Builder_Deleteオブジェクトを返します

例えば

$query = DB::delete('employee'); //delete from 'employee'

クエリAPI

*Database_Query* は、データベース接続を設定し、クエリを実行し、連想配列またはオブジェクトとして結果を取得するオプションを提供します。 Database_Queryクラスが提供するメソッドを見てみましょう。

set_connection

  • 目的-クエリを実行するデータベース(データベース接続の詳細)を設定する
  • パラメータ-$ db-データベース接続名
  • 戻り値-_Database_Query_オブジェクトを返します

例えば、

$query = DB::query('DELETE * FROM employee', DB::DELETE);
$query->set_connection('2nd-db');

param

  • 目的-Queryオブジェクトで定義されたパラメーターの値を設定する
  • パラメータ-
  • $ param -パラメーター名;
  • $ value -パラメータの値
  • 戻り値-_Database_Query_オブジェクトを返します

例えば、

//set some variables
$table = 'employee';
$id = 1;
$name = 'Jon';

//don't use
$query = DB::query('SELECT *FROM '.$table.'. WHERE id = '.$id.' AND name = "'.$name.'"');

//but use
$query = DB::query('SELECT* FROM :tablename WHERE id = :id AND name = :name');
$query->param('tablename', 'employee');
$query->param('id', $id);
$query->param('name', $name);

同様の方法

*parameters* は、複数の値を一度に与えるオプションを提供することを除いて、同様のオブジェクトです。
$query->parameters (array(
   'tablename' => $table,
   'id' => $id,
   'name' => $name
});

bind

  • 目的-Queryオブジェクトで定義されたパラメーターに変数を設定する
  • パラメータ-
  • $ param -パラメーター名
  • $ var -パラメータをバインドする変数
  • 戻り値-_Database_Query_オブジェクトを返します

例えば、

//bind a query parameter
$table = 'employee';
$query = DB::query('DELETE *FROM :tablename', DB::DELETE);
$query->bind('tablename', $table);

//update the variable
$table = 'employee_salary';

//DELETE* FROM `employee_salary`;
$sql = $query->compile();

コンパイル

  • 目的-SQLクエリに定義されたクエリオブジェクトをコンパイルするには
  • パラメータ-
  • $ db -接続文字列、オプション
  • 返品-

例えば、

//assign a value to a query parameter
$table = 'employee';
$query = DB::query('DELETE *FROM :tablename', DB::DELETE);
$query->param('tablename', $table);

//compile the query, returns: DELETE* FROM employee
$sql = $query->compile();

実行する

  • 目的-Queryオブジェクトで定義されたクエリを実行し、結果を返す
  • パラメータ-
  • $ db -データベース接続名
  • 戻り値-結果を返します

例えば、

//assign a value to a query parameter
$table = 'employee';
$query = DB::query('DELETE * FROM :tablename', DB::DELETE);
$query->param('tablename', $table);

//execute the query
$query->execute();

as_assoc

  • 目的-戻り値の型をオブジェクトではなく連想配列として設定する
  • パラメータ-なし
  • 戻り値-現在のオブジェクトを返します

例えば、

$query = DB::query('SELECT * FROM employee', DB::SELECT);
$result = $query->as_assoc()->execute();
foreach ($result as $row) {
   echo $row['id'];
}

as_object

  • 目的-戻り値の型を連想配列ではなくオブジェクトとして設定する
  • パラメータ-なし
  • 戻り値-現在のオブジェクトを返します

例えば、

$query = DB::query('SELECT * FROM employee', DB::SELECT);
$result = $query->as_object()->execute();
foreach ($result as $row) {
   echo $row->id;
}

//have ORM model objects return instead
$result = $query->as_object('Model_Employee')->execute();

クエリビルダーAPI

クエリビルダー_(Query_Builder)ベースのクラスは、SQLクエリを動的に構築するためのオプションを提供します。 4つのクラスがあり、それぞれが(Query_Builder_Select)を選択し、(Query_Builder_Insert)を挿入し、(Query_Builder_Update)を更新し、(Query_Builder_Delete)_クエリを削除します。 これらのクラスは_Query_Builder_Where_クラス(条件を生成するオプション)から派生し、それ自体はすべてのクラスのベースである_Query_Builder_から派生します。

Query_Builderクラスが提供するメソッドを見てみましょう。

選択する

  • 目的-選択クエリの列を生成します。
  • パラメータ-
  • $ columns -列のリスト、オプション
  • 戻り値-現在のインスタンスを返します

例えば、

$query = DB::select('name') //select `name`
$query = DB::select(array('first_name', 'name'))//select `first_name` as `name`

from

  • 目的-選択クエリのテーブル詳細を生成するには
  • パラメータ-
  • $ tables -テーブルのリスト
  • 戻り値-現在のインスタンスを返します

例えば、

$query = DB::select('name')->from('employee')//select `name` from `employee`

どこで

  • 目的-クエリの選択、挿入、更新の条件を生成するには
  • パラメータ-
  • $ column -列名または配列($ column、$ alias);
  • $ op -論理演算子、=、!=、IN、BETWEEN、LIKE、オプション。
  • $ value -列の値
  • 戻り値-現在のインスタンスを返します

例えば、

$query = DB::select('name')->from('employee')
$query = $query->where('name', '=', 'Jon');
//select `name` from `employee` where `name` = `Jon`;

同様の方法

同様のメソッドは、where_open()、and_where_open()、or_where_open()、where_close()、and_where_close()、or_where_close()です。 条件の周りに追加のキーワードと括弧を追加することを除いて、where()メソッドに似ています。 以下はサンプルコードです。

$query = DB::select('*')->from('employee');
$query->where('email', 'like', '%@gmail.com');
$query->or_where_open();
$query->where('name', 'Jon');
$query->and_where('surname', 'Peter');
$query->or_where_close();
//SELECT * FROM `employee` WHERE `email` LIKE "%gmail.com" OR
   (`name` = "Jon" AND `surname` = "Peter")

join

  • 目的-選択クエリのテーブル結合を生成するには
  • パラメータ-
  • $ table -テーブル名または配列($ table、$ alias);
  • $ type -結合タイプ(LEFT、RIGHT、INNERなど)
  • 戻り値-現在のインスタンスを返します

$query = DB::select('name')->from('employee')->join('employee_salary')
//select `name` from `employee` JOIN `employee_salary`

on

  • 目的-選択クエリで結合の条件を生成するには
  • パラメータ-
  • $ c1 -テーブル名または配列内のエイリアスを含むテーブル名。
  • $ op -論理演算子。
  • $ c2 -テーブル名または配列内のエイリアスを含むテーブル名
  • 戻り値-現在のインスタンスを返します

例えば、

$query = DB::select('name')->from('employee')->join('employee_salary')
$query = $query->on('employee.employee_id', '=', 'employee_salary.employee_id')
//select `name` from `employee` JOIN `employee_salary` on
//`employee.employee_id` = `employee_salary.employee_id`

同様の方法

関連するメソッドはand_on()およびor_on()です。 追加のキーワードと結合を囲む括弧を追加することを除いて、on()に似ています。

group_by

  • 目的-クエリによってグループを生成するには
  • パラメータ- $ columns -結果をグループ化する列名
  • 戻り値-現在のインスタンスを返します

例えば、

$query = DB::select('name')->from('employee')
$query = $query->group_by('name');
//select `name` from `employee` group by `name`

持っている

  • 目的-SQLクエリの条件によってグループを生成するには
  • パラメータ- $ column -列名または配列($ column、$ alias); $ op -論理演算子、=、!=、IN、BETWEEN、LIKE、オプション。 $ value -列の値
  • 戻り値-現在のインスタンスを返します

$query = DB::select('name')->from('employee')
$query = $query->group_by('name');
$query = $query->having('name', '!=', 'Jon');
//select `name` from `employee` group by `name` having `name` != `Jon`

同様の方法

同様のメソッドは、having_open()、and_having_open()、or_having_open()、having_close()、and_having_close()、or_having_close()です。 条件の周りに追加のキーワードとブラケットを追加することを除いて、having()メソッドに似ています。

リセット

  • 目的-クエリをリセットするには
  • パラメータ-なし
  • 戻り値-現在のインスタンスを返します

例えば、

$query = DB::select('name')->from('employee')
$query->reset()
$query = DB::select('name')->from('employee_salary')
//select `name` from `employee_salary`

DBUtilクラス

DBUtilクラスは、日常的なデータベース操作を管理および実行するオプションを提供します。 重要な方法のいくつかは次のとおりです-

  • set_connection-デフォルトの接続を設定します
DBUtil::set_connection('new_database');
  • create_database-データベースを作成します。
DBUtil::create_database('my_database');
  • drop_database-データベースを削除します。
DBUtil::drop_database('my_database');
  • table_exists-指定されたテーブルが存在するかどうかを確認します。
if(DBUtil::table_exists('my_table')) {
  //Table exists
} else {
  //Table does NOT exist, create it!
}
  • drop_table-テーブルを削除します。
DBUtil::drop_table('my_table');
  • create_table-テーブルを作成します。
\DBUtil::create_table (
   'users',
   array (
      'id' => array('type' => 'int', 'auto_increment' => true),
      'name' => array('type' => 'text'),
   ),
);

Ormツールキット

FuelPHPは、人気のある Active record pattern に基づいたORMコンセプトを使用した高度なデータベースレイヤーを提供します。 ツールキットはアプリケーションに含まれていますが、デフォルトでは構成されていません。 パッケージとしてバンドルされており、パッケージ名はormです。 メイン構成ファイル fuel/app/config/config.php に次の構成を追加して、ormツールキットをロードできます。

'always_load' => array (
   'packages' => array (
      'orm',
   ),
),

モデルを作成する

Ormは、基本モデルクラスOrm \ Modelを提供します。 ORM機能を使用するには、ormモデルでモデルを拡張する必要があります。 以下はサンプルコードです。

class Model_Employee extends Orm\Model {}

設定

Ormは、ORM機能を使用するようにモデルを構成するための設定セットを提供します。 彼らは次のとおりです-

*connection* -接続名を指定するには、モデルに静的な__connection_プロパティを設定します。
class Model_Employee extends Orm\Model {
   protected static $_connection = "production";
}

テーブル名-モデルに静的な__table_name_プロパティを設定して、バックエンドテーブルのテーブル名を指定します。

class Model_Employee extends Orm\Model {
   protected static $_table_name = 'employee';
}
*primary key* -モデルに静的な__primary_key_プロパティを設定して、バックエンドテーブルの主キーを指定します。
class Model_Employee extends Orm\Model {
   protected static $_primary_key = array('id');
}
*Columns* -モデルに静的_propertiesプロパティを設定して、バックエンドテーブルの列を指定します。 data_type、label、validation、form elememtsなどをサポートしています。
class Model_Employee extends Orm\Model {
   protected static $_properties = array (
      'id',
      'name' => array (
         'data_type' => 'varchar',
         'label' => 'Employee Name',
         'validation' => array (
            'required',
            'min_length' => array(3),
            'max_length' > array(80)
         ),

         'form' => array (
            'type' => 'text'
         ),
      ),

      'age' => array (
         'data_type' => 'int',
         'label' => 'Employee Age',
         'validation' => array (
            'required',
         ),

         'form' => array (
            'type' => 'text'
         ),
      ),
   );
}

条件-静的な__conditions_プロパティを設定して、オプションと条件を設定します。

class Model_Employee extends Orm\Model {
   protected static $_conditions = array (
      'order_by' => array('id' => 'desc'),
      'where' => array (
         array('is_active', > true),
      ),
   );
}

オブザーバー-_Orm_は、特定のイベントに動作を追加するオブザーバーベースのイベントシステムを提供します。 動作を追加するには、最初にモデルでobservers_プロパティを設定します。 次に、動作をクラスとして定義し、イベントとともにobservers_プロパティに設定します。 イベントが指定されていない場合、すべてのイベントに対して動作が呼び出されます。 複数の動作も指定できます。

class Model_Employee {
   protected static $_observers = array (
      'example', //will call Observer_Example class for all events
      'Orm\\Observer_CreatedOn' => array (
         'events' => array('before_insert'),
        //will only call Orm\Observer_CreatedOn at before_insert event
      )
   );
}

作成する

モデルを構成したら、すぐにメソッドの使用を開始できます。 _Orm_は、オブジェクトをデータベースに保存する_save_メソッドを提供します。 次のように構成されたプロパティを使用してデータを設定できます-

//option 1
$new = new Model_Employee();
$new->name = 'Jon';
$new->save();

//option 2, use forge instead of new
$new = Model_Employee::forge();
$new->name = 'Jon';
$new->save();

//option 3, use array for properties
$props = array('name' => 'Jon');
$new = Model_Employee::forge($props);
$new>save();

Read

Ormは、データベースからデータを取得してオブジェクトにバインドするメソッドfindを提供します。 findメソッドは、入力パラメーターに応じて機能します。 私たちはさまざまなオプションを見てみましょう-

*by primary key* -主キーを指定すると、設定されたテーブルの主キーと一致するレコードが返されます。
$employee = Model_Employee::find(1);

最初/最後のレコード-「最初」または「最後」を指定すると、それぞれ最初のレコードまたは最後のレコードが取得されます。 オプションで注文を渡すこともできます。

$entry = Model_Employee::find('first');
$entry = Model_Article::find('last', array('order_by' => 'id'));

すべて-「すべて」を指定すると、設定されたテーブルからすべてのレコードが取得されます。 条件と同様にオプションで順序を指定できます。

$entry = Model_Employee::find('all');
$entry = Model_Article::find ('all', array (
   'where' => array (
      array ('name', 'Jon'),
   ),
   'order_by' => array ('id' => 'desc'),
));

次のように、高度な検索オプションのモデルとともに、基本的なデータベースツールキットのクエリAPIを使用できます。

$query = Model_Employee::query()->where('category_id', 1)->order_by('date', 'desc');
$number_of_employees = $query->count();
$latest_employee = $query->max('id');
$young_employee = $query->min('age');
$newest_employee = $query->get_one();
$employees = $query->limit(15)->get();

更新

モデルの更新は作成と同じです。ただし、新しいモデルを作成する代わりに、findメソッドを使用して更新するモデルをフェッチし、プロパティを更新してからsaveメソッドを次のように呼び出します。

$entry = Model_Employee:find(4);
$entry->name = 'Peter';
$entry->save();

削除する

Ormは、モデルを削除するdeleteメソッドを提供します。 オブジェクトを取得して、deleteメソッドを呼び出すだけです。

$entry = Model_Employee:find(4);
$entry->delete();

実施例

この章で実際の例を作成して、モデルとデータベースを理解しましょう。

データベースを作成する

次のコマンドを使用して、MySQLサーバーに新しいデータベースを作成します。

create database finddevguides_fueldb

次に、次のコマンドを使用してデータベース内にテーブルを作成します。

create table employee(id int primary key, name varchar(20), age int not null);

データベースを構成する

データベース構成ファイル* fuel/app/config/db.phpを使用してデータベースを構成します。 次の変更を追加して、MySQLサーバーに接続します。

<?php
   return array (
      'development' => array (
         'type'           => 'mysqli',
         'connection'     => array (
            'hostname'       => 'localhost',
            'port'           => '3306',
            'database'       => 'finddevguides_fueldb',
            'username'       => 'root',
            'password'       => 'pass',
            'persistent'     => false,
            'compress'       => false,
         ),

         'identifier'     => '`',
         'table_prefix'   => '',
         'charset'        => 'utf8',
         'enable_cache'   => true,
         'profiling'      => false,
         'readonly'       => false,
      ),

      'production' => array (
         'type'           => 'mysqli',
         'connection'     => array (
            'hostname'       => 'localhost',
            'port'           => '3306',
            'database'       => 'finddevguides_fueldb',
            'username'       => 'root',
            'password'       => 'pass',
            'persistent'     => false,
            'compress'       => false,
         ),

         'identifier'     => '`',
         'table_prefix'   => '',
         'charset'        => 'utf8',
         'enable_cache'   => true,
         'profiling'      => false,
         'readonly'       => false,
      ),
   );

ORMパッケージを含める

メイン構成ファイル fuel/app/config/config.php を更新して、次の構成を追加してORMパッケージを含めます。

'always_load' => array (
   'packages' => array (
      'orm'
   ),
),

これで、アプリケーションでORMが有効になりました

従業員モデルを作成

モデルフォルダー*“ fuel/app/classes/model” *の下に新しいモデルEmployeeを作成します。 次のように定義されています。

*Employee.php*
<?php
   class Model_Employee extends Orm\Model {
      protected static $_connection = 'production';
      protected static $_table_name = 'employee';
      protected static $_primary_key = array('id');
      protected static $_properties = array (
         'id',
         'name' => array (
            'data_type' => 'varchar',
            'label' => 'Employee Name',
            'form' => array (
               'type' => 'text'
            ),
         ),

         'age' => array (
            'data_type' => 'int',
            'label' => 'Employee Age',
            'form' => array (
               'type' => 'text'
            ),
         ),
      );
   }

アクションを作成

次のように、 fuel/app/classes/controller/employee.php にあるEmployeeコントローラーで新しいアクション action_model を作成します。

class Controller_Employee extends Controller {
   public function action_model() {

     //db based sql command to delete all employees
      $query = db::query('delete from `employee`');
      $query->execute('production');

     //orm based query to add new employees
      $model = new model_employee();
      $model->name = "john";
      $model->age = 25;
      $model->save();
      $model = new model_employee();
      $model->name = "peter";
      $model->age = 20;
      $model->save();

     //orm based query to fetch all employee data
      $data = array();
      $data['emps'] = model_employee::find('all');
      return response::forge(view::forge('employee/model', $data));
   }
}

ビューを作成

次に、“ fuel/app/views/employee” *にある *model.php ビューファイルを作成します。 ファイルに次の変更を追加します。

<ul>
   <?php
      foreach($emps as $emp) {
   ?>
   <li><?php echo $emp['name']; ?></li>

   <?php
   }
   ?>
</ul>

ここで、URL http://localhost:8080/employee/model *をリクエストすると、次の結果が生成されます。

結果

ビューモデルの作成

FuelPHP-フォームプログラミング

FuelPHPは、フォームプログラミングを実行するために、 Form Fieldset および Input の3つのクラスを提供します。

  • Form クラスには、すべてのHTMLフォーム要素を作成するオプションがあります。
  • Fieldset クラスは、モデルと検証を統合し、より高いレベルのメソッドを介してhtml要素を作成するオプションを提供します。
  • *入力*クラスには、httpパラメーター、サーバー変数、ユーザーエージェントだけでなく、htmlフォームを介して送信されたデータを解析するオプションがあります。

この章では、FuelPHPの*フォームプログラミング*を学びましょう。

Form

前述のように、Formクラスはhtmlフォーム要素を作成するメソッドを提供し、重要なメソッドは次のとおりです-

開いた()

  • open()*は、新しいフォームを作成するために使用されます。 それは、次の2つのパラメータを提供します-
  • $ attributes -配列としてのフォームタグの属性、または文字列としてのアクションURLのみ。
  • $ hidden -隠しフィールド名とその値の配列。
echo Form::open('/employee/add');
echo Form::open(array('action' => '/employee/add', 'method' => 'post'));

閉じる()

  • close()*は単にフォームを閉じます。
echo Form::close();

入力()

  • input()*はhtml入力要素を作成します。 次の3つのパラメーターがあります。
  • $ field -入力要素の名前
  • $ value -入力要素の値
  • $ attributes -配列としての入力要素の属性
echo Form::input('name', 'jon', array('style' => 'border: 20px;'));

ラベル要素

*label* はhtmlラベル要素を作成します。 次の3つのパラメーターがあります。
  • $ label -表示するラベル
  • $ id -関連するフォーム要素ID
  • $ attributes -配列としてのラベル要素の属性
echo Form::label('Employee Name', 'employee_name');

隠された

*hidden* は入力メソッドに似ていますが、入力要素のタイプを非表示に設定する点が異なります。

パスワード

*password* はinputメソッドに似ていますが、input要素のタイプをpasswordに設定する点が異なります。

無線

*radio* はinputメソッドに似ていますが、input要素のタイプをradioに設定する点が異なります。 次の4つのパラメーターがあります。
  • $ field -入力要素の名前
  • $ value -入力要素の値
  • $ checked -アイテムがチェックされているかどうか(true/false)
  • $ attributes -配列としての入力要素の属性
echo Form::label('Male', 'gender');
echo Form::radio('gender', 'Male', true);
echo Form::label('Female', 'gender');
echo Form::radio('gender', 'Female');

チェックボックス

*checkbox* はinputメソッドに似ていますが、input要素のタイプをチェックボックスに設定する点が異なります。 次の4つのパラメーターがあります。
  • $ field -入力要素の名前
  • $ value -入力要素の値
  • $ checked -アイテムがチェックされているかどうか(true/false)
  • $ attributes -配列としての入力要素の属性
echo Form::label('Male', 'gender');
echo Form::checkbox('gender', 'Male', true);
echo Form::label('Female', 'gender');
echo Form::checkbox('gender', 'Female');

file

*file* は入力メソッドに似ていますが、入力要素のタイプをfileに設定する点が異なります。

テキストエリア

*textarea* は、html textarea要素を作成します。 次の3つのパラメーターがあります。
  • $ field -textarea要素の名前
  • $ value -textarea要素の値
  • $ attributes -配列としてのtextarea要素の属性
echo Form::textarea ('description', 'original data (value)', array ('rows' => 6,
      'cols' => 8));

選択する

*select* はHTMLのselect要素を作成します。 それは次の4つのパラメータを持っています-
  • $ field -選択要素の名前
  • $ values -初期選択値
  • $ options -配列としてのオプション。 ネストされた配列を使用してオプションをグループ化できます
  • $ attributes -配列としての入力要素の属性
echo Form::select (
   'country',
   'none',
   array (
      'none'  => 'None',
      'asia'  => array (
         'in' > 'India',
         'cn' => 'China'
      ),

      'us' => 'United States'
   )
);

提出する

*submit* は入力メソッドに似ていますが、送信する入力要素のタイプを設定する点が異なります。

ボタン

*button* はhtmlボタン要素を作成します。 次の3つのパラメーターがあります。
  • $ field -ボタン要素の名前
  • $ value -ボタン要素の値
  • $ attributes -配列としてのボタン要素の属性
echo Form::button('emp_submit', 'Submit');

リセット

*reset* はinputメソッドに似ていますが、リセットする入力要素のタイプを設定する点が異なります。

fieldset_open

fieldset_openは、htmlフィールドセットと凡例要素を作成します。 それは次の2つのパラメータを持っています-

  • 属性-配列としてのフィールドセット要素の属性
  • legend -作成する凡例の名前
//returns <fieldset class = "example-class" id = "example-id">
<legend>
   Custom Legend
</legend>

echo Form::fieldset_open (array (
   'class'  => 'example-class',
   'id'     => 'exampleid',
   'legend' => 'Custom Legend'
));

fieldset_close

fieldset_closeは、HTMLフィールドセット終了タグを作成します。

//returns </fieldset>
echo Form::fieldset_close();

入力クラス

入力クラスは、フォームの詳細とともにすべての要求データを読み取るメソッドを提供します。 重要な方法のいくつかは次のとおりです-

uri

*uri* は、リクエストの現在のURIを返します
//request: http://localhost:8080/employee/welcome
echo Input::uri();//return/employee/welcome

方法

*method* は、リクエストで使用されるHTTPメソッドを返します
echo Input::method()//"POST"

get

*get* は、$ _ GET変数の読み取りを可能にします。 次の2つのパラメーターがあります。
  • $ index -$ _GET配列のインデックス
  • $ default -インデックスが見つからない場合のデフォルト値。
echo Input::get('age', '20');//returns $_GET['age']

post

*post* は、$ _ POST変数の読み取りを可能にします。 次の2つのパラメーターがあります。
  • $ index -$ _POST配列のインデックス
  • $ default -インデックスが見つからない場合のデフォルト値
echo Input::get('age', '20');//returns $_POST['age']

param

*param* を使用すると、$ _ GET、$ _ POST、$ _ PUT、または$ _DELETE変数からアイテムを取得できます。 次の2つのパラメーターがあります。
  • $ index -配列のインデックス
  • $ default -インデックスが見つからない場合のデフォルト値

パラメータが指定されていない場合、すべてのアイテムが返されます。

echo Input::param('age', '20');//returns $_POST['age']

file

*file* を使用すると、$ _ FILE変数を読み取ることができます。 次の2つのパラメーターがあります。
  • $ index -$ _POST配列のインデックス
  • $ default -インデックスが見つからない場合のデフォルト値
echo Input::file();

is_ajax

リクエストがAJAXを介して行われた場合、_is_ajax_はtrueを返します。

echo Input::is_ajax()//return false

プロトコル

*protocol* は、リクエストで使用されるHTTPプロトコルを返します。
echo Input::protocol()//returns "HTTP"

ip

*ip* は、リクエストが行われたIPアドレスを返します。
echo Input::ip()//returns "84.45.34.24" (Public IP Address)

real_ip

*real_ip* は、要求が行われる実際のIPアドレス(クライアントがプロキシの背後にある場合)を返そうとします。
echo Input::real_ip()//returns "10.76.12.1" (local private IP Address)

サーバ

*server* を使用すると、$ _ SERVER変数を読み取ることができます。 次の2つのパラメーターがあります。
  • $ index -$ _POST配列のインデックス
  • $ default -インデックスが見つからない場合のデフォルト値。
echo Input::server('HTTP_HOST');//returns localhost:8080

リファラー

*referrer* は、$ _ SERVER変数からリファラーを返します。 これは、現在のリクエストのhttpリファラーを取得するためのショートカットメソッドです。

ユーザーエージェント

*user_agent* は、$ _ SERVER変数からユーザーエージェントを返します。 これは、現在のリクエストのhttpユーザーエージェントを取得するためのショートカットメソッドです。

クエリ文字列

*query_string* は、$ _ SERVER変数からクエリ文字列を返します。 現在のリクエストのクエリ文字列を取得するためのショートカットメソッドです。

ヘッダー

*headers* は、特定のヘッダーまたはすべてのヘッダーを返します。 それは次の2つのパラメータを持っています-
  • $ index -HTTPヘッダーの名前
  • $ default -インデックスが見つからない場合のデフォルト値。
echo Input::headers('Content-Type');//returns "text/html"

拡張

*extension* は、現在のリクエストのURI拡張を返します。
//Example URL: http://localhost/test/
echo Input::extension(); //NULL

//Example URL: http://localhost/testl
echo Input::extension(); //'html'

実施例

フォームと入力クラスを使用して新しい従業員を追加する簡単なフォームを作成しましょう。

フォームを作成

次のように、従業員コントローラーで新しいアクション get_add を作成します。

public function get_add() {
   return Response::forge(View::forge('employee/add'));
}

次に、アクションのビュー、fuel/app/views/employee/add.phpを次のように追加します。

<!DOCTYPE html>
<html lang = "en">
   <head>
      <title>Employee :: add page</title>
      <meta charset = "utf-8">
      <meta name = "viewport" content = "width = device-width, initial-scale = 1">
      <?php echo Asset::css('bootstrap.css'); ?>
   </head>

   <body>
      <div class = "container">
         <?php
            echo Form::open(array('action' => 'employee/add', 'method' => 'post'));
         ?>

         <div class = "form-group">
            <?php
               echo Form::label('Employee name:', 'name');
               echo Form::input('name', '', array('class' => 'form-control'));
            ?>
         </div>

         <div class = "form-group">
            <?php
               echo Form::label('Employee age:', 'age');
               echo Form::input('age', '', array('class' => 'form-control'));
            ?>
         </div>

         <?php echo Form::button('frmbutton', 'Submit', array(
            'class' => 'btn btn-default'));
         ?>

         <?php
            echo Form::close();
         ?>
      </div>
   </body>

</html>

ここでは、 bootstrap を使用してフォームを設計しました。 FuelPHPは、ブートストラップコンポーネントを完全にサポートしています。 ページをリクエストすると、http://localhost:8080/employee/addに次のフォームが表示されます。

フォームデザイン

プロセスフォーム

新しいアクション_post_add_を作成してフォームを処理し、次のようにユーザーが入力した従業員データを従業員コントローラーのデータベースに追加します。

public function post_add() {
   $name = Input::post('name');
   $age = Input::post('age');
   $model = new model_employee();
   $model->name = $name;
   $model->age = $age;
   $model->save();
   Response::redirect('employee/list');
}

ここでは、ユーザーが入力したデータがデータベースに保存されると、従業員リストページにリダイレクトされます。 次に、従業員リストページを作成します。

従業員のリスト

次のように、データベース内の従業員をリストする新しいアクションaction_listを作成します。

public function action_list() {
   $data = array();
   $data['emps'] = model_employee::find('all');
   return Response::forge(view::forge('employee/list', $data));
}

次のように、上記のアクションの新しいビュー fuel/app/views/employee/list を作成します。

<ul>
   <?php
      foreach($emps as $emp) {
   ?>
   <li><?php echo $emp['name']; ?></li>
   <?php
   }
   ?>
</ul>

フォームを確認する

ここで、URL http://localhost:8080/employee/add を要求し、次のスクリーンショットに示すように従業員データを入力して、フォームを送信します。

従業員データ

次に、それは次のようにデータベースで利用可能なすべての従業員(新しく追加されたものを含む)を示しています-

データベース

FuelPHP-検証

  • 検証*は、Webアプリケーションで頻繁に繰り返されるタスクの1つです。 ユーザーはフォームに必要なデータを入力して送信します。 次に、Webアプリケーションは、データを処理する前にデータを検証する必要があります。 たとえば、ユーザーは従業員データを入力し、post_actionはデータベースに保存する前に検証する必要があります。 FuelPHPは、この目的のために非常に単純なクラスValidationを提供します。

FuelPHPでは、検証の概念は非常にシンプルであり、Validationクラスを通じてフォームを適切に検証するためのさまざまなメソッドを提供します。 以下は検証のワークフローです。

ステップ1 *- *forge メソッドを使用して新しい検証オブジェクトを作成します。

$val = Validation::forge();
  • ステップ2 *-addメソッドを使用して検証する必要があるフィールドを追加します。
$val->add('name', 'Employee name');

ステップ3 *- *add_rule メソッドを使用して、追加されたフィールドの検証ルールを設定します。

$val->add('name', 'Employee name')->add_rule('required');
$val->add('age', 'Employee age')->add_rule('required')
   ->add_rule('numeric_min', 20)
   ->add_rule('numeric_max', 30);
  • ステップ4 *-runメソッドを呼び出してデータを検証します。
//run validation on just post
if ($val->run()) {
  //success
} else {
  //falier
}
  • ステップ5 *-検証済みおよびエラーを使用して、それぞれ有効および無効なフィールドを取得します。
$vars = $val->validated();
$vars = $val->error();

規則

FuelPHPには検証する多くのルールが含まれており、新しいルールを作成するオプションもあります。 Validationクラスでサポートされているルールは次のとおりです。

  • 必須-入力する値
  • required_with -別のフィールドをコンパニオンフィールドとして設定します。 フィールドが設定されている場合、コンパニオンフィールドも設定する必要があります
  • match_value -フィールドの値と一致する値を設定します
  • match_pattern -フィールドの値と正規表現として一致する値を設定します
  • match_field -フィールドの値と一致する値として別のフィールドの値を設定します
  • match_collection -コレクションとしてフィールドの値と一致する値を設定します
  • min_length -フィールドの値の最小長を設定します
  • max_length -フィールドの値の最大長を設定する
  • exact_length -フィールドの値の正確な長さを設定する
  • valid_date -フィールドの値を有効な日付に設定します
  • valid_email -フィールドの値を有効な電子メールに設定します
  • valid_emails -フィールドの値を、コンマで区切られた有効なメールに設定します
  • valid_url -フィールドの値を有効なURLに設定します
  • valid_ip -フィールドの値を有効なIPに設定します
  • numeric_min -フィールドの値の最小値を設定します
  • numeric_max -フィールドの値の最大値を設定します
  • numeric_between -フィールドの値の最小値と最大値を設定します
  • valid_string -正規表現に似ていますが、より単純です
$val->add('username', 'User name')->add_rule('valid_string', array('alpha, dots');

ここで、アルファはアルファベット文字を指し、ドットは(。)を指します。 有効な文字列は、アルファベット文字と(。)を含む文字列のみです。 他のオプションは、大文字、小文字、スペシャル、数値、スペースなどです。

実施例

従業員の追加機能を更新して、検証を含めることができます。 従業員コントローラーの post_add メソッドを次のように更新するだけです。

public function post_add() {
   $val = Validation::forge();
   $val->add('name', 'Employee name')->add_rule('required');
   $val->add('age', 'Employee age')->add_rule('required')
      ->add_rule('numeric_min', 20)
      ->add_rule('numeric_max', 30);

   if ($val->run()) {
      $name = Input::post('name');
      $age = Input::post('age');
      $model = new model_employee();
      $model->name = $name;
      $model->age = $age;
      $model->save();
      Response::redirect('employee/list');
   } else {
      Response::redirect('employee/add');
   }
}

ここでは、 name とageを必須フィールドとして指定しました。 *年齢*は20〜30の間である必要があります。 両方のルールが有効な場合、従業員データが保存され、従業員リストページにリダイレクトされます。 それ以外の場合、従業員データは拒否され、従業員ページを追加するためにリダイレクトされます。

FuelPHP-高度なフォームプログラミング

FuelPHPは、FieldsetおよびFieldset_Fieldクラスを通じて高度なフォームプログラミングを提供します。 Fieldset は、フォームを作成するオブジェクト指向の方法を提供します。 モデルを完全にサポートしています。 クライアント側およびサーバー側の検証のサポートも組み込まれています。 本格的なフォームを作成するには、適切なフォームと検証設定でモデルを作成するだけで十分です。 この章では、Fieldsetクラスとそれを使用してフォームを作成する方法について学びましょう。

フィールドセット

Fieldsetは Fieldset_Field オブジェクトのコレクションです。 Fieldset_Fieldは、名、姓などのフォームの個々のエントリを定義します。 検証とともに。 Fieldsetクラスには、フィールドを追加/編集/削除するメソッドがあります。 モデルで定義されたフィールドを識別し、指定されたモデルからフィールドを作成するオプションがあります。 Fieldset は、バックグラウンドでFormクラスとValidationクラスを使用して実際の作業を行います。 Fieldsetクラスの重要なメソッドのいくつかを見てみましょう。

フォージ

*forge* は新しいFieldsetインスタンスを作成します。 それは次の2つのパラメータを持っています-
  • $ name -フィールドセットの識別子
  • $ config -構成配列。 可能なオプションは_validation_instance_および_form_instanceです。 validation_instance_は_Validation_オブジェクトを持つことができ、_form_instance_はFormオブジェクトを持つことができます。
$employee_form = Fieldset::forge('employee');

実例

*instance* は、以前に作成されたFieldsetインスタンスを識別子で返します。
$employee_form = Fieldset::instance('employee');

get_name

フィールドセットインスタンスの識別子を取得します。

$employee_form = Fieldset::forge('employee');
$name = $employee_form->get_name();

add

*add* は新しいFieldset_Fieldインスタンスを作成し、それを現在のフィールドセットに追加します。 次の4つのパラメーターが含まれています。
  • $ name -フィールドの名前
  • $ label -フィールドのラベル
  • $ attributes -HTMLタグの属性
  • $ rules -検証ルール
$employee_field = $employee_form-> add (
   'employee_lastname',
   'Lastname',
   array ('class' => 'pretty_input')
);

//with validation rules
$employee_form->add (
   'email', 'E-mail',
   array('type' => 'email', 'class' => 'pretty_input'),
   array('required', 'valid_email')
);

add_before

add_beforeはaddと似ていますが、新しく作成されたフィールドが追加される前にフィールドを指定する追加のパラメーターが1つある点が異なります。

$employee_form->add_before (
   'employee_firstname',
   'Firstname',
   array ('class' => 'pretty_input'),
   array(),
   'employee_lastname'
);

削除する

*delete* は、フィールドセットから指定されたフィールドを削除します。
$employee_form->delete('employee_firstname');

フィールド

*field* は、すべてのフィールドまたはフィールドセットから指定されたフィールドを取得します。
$fields = $employee_form->field();
$lastname_field = $employee_form->field('employee_lastname');

造る

*build* は_ $ this-> form()-> build()_のエイリアスです。 フォームのHTMLマークアップを生成します。
$employee_form->build(Uri::create('employee/add'));

有効にする

*enable* は、以前に無効にされていたフィールドを再度有効にします。
$employee_form->enable('employee_firstname');

無効にする

*disable* は、フィールドセット内のフィールドの構築を無効にします。
$employee_form->disable('employee_firstname');

form

*form* は、現在のフィールドセットのFormインスタンスを返します。
$form = employee_form->form();

add_model

add_modelは、モデルのフィールドをフィールドセットに追加します。 次の3つのパラメーターがあります。

  • $ class -クラス名
  • $ instance -フィールドに値を入力するクラスのインスタンス
  • $ method -クラス内のメソッドの名前。 このメソッドは、フィールドセットにフィールドを追加するために使用されます。 Orm \ Modelには必要なメソッドがあります。 デフォルトのメソッド名はset_form_fieldsです。
$employee_form = Fieldset::forge('employee');
$employee_form->add_model('Model_Employee');

住む

*populate* は、モデルインスタンスを使用してfieldsetのフィールドの初期値を設定します。
$emp = new Model_Employee();
$emp->name = "Jon";
$employee_form->populate($emp);

移住する

*repopulate* は、フィールドセットのフィールドに再入力することを除いて、populateと同じです。

検証

*validation* は、現在のフィールドセットの検証インスタンスを取得します。
$validation = $employee_form->validation();

検証済み

$ this→ validation()→ validated()のエイリアス。

入力

$ this→ validation()→ input()のエイリアス。

エラー

$ this→ validation()→ error()のエイリアス。

*show_errors*

$ this→ validation()→ show_errors()のエイリアス。

実施例

Fieldsetクラスを使用してサンプルの従業員アプリケーションに新しい従業員を追加する高度なフォームを作成しましょう。

モデルを更新

必要な検証ルールで従業員モデルを更新し、次のように検証オブザーバーを追加します。

<?php
   class Model_Employee extends Orm\Model {
      protected static $_connection = 'production';
      protected static $_table_name = 'employee';
      protected static $_primary_key = array('id');

      protected static $_properties = array (
         'id',
         'name' => array (
            'data_type' => 'varchar',
            'label' => 'Employee Name',
            'validation' => array (
               'required',
               'min_length' => array(3),
               'max_length' => array(80)
            ),
            'form' => array (
               'type' => 'text'
            ),
         ),
         'age' => array (
            'data_type' => 'int',
            'label' => 'Employee Age',
            'validation' => array (
               'required',
            ),
            'form' => array ('type' => 'text' ),
         ),
      );

     //Just add the Observer, and define the required event
      protected static $_observers = array('Orm\\Observer_Validation' => array (
         'events' => array('before_save')));
   }

ここでは、名前フィールドと年齢フィールドの検証ルールを定義し、モデルをデータベースに保存する前にサーバー側の検証を実行する新しいオブザーバーを追加しました。 同じ検証ルールにより、フォームに必要な入力検証属性も作成されます。

フォームを作成

次のように、Employee Controllerで新しいアクションaction_advancedformを作成します。

public function action_advancedform() {

  //create a new fieldset and add employee model
   $fieldset = Fieldset::forge('employee')->add_model('Model_Employee');

  //get form from fieldset
   $form = $fieldset->form();

  //add submit button to the form
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));

  //build the form  and set the current page as action
   $formHtml = $fieldset->build(Uri::create('employee/advancedform'));

  //set form in data
   $data = array();
   $data['form'] = $formHtml;
   return Response::forge(View::forge('employee/advancedform', $data, false));
}

ここでは、fieldsetを使用してフォームを作成し、フォームをビューに送信しました。 次に、アクションのビュー fuel/app/views/employee/advancedform.php を次のように追加します。

<!DOCTYPE html>
<html lang = "en">

   <head>
      <title>Employee :: add page</title>
      <meta charset = "utf-8">
      <meta name = "viewport" content = "width = device-width, initial-scale = 1">
      <?php echo Asset::css('bootstrap.css'); ?>

      <style>
         table {
            width: 90%;
         }
         table tr {
            width: 90%
         }
         table tr td {
            width: 50%
         }
         input[type = text], select {
            width: 100%;
            padding: 12px 20px;
            margin: 8px 0;
            display: inline-block;
            border: 1px solid #ccc;
            border-radius: 4px;
            box-sizing: border-box;
         }
         input[type = submit] {
            width: 100%;
            background-color: #3c3c3c;
            color: white;
            padding: 14px 20px;
            margin: 8px 0;
            border: none;
            border-radius: 4px;
            cursor: pointer;
         }
         div {
            border-radius: 5px;
            background-color: #f2f2f2;
            padding: 20px;
         }
      </style>
   </head>

   <body>
      <div class = "container">
         <?php
            if(isset($errors)) {
               echo $errors;
            }
            echo $form;
         ?>
      </div>
   </body>

</html>

これで、ページ http://localhost:8080/employee/add をリクエストすると、次のフォームが表示されます。

ページを追加

プロセスフォーム

アクションメソッド_action_advancedform_を更新してフォームを処理し、ユーザーが入力した従業員データを従業員コントローラーのデータベースに次のように追加します。

public function action_advancedform() {

  //create a new fieldset and add employee model
   $fieldset = Fieldset::forge('employee')->add_model('Model_Employee');

  //get form from fieldset
   $form = $fieldset->form();

  //add submit button to the form
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));

  //build the form  and set the current page as action
   $formHtml = $fieldset->build(Uri::create('employee/advancedform'));

   if (Input::param() != array()) {
      try {
         $article = Model_Employee::forge();
         $article->name = Input::param('name');
         $article->url = Input::param('age');
         $article->save();
         Response::redirect('employee/list');

      }
      catch (Orm\ValidationFailed $e) {
         $view = View::forge('employee/advancedform');
         $view->set('form', $formHtml, false);
         $view->set('errors', $e->getMessage(), false);
      }
   }

   return Response::forge($view);
}

ここでは、ユーザーが入力したデータが検証され、データベースに保存されると、従業員リストページにリダイレクトされます。 それ以外の場合は、フォームが再び表示されます。

フォームを作成する

次に、URL http://localhost:8080/employee/add を要求し、従業員データを入力してフォームを送信します。 データが提供されない場合、次のスクリーンショットに示すように、フォームはユーザーにデータの入力を促します。

データがありません

ユーザーがクライアント側の検証をバイパスした場合、サーバーはフォームを検証し、次のスクリーンショットに示すようにエラーを表示します。

クライアントの幸福

データがクライアントおよびサーバー側の検証に合格した場合、従業員データはデータベースに保存され、ページはリストページにリダイレクトされます。

FuelPHP-ファイルのアップロード

ファイルのアップロードは、フォームプログラミングで最も一般的に使用される機能の1つです。 FuelPHPは、ファイルのアップロードを処理する特別なクラス Upload を提供します。 この章のUploadクラスを使用してファイルをアップロードする方法を学びましょう。

設定

アップロードクラスは、個別の設定ファイル fuel/app/config/upload.php を使用して設定できます。 重要な構成エントリは次のとおりです-

  • max_size -アップロードするファイルの最大サイズを設定します。 「0」は無制限のアップロードサイズを示します
  • ext_whitelist -許可されるファイル拡張子を設定する
  • ext_blacklist -許可されていないファイル拡張子を設定する
  • type_whitelist -許可されるファイルタイプを設定します。 たとえば、MIMEタイプ「text/plain」の「text」
  • type_blacklist -許可されていないファイルタイプを設定する
  • mime_whitelist -許可されるMIMEファイルタイプを設定します。 たとえば、「text/plain」
  • mime_blacklist -許可されていないMIMEファイルタイプを設定する
  • prefix -アップロードされたファイルをサーバーに保存するときにファイル名にプレフィックスを付ける文字列
  • suffix -サーバーにアップロードされたファイルを保存する際のファイル名の接尾辞の文字列
  • extension -設定するアップロードされたファイルの拡張子
  • create_path -利用できない場合、ファイルパスを作成するかどうか
  • overwrite -アップロードされたファイルの保存中に既存のファイルを上書きするかどうか
  • auto_rename -アップロードされたファイルの保存中にシーケンス番号を追加してファイルの名前を変更するかどうか
  • randomize -アップロードされたファイルを保存するためにランダムな32文字の名前を作成するかどうか

アップロード方法

アップロードクラスは、ユーザーがアップロードしたファイルを処理および保存するオプションを提供します。 (保存する前に)処理されたすべてのファイルの結果配列には、次の情報が含まれます。

  • field -フォームフィールドの名前
  • name -アップロードされたファイルの名前
  • type -ブラウザによって定義されたファイルのタイプ
  • mimetype -Uploadクラスで定義されているファイルのタイプ
  • file -アップロードされたファイルの一時的な場所の完全修飾名
  • filename -アップロードされたファイルのファイル名
  • extension -アップロードされたファイルの拡張子
  • サイズ-アップロードされたファイルのサイズ(バイト単位)
  • errors -エラーコードとメッセージを持つエラーの配列
  • error -アップロードが失敗した理由で配列エラーを設定するかどうか(アップロードが失敗した場合)

ファイルがサーバーに保存されると、結果の配列にも次の情報が含まれます。

  • saved_to -アップロードされたファイルが保存された完全修飾パス
  • saved_as -保存されたファイルの名前
  • エラー-エラー配列を更新

それでは、Uploadクラスのメソッドを見てみましょう。

is_valid

有効なファイルがユーザーによってアップロードされた場合、is_validはtrueを返します。

//do we have any uploaded files to save?
if (Upload::is_valid()) {
  //process
}

get_files

get_filesは、アップロードされたすべてのファイルを多次元配列として返します。 フォームのファイル入力のインデックス/名前が指定されている場合、指定されたファイル入力のみに関連するアップロードされたファイルを返します。

foreach(Upload::get_files() as $file) {
  //do something with the file info
}
if ( Upload::get_files(0)) {
  //do something
}

get_errors

1つ以上のファイルのアップロードに失敗した場合、get_errorsはエラーの配列を返します。 フォームのファイル入力名のインデックス/名前が指定されている場合、指定されたファイル入力のみに関連するエラーを返します。

foreach(Upload::get_errors() as $file) {
  //do something with the file info
}
if (Upload::get_errors('myimage')) {
  //do something
}

プロセス

プロセスは、アップロードされたファイルに関する情報を収集する実際のプロセスを指します。 配列を使用して、新しいカスタム構成を提供できます。 設定が指定されていない場合、fuel/app/config/upload.phpで定義されている設定が使用されます

Upload::process (array(
   'auto_rename' => false,
   'overwrite'   => true
));

save

保存とは、すべての検証済みファイルを適切な場所に保存する実際のプロセスを指します。 特定のエントリのみを保存するようにインデックスを指定できます。

Upload::save();
Upload::save(0);
Upload::save(0, 3);

実施例

従業員サンプルに新しいコントローラーController_Uploadを作成して、アップロード機能をテストしましょう。

ステップ1 *-ファイル *fuel/app/classes/controller/upload.php を作成します。 アップロードコントローラーを作成します。

<?php
   class Controller_Upload extends Controller {
   }
  • ステップ2 *-新しいアクションget_uploadを作成します。
<?php
   class Controller_Upload extends Controller {
      public function get_index() {
         return \View::forge("upload/index");
      }
   }
  • ステップ3 *-作成したアクションの新しいビューを作成します。
<!DOCTYPE html>
<html>
   <body>

      <form action = "/upload/index" method = "post" enctype = "multipart/form-data">
         Select image to upload:
         <input type = "file" name = "fileToUpload" id = "fileToUpload">
         <input type = "submit" value = "Upload Image" name = "submit">
      </form>

   </body>
</html>
  • ステップ4 *-新しいアクションpost_actionを作成して、アップロードされたファイルを処理します。
<?php
   class Controller_Upload extends Controller {
      public function get_index() {
         return \View::forge("upload/index");
      }
      public function post_index(){
         $config = array(
            'path' => DOCROOT.'files',
            'randomize' => true,
            'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'),
         );
         Upload::process($config);
        //if there are any valid files

         if (Upload::is_valid()) {
            Upload::save();
            echo "success";
         } else {
           //and process any errors
            foreach (Upload::get_errors() as $file) {
               echo var_dump($file);
            }
         }
      }
   }

最後に、 http://localhost:8080/upload/index というURLをリクエストしてアプリケーションを実行し、ファイルのアップロードを試みます。

結果

ファイルのアップロード

FuelPHP-Ajax

AJAXは、Webプログラミングの最新技術です。 ページを更新することなく、Webページ内のデータを非同期で送受信するオプションを提供します。 この章では、FuelPHP AJAXプログラミングについて学びましょう。

FuelPHPフレームワークは、リクエストタイプがAJAXであるかどうかを識別するオプションを提供します。 入力クラスには、この目的のための* is_ajax()*メソッドがあります。 AJAXリクエストが行われた場合、 *Input
is_ajax* メソッドは true を返し、そうでない場合は false を返します。

このメソッドは、サーバー側でAJAX要求を適切に処理するために使用されます。

if (Input::is_ajax()) {
  //Ajax request
} else {
  //Normal request
}
*json_encode* を使用してJSONレスポンスを返すことができます。 これら2つの方法を組み合わせて、シンプルでクリーンなAJAXベースのWebアプリケーションを作成できます。

実施例

従業員アプリケーションに新しいページ ajax/index を追加し、従業員情報を非同期に取得してみましょう。

  • ステップ1 *-新しいコントローラーController_Ajaxをfuel/app/classes/controller/ajax.phpに作成します。
<?php
   class Controller_Ajax extends Controller {
   }
  • ステップ2 *-次のように新しいアクション_action_index_を作成します。
<?php
   class Controller_Ajax extends Controller {
      public function action_index() {
         $emps = model_employee::find('all');
         $data = array();
         $i = 0;

         foreach($emps as $emp) {
            $data[$i] = array();
            $data[$i]['name'] = $emp['name'];
            $data[$i]['age'] = $emp['age'];
            $i = $i + 1;
         }
         if(\Input::is_ajax()) {
            echo json_encode($data);
         } else {
            return \View::forge("ajax/index");
         }
      }
   }

ここで、リクエストがAJAXの場合、学生情報を取得し、JSONとしてエンコードして、返します。 それ以外の場合は、対応するビューをレンダリングするだけです。

ステップ3 *-対応するビューファイル *fuel/app/views/ajax/index.php を次のように作成します。

<html>
   <head>
      <script language = "javascript" src = "/assets/js/jquery-3.2.1.min.js"></script>

      <style>
         .table { border-collapse: collapse; }
         .table th, td {
            border-bottom: 1px solid #ddd;
            width: 250px;
            text-align: left;
            align: left;
         }
      </style>
   </head>

   <body>
      <a id = "loademployee" href = "#">Load employee information</a>
      </br>
      </br>

      <table class = "table">
         <tbody id = "employee">
         </tbody>
      </table>

      <script language = "javascript">
         $(document).ready(function() {
            $("#loademployee").on("click", function(event) {
               $.ajax ({
                  url:        '/ajax/index',
                  type:       'POST',
                  dataType:   'json',
                  async:      true,

                  success: function(data, status) {
                     var e = $('<tr><th>Name</th><th>Age</th></tr>');
                     $('#employee')l('');
                     $('#employee').append(e);

                     for(i = 0; i < data.length; i++) {
                        employee = data[i];
                        var e = $('<tr><td id = "name"></td><td id = "age"></td></tr>');
                        $('#name', e)l(employee['name']);
                        $('#age', e)l(employee['age']);
                        $('#employee').append(e);
                     }
                  },

                  error : function(xhr, textStatus, errorThrown) {
                     alert('Ajax request failed.');
                  }
               });
            });
         });
      </script>
   </body>

</html>

ここでは、AJAX呼び出しを使用して従業員情報を読み込むためのアンカータグ(id:loademployee)を作成しました。 AJAX呼び出しは、JQueryを使用して行われます。 ユーザーがクリックすると、loademployeeタグに関連付けられたイベントがアクティブになります。 次に、AJAX呼び出しを使用して従業員情報を取得し、必要なHTMLコードを動的に生成します。

  • ステップ4 *-アプリケーションを実行します。

最後に、アプリケーション http://localhost:8000/ajax/index を実行し、[従業員情報の読み込み]アンカータブをクリックします。

結果

アンカータブ

FuelPHP-HMVCリクエスト

FuelPHPは、 Request クラスを使用して、同じアプリケーション内でアクションを要求する優れた機能を提供します。 これはHMVCリクエストと呼ばれます。 コントローラロジックを再利用できます。

HMVCリクエストの作成

HMVCリクエストの作成は、必要なURLでリクエストオブジェクトを作成し、次のようにexecuteメソッドを呼び出すのと同じくらい簡単です。

$list = Request::forge('employee/list/')->execute();
echo $list;

$employee = Request::forge('employee/show/1')->execute(array('id' => '1'));
echo $employee;

実施例

新しいコントローラ_Controller_HMVC_を作成して、HMVC機能をテストしましょう。 ファイル fuel/app/classes/controller/hmvc.php を作成し、次のコードを配置します。

<?php
   class Controller_HMVC extends Controller {
      public function action_index() {
         echo Request::forge('employee/list')->execute();
      }
   }

ここでは、HMVCリクエストを通じて従業員/リストページを呼び出し、結果を表示しました。

結果

従業員リスト

FuelPHP-テーマ

テーマは、アプリケーションの複数のルックアンドフィールを有効にするために使用されます。 アプリケーションの機能を乱すことなく、アプリケーションのルックアンドフィールを変更するオプションをユーザー/開発者に提供します。 アプリケーションには、1つ以上のテーマを含めることができます。 各テーマは独自のフォルダーにあります。 この章でテーマを作成する方法を学びましょう。

テーマ設定

FuelPHPは、テーマ用に個別の設定ファイル fuel/app/config/themes.php を提供します。 すべてのテーマ関連の設定は、このファイルで構成されます。 主なテーマ設定のいくつかは次のとおりです-

  • active -アクティブなテーマの名前
  • fallback -アクティブなテーマが見つからない場合のフォールバックテーマの名前
  • paths -テーマを検索および検索するパスの配列
  • assets_folder -通常、アセットはWebからアクセスできるようにDOCPATH内にある必要があります。 DOCPATH内のテーマのアセットフォルダーを参照します
  • view_ext -テーマのビューファイルの拡張子
  • info_file_name -テーマに関する拡張情報を持つファイル
  • require_info_file -テーマ情報ファイルinfo_file_nameを要求するかどうか
  • use_modules -現在のモジュールを使用するかどうか

テーマファイルの簡単な構成は次のとおりです。

<?php
   return array (
      'active' => 'tpthemes',
      'fallback' => 'tpthemes',
      'paths' => array (
         APPPATH.'themes',
      ),
      'assets_folder' => 'assets',
      'view_ext' => 'l',
      'require_info_file' => false,
      'info_file_name' => 'themeinfo.php',
      'use_modules' => false,
   );

ここで設定しました、

  • tpthemesとしてのアクティブおよびフォールバックテーマの名前
  • fuel/app/themes/としてのテーマフォルダーのパス */public/assets/tpthemes/としてのアセットフォルダーのパス

テーマクラス

構成が完了したら、FuelPHPが提供するThemeクラスを使用して、テーマの機能を実行できます。 この章のThemeクラスで利用可能なメソッドについて教えてください。

実例

インスタンスメソッドを使用すると、新しいテーマを作成できます。 次の2つのパラメーターがあります。

  • $ name -テーマの名前(オプション)
  • $ config -テーマ構成配列(構成セクションで見られるものと同じ)

両方のパラメーターはオプションです。 パラメーターが指定されていない場合、構成ファイルからデフォルトのテーマを取得しようとします。 テーマ名が指定されている場合、構成ファイルから他の設定を取得しようとします。 構成も指定されている場合、構成ファイルの設定ではなく、ユーザー指定の設定が使用されます。

$theme = \Theme::instance();
$theme = \Theme::instance('tpthemes');
$theme = \Theme::instance ('mytheme', array (
   'active' => 'mytheme', 'view_ext' => '.php'));

フォージ

forgeはインスタンスに似ていますが、構成配列のみを持つ点が異なります。

$theme = \Theme::forge (array(
   'active'   => 'tpthemes',
   'fallback' => 'tpthemes',
   'view_ext' => '.php',
));

view

viewメソッドは、バックグラウンドで* View
forge()*を使用します。 ビューメソッドが、fuel/app/views/フォルダーではなく、themesフォルダー内のfuel/app/themes/tpthemes/内のビューファイルを検索することを除いて、両方のAPIは似ています。
$theme = \Theme::instance();
$view = $theme->view('template/index');
//*fuel/app/themes/tpthemes/template/index.php

プレゼンター

presenterメソッドは、バックグラウンドで* Presenter
forge()*を使用します。 プレゼンターメソッドがテーマフォルダー、fuel/app/views/フォルダーではなくfuel/app/themes/tpthemes/内のビューファイルを検索することを除いて、両方のAPIは似ています。
$theme = \Theme::instance();
$presenter = $theme->presenter('template/index');

asset_path

asset_pathメソッドは、現在選択されているテーマに関連して要求されたアセットへのパスを返します。

$theme = \Theme::instance();

//public/assets/tpthemes/css/style.css
$style = \Html::css($theme->asset_path('css/style.css'));

add_path

add_pathメソッドを使用すると、実行時にテーマパスを追加できます。

$theme = \Theme::instance();
$theme->add_path(DOCROOT.'newthemes');

add_paths

add_pathsメソッドを使用すると、実行時に複数のテーマパスを追加できます。

$theme = \Theme::instance();
$theme->add_path(DOCROOT.'newthemes');

活動的

activeメソッドは、アクティブなテーマを設定できます。

$theme = \Theme::instance();
$active = $theme->active('newtheme');

後退する

fallbackメソッドにより、フォールバックテーマを設定できます。

$theme = \Theme::instance();
$fallback = $theme->fallback('custom');

get_template

get_templateメソッドは、現在ロードされているテーマテンプレートのViewインスタンスを返します。

$theme = \Theme::instance();
$theme->get_template()->set('body', 'Theme can change the look and feel of your app');

set_template

set_templateメソッドを使用すると、ページのテーマテンプレートを設定できます。

$theme = \Theme::instance();
$theme->set_template('layouts/index')->set('body', 'set theme template');

find

テーマへのパスが見つかった場合、findはtrueを返し、そうでない場合はfalseを返します。

$theme = \Theme::instance();
$path = $theme->find('newtheme')

all

allメソッドは、すべてのテーマパスのすべてのテーマの配列を返します。

$theme = \Theme::instance();
$themes = $theme->all();

情報を取得

get_infoメソッドは、テーマ情報配列から特定の変数を返します。 テーマが指定されていない場合、アクティブなテーマの情報配列が使用されます。

$theme = \Theme::instance();
$var = $theme->get_info('color', 'green', 'newtheme');

ここでは、色を取得するメソッドは「newtheme」で定義されています。 定義されていない場合、デフォルトの色として「緑」が使用されます。

set_info

set_infoメソッドは、アクティブテーマまたはフォールバックテーマに変数を設定します。

$theme->set_info('color', 'green', 'fallback');

set_partial

set_partialメソッドを使用すると、ページテンプレートの名前付きセクションにパーシャルビューを設定できます。 通常、それはHMVC呼び出しを介して行われます。

$theme = \Theme::instance();
$theme->set_template('layouts/homepage');
$theme->set_partial('navbar', 'homepage/navbar');

get_partial

get_partialメソッドを使用すると、ページテンプレートの名前付きセクションで以前に設定されたパーシャルのビューインスタンスを取得できます。

$theme = \Theme::instance();
$theme->set_partial('sidebar', 'partials/menu');
$theme->get_partial('sidebar', 'partials/menu')->set('class', 'menu green');

実施例

従業員アプリケーションにテーマサポートを追加しましょう。

  • ステップ1 *-次の内容の新しいテーマ設定ファイルfuel/app/config/theme.phpを追加します。
<?php
   return array (
      'active' => 'tpthemes',
      'fallback' => 'tpthemes',
      'paths' => array (APPPATH.'themes', ),
      'assets_folder' => 'assets',
      'view_ext' => 'l',
      'require_info_file' => false,
      'info_file_name' => 'themeinfo.php',
      'use_modules' => false,
   );
  • ステップ2 *-テーマtpthemesの新しいアセットフォルダーpublic/assets/tpthemes/cssを追加します。
cd/go/to/app/root/path
mkdir -p public/assets/tpthemes/css
  • ステップ3 *-最新のブートストラップをダウンロードし、bootstrap.min.cssをpublic/assets/tpthemes/cssの下に配置します
  • ステップ4 *-新しいフォルダーtpthemesをfuel/app/themesフォルダーの下に追加します。
cd/go/to/app/root/path
mkdir -p fuel/app/themes/tpthemes
  • ステップ5 *-新しいレイアウトテンプレートを追加して、fuel/app/themes/tpthemes/layout/にbootstraplを追加し、次のコードを追加します。
<!DOCTYPE html>
<html lang = "en">
   <head>
      <title>Theme example</title>
      <meta charset = "utf-8">
      <meta name = "viewport" content = "width = device-width, initial-scale = 1">
      <!-- Bootstrap core CSS -->
      <?php echo \Theme::instance()->asset->css('bootstrap.min.css'); ?>
   </head>

   <body>
      <?php echo $header; ?>
      <div class = "container">
         <div class = "row">
            <div class = "col-sm-12">
               <?php echo $content; ?>
            </div>
         </div>
      </div>
   </body>

</html>

ここでは、テーマインスタンスとアセットメソッドを使用して、ブートストラップファイルのパスを取得しました。 ヘッダーとコンテンツの2つの変数を定義しました。 header は、ヘッダーの詳細を動的に設定するために定義されます。 content は、ページの実際のコンテンツを動的に設定するために定義されています。

  • ステップ6 *-次のように、fuel/app/themes/tpthemes/partialsに新しいヘッダーテンプレートheader.phpを追加します。
<div class = "jumbotron text-center">
   <h1>Theme support in fuelphp</h1>
   <p>bootstrap based template</p>
</div>

ステップ7 *-新しいコントローラー、 *ThemeSample をfuel/app/classes/controller/themesample.phpに、 action をaction_indexに次のように作成します。

<?php
   class Controller_ThemeSample extends \Controller {
      public function before() {
         $this->theme = \Theme::instance();
         $this->theme->set_template('layouts/bootstrap');
         $header = $this->theme->view('partials/header');
         $this->theme->get_template()->set('header', $header);
      }
      public function action_index() {
         $content = $this->theme
         ->view('themesample/index')
         ->set('message', 'This data comes from action page');
         $this->theme
         ->get_template()
         ->set('content', $content);
      }
      public function after($response) {
         if (empty($response) or  ! $response instanceof Response) {
            $response = \Response::forge(\Theme::instance()->render());
         }
         return parent::after($response);
      }
   }

ここでは、 Theme クラスのメソッドを使用してテーマの初期化を行うために、 before および after メソッドを使用しました。 使用されるメソッドのいくつかは、instance、get_template、set_template、およびviewです。

  • ステップ8 *-最後に、次のように、fuel/app/themes/tpthemes/themesampleでindex.phpのインデックスアクションのビューを追加します。
<p>The data comes from *fuel/app/themes/tpthemes/themesample/indexl* file.</p>
<p>
   <?php echo $message; ?>
</p>

ここでは、コントローラーで動的に設定する必要がある1つの変数messageを定義しました。

新しいテーマ tpthemes を作成し、それを ThemeSample コントローラーで使用しました。 次に、URL http://localhost:8080/themesample/indexをリクエストして結果を確認します。 結果は次のとおりです。

テーマのサポート

FuelPHP-モジュール

モジュールは、ブログ、アルバム、チャットなどの再利用可能なWeb機能を記述するための優れた方法です。 モジュールは、Webアプリケーションの他のコードを妨害しません。 独自のフォルダに存在し、機能をサイレントに提供します。 モジュールは、グループ化、構成、および特別なフォルダーに配置されることを除いて、単純に同じコントローラー、モデル、およびビューです。 通常、モジュールは通常、fuel/app/modulesにあるmodulesという名前のアプリケーションのサブディレクトリ内にあります。

モジュール構成

メインのアプリケーション構成ファイルfuel/app/config/config.phpでモジュールパスを次のように定義できます。

'module_paths' => array (
   path/to.’modules'.DS,             //path to application modules
   path/to.’..’.DS.'globalmods'.DS   //path to our global modules
),

モジュール名前空間

FuelPHPでは、すべてのモジュールに独自のPHP名前空間があります。 個別の名前空間を設定すると、名前の衝突が修正されます。 たとえば、従業員モジュールは、次のように名前空間_EmployeeModule_で設定できます。

<?php
   namespace Employeemodule;

   class Controller_Employee {
     //code here
   }

モジュールは、モジュールのフォルダー名と同じ名前にする必要があります。

モジュール構造

構成で定義されたフォルダー名を作成することにより、モジュールを作成できます。 フォルダー名は、モジュールの名前、およびモジュール内のクラスの名前空間の名前を決定します。

モジュールの構造は次のとおりです-

  • クラス
  • コントローラ
  • モデル
  • view
  • config
  • lang
  • タスク
  • ビュー

モジュールは、独自の構成ファイルを持つことができます。 これはルーティングのセットアップに非常に役立ち、アプリケーションの元の構成を妨害しません。 もう1つの重要な概念は、次のようにalways_load構成セクションでモジュールをロードすることにより、モジュールクラスを再利用できるということです。

'always_load => array (
   'modules' => array('employeemodule'),
),

また、次のように構成しなくても、モジュールをすぐにロードして使用できます。

Module::load('employeemodule');
\Employeemodule\Myclass::mymethod('params');

FuelPHP-パッケージ

パッケージはコードの再利用のモジュールに似ていますが、次の点で異なります。

  • Web URLにはマッピングされません
  • HMVCのリクエストではアプローチできません

要するに、パッケージはブログ、アルバムなどの直接的なWeb機能ではありません。 代わりに、電子メール処理、ドキュメント作成、チャート作成、認証などのようにグループ化された機能のライブラリです。 これにより、Webアプリケーションの開発が高速化されます。

パッケージの作成

パッケージを作成するには、まず次のように指定されたソースコードを配置する必要があります。

/fuel
  /packages
     /package (root directory of package)
        /bootstrap.php
     /classes
        /our.php
     /classes.php
        /here.php
     /config
        /config.php
        /and_so_on

パッケージの構造には、config.phpおよびbootstrap.phpファイルの2つのパッケージ固有ファイルがあります。 構成ファイルの目的は、メインアプリケーションに影響を与えることなく、パッケージの構成をパッケージフォルダー自体の下にグループ化することです。 ブートストラップファイルの目的は、オートローダーが適切にロードするようにネームスペースを設定することです。

名前空間を設定するいくつかの方法は次のとおりです。

Autoloader::add_namespace('Mypackage', __DIR__.'/classes/');
Autoloader::add_core_namespace('Mypackage');
Autoloader::add_core_namespace('Mypackage', true);
Autoloader::add_classes (array(
   'Mypackage\\Classname' => __DIR__.'/classes/classname.php',
   'Mypackage\\Anotherclass' => __DIR__.'/classes/anotherclass.php',
));

ブートストラップファイルが適切に構成され、パッケージがアプリケーションにロードされると、次のように使用できます。

$instance = new Myclass;
$instance = new Mynamespace\Myclass;

パッケージのインストール

通常、パッケージはfuel/packagesディレクトリに配置されます。 デフォルトでは、次のパッケージがインストールされます。

  • auth -認証パッケージ
  • email -電子メールパッケージ
  • oil -燃料のコマンド、オイルパッケージ
  • orm -ORMパッケージ
  • parser -Markdownパーサーパッケージ

新しいパッケージをインストールするには、次の2つのオプションがあります。

  • オプション1 *-手動インストール-ダウンロードとインストール

パッケージを手動でインストールするには、最初に作成者のWebサイトからパッケージをダウンロードします。 パッケージを展開し、 fuel/packages/ フォルダーに配置します。

  • オプション2 *-オイルコマンドを使用した自動方法

FuelPHPは、githubでホストされているパッケージを自動的にインストールする方法を提供します。 次のコマンドを使用して、パッケージmytestpackageをインストールします。

php oil package install mytestpackage

gitクライアントを使用してパッケージのソースコードを複製し、fuel/packagesフォルダーに移動します。 gitクライアントが利用できない場合、次のように-directコマンド引数を使用して、パッケージをダウンロードしてインストールするようにコマンドに指示できます。

php oil package install mytestpackage --direct

パッケージの使用

パッケージは、アプリケーションにロードされると、アプリケーションで使用できます。 パッケージをアプリケーションにロードするには、2つの方法があります。

  • オプション1 *-パッケージクラスを通じて

FuelPHPは、ロード、アンロード、およびロードされたメソッドを介してパッケージの可用性をそれぞれチェック、ロード、アンロード、およびチェックするクラス Package を提供します。 load メソッドには2つのパラメーターがあります。 最初のパラメーター $ package はパッケージの名前で、2番目のパラメーター path はパッケージのパスです。 パッケージが fuel/packages フォルダーにインストールされている場合、2番目のパラメーターはオプションです。

//load the orm package
Package::load('orm');

//load the parser package from a specific directory
Package::load('parser', '/path/to/packages/dir/');

//load the non-existent package
Package::load('awesome');//Throws a PackageNotFoundException
  • オプション2 *-設定ファイルを使用

パッケージを永続的にロードするには、メイン構成ファイル fuel/app/config/config.phpalways_load 構成エントリの下にパッケージを追加するだけです。 電子メールパッケージを読み込むには、次の構文を使用します。

'always_load' => array (
   'packages' => array (
      'email',
   ),
),

パッケージがアプリケーションにロードされると、次のように使用できます。

$instance = new Myclass;
$instance = new Mynamespace\Myclass;

Fuelphp-cookie-and-session-management

FuelPHP-イベント

イベント*は、プログラム自体が処理できるプログラムによって認識されるアクションまたは発生です。 たとえば、my_fuel_eventという名前のアクションまたはイベントを定義し、イベントmy_fuel_eventが呼び出されるたびに何らかの作業を行うことができます。 FuelPHPは、アプリケーション内のイベントを処理するクラス *Event を提供します。

システムイベント

FuelPHPは、定義されたイベントがアプリケーションによって呼び出されるか起動されるたびに何らかの作業を実行できるイベントの一部を定義しました。 このヘルプは、FuelPHPのコアコードファイルを変更せずに、FuelPHPの動作を変更します。 事前定義されたイベントは次のとおりです-

  • app_created -このイベントは、FuelPHPフレームワークが初期化された後にトリガーされます。
  • request_created -このイベントは、新しいRequestオブジェクトが偽造された後にトリガーされます。
  • request_started -このイベントは、リクエストの実行がリクエストされたときにトリガーされます。
  • controller_started -このイベントは、コントローラーのbefore()メソッドが呼び出される前にトリガーされます。
  • controller_finished -このイベントは、コントローラーのafter()メソッドが呼び出され、応答が受信された後にトリガーされます。
  • response_created -このイベントは、新しいResponseオブジェクトが偽造された後にトリガーされます。
  • request_finished -このイベントは、リクエストの実行が完了し、応答が受信されたときにトリガーされます。
  • shutdown -このイベントは、メイン要求が処理され、出力が送信された後にトリガーされます。

次のように、特別な設定ファイル fuel/app/config/events.php でイベントを処理できます-

<?php
   return array (
      'fuelphp' => array (
         'app_created' => function() {
           //After FuelPHP initialised
         },
         'request_created' => function() {
           //After Request forged
         },
         'request_started' => function() {
           //Request is requested
         },
         'controller_started' => function() {
           //Before controllers before() method called
         },
         'controller_finished' => function() {
           //After controllers after() method called
         },
         'response_created' => function() {
           //After Response forged
         },
         'request_finished' => function() {
           //Request is complete and Response received
         },
         'shutdown' => function() {
           //Output has been send out
         },
      ),
   );

イベントメソッド

イベントクラスは、イベントを登録、登録解除、および起動するメソッドを提供します。 それらは次のとおりです。

登録()

registerメソッドを使用すると、トリガーメソッドが呼び出されたときに実行されるオブジェクトをファイルに登録できます。

$my_event_code = function() {
   echo 'my event';
}
Event::register('my_event', $my_event_code);

unregister()

unregisterメソッドを使用すると、トリガーメソッドが呼び出されたときに実行されるオブジェクトのファイルを登録解除できます。

Event::unregister('my_event', $my_event_code);

引き金()

トリガーメソッドは、registerメソッドを介して関連付けられたコールバックをトリガーまたはアクティブ化するために使用されます。

Event::trigger('my_event');

has_events()

has_eventsメソッドを使用できるため、特定の登録済みイベントにトリガーがあるかどうかを確認できます。

Event::has_events('my_event');

フォージ()

フォージは新しいイベントオブジェクトを返します。

$event = Event::forge();

instance()

インスタンスは、新しいイベントオブジェクトシングルトンを返します。

$event = Event::instance('event_instance');

FuelPHP-メール管理

電子メール機能は、Webフレームワークで最も要求されている機能です。 FuelPHPは、パッケージとしてバンドルされたエレガントなメールクラスを提供します。 単純なプレーンテキストの電子メールと、複数の添付ファイルを含む高度なリッチテキストの電子メールの送信に使用されます。 次の機能をサポートしています-プレーンテキストメール、HTMLメール、添付ファイル、およびインライン添付ファイル。

設定

アプリケーションで電子メール機能を有効にするには、メイン構成ファイルfuel/app/config/config.phpで以下に指定されているように電子メールパッケージをロードするだけです。

'always_load' => array (
   'packages' => array (
      'email',
   ),
),

もう1つのオプションは、電子メールパッケージ、コントローラー自体を次のようにロードすることです。

\Package::load('email');

メールの設定はメインの設定ファイルで行うことができ、重要なオプションのいくつかは次のとおりです。

  • driver -smtpなどのメールドライバー
  • is_html -HTMLコンテンツとしてメールを送信するかどうか
  • priority -メールの優先度
  • smtp.host -SMTPサーバーホスト
  • smtp.port -SMTPサーバーポート
  • smtp.username -SMTPサーバーのユーザー名
  • smtp.password -SMTPサーバーのパスワード
  • smtp.timeout -SMTPタイムアウト
  • smtp.starttls -SMTPサーバーにSTARTTLSコマンドが必要かどうか

Email API

以下は、電子メールおよび電子メールドライバークラスによって提供されるAPIです。

フォージ

目的:電子メールドライバーのインスタンスを作成します。 受け取った構成または入力に基づいてドライバーを作成します。 メールドライバーは、メールを作成および送信する機能を提供します。 考えられる電子メールドライバーの一部は、* smtp、sendmail、mailgun、、 *mandrill です。

  • パラメータ-なし、または構成詳細の配列
  • 戻り値-Email_Driverオブジェクトを返します

例えば、

$email = \Email::forge();
$email = \Email::forge (array(
   'driver' => 'smtp',
));

body

  • 目的-メッセージ本文を設定するには
  • パラメータ-$ body-メッセージ本文
  • 戻り値-現在のインスタンスを返します

例えば、

$email = \Email::forge();
$email->body('Body message');

//or pass it a View
$email->body(\View::forge('my/view', $data);

alt_body

  • 目的-代替メッセージ本文を設定するには
  • パラメータ-$ alt_body-代替メッセージ本文
  • 戻り値-現在のインスタンスを返します

例えば、

$email = \Email::forge();
$email->alt_body('Body message');

//or pass it a View
$email->alt_body(\View::forge('my/view', $data);

優先度

  • 目的-メールの優先度を設定する
  • パラメータ-
  • $ priority -優先度の値。 オプションは-
a. \Email::P_LOWEST
* \Email::P_LOW
* \Email::P_NORMAL
* \Email::P_HIGH
* \Email::P_HIGHEST
  • 戻り値-現在のインスタンスを返します

例えば、

$email = \Email::forge();
$email->priority(\Email::P_HIGHEST);

html_body

  • 目的-HTML形式でメッセージ本文を設定するには
  • パラメータ-
  • $ html -HTMLのメッセージ本文。
  • generate_alt -代替メッセージを生成するかどうか。
  • auto_attach -画像を埋め込むかどうか
  • 戻り値-現在のインスタンスを返します

例えば、

$email = \Email::forge();

//Do generate the alt body, but don't auto attach images.
$email->html_body(\View::forge('welcome/email', $data), true, false);

from

  • 目的-差出人アドレスを設定するには
  • パラメータ-
  • $ from -電子メールアドレスから。
  • $ name -送信者の名前
  • 戻り値-現在のインスタンスを返します

例えば、

$email = \Email::forge();
$email->from('[email protected]', 'My Name');

件名

  • 目的-メッセージの件名を設定する
  • パラメータ-$ subject-電子メールメッセージの件名
  • 戻り値-現在のインスタンスを返します

例えば、

$email = \Email::forge();
$email->subject('Suject of the mail message');

to

  • 目的-受信者のメールアドレスを設定するには
  • パラメータ-
  • $ email -電子メールアドレスまたは電子メールアドレスの配列。
  • $ name -受信者名
  • 戻り値-現在のインスタンスを返します

例えば、

$email = \Email::forge();
$email->to('[email protected]', 'My Dear Name');
$email->to (array(
   '[email protected]',
   '[email protected]' => 'My Dear friend',
));

ヘッダ

  • 目的-電子メールメッセージにカスタムヘッダーを設定するには
  • パラメータ-
  • $ header -ヘッダータイプまたはヘッダーの配列。
  • $ value -ヘッダーの値
  • 戻り値-現在のインスタンスを返します

例えば、

$email = \Email::forge();
$email->header('X-SMTPAP', 'XXXXXXXX');
$email>reply_to (array(
   'X-SMTPAP'  => 'XXXXXX',
   'X-SMTPAP2' > 'XXXXXA',
));

つける

  • 目的-電子メールメッセージにファイルを添付するには
  • パラメータ-
  • $ file -ファイルパス。
  • $ inline -ファイルをインラインで添付するかどうか。
  • $ cid -コンテンツ識別子。
  • $ mime -添付ファイルのMIMEタイプ。
  • $ name -添付ファイル名の上書き
  • 戻り値-現在のインスタンスを返します

例えば、

$email = \Email::forge();
$email>attach(DOCROOT.'attachments/sample_attachment.pdf');

send

  • 目的-メールを送信します。
  • パラメータ-
  • $ validate -メールアドレスを検証するかどうか
  • 戻り値-trueまたはfalse

例えば、

$email = \Email::forge();
try{
   $email->send();

} catch(\EmailSendingFailedException $e) {
  //The driver could not send the mail.

} catch(\EmailValidationFailedException $e) {
  //One or more email addresses failed validation.
}

作業用メールのサンプル

前の章で学習したAPIを使用して、メッセージを送信する簡単なコードを作成しましょう。 以下は、メッセージを送信する最も簡単なコードです。

$email = Email::forge();
$email->from('[email protected]', 'person1');
$email->to('[email protected]', 'person2');
$email->subject('Add something');
$email->body('contents of mail'); $email->send();

FuelPHP-プロファイラー

  • プロファイラー*は、アプリケーションのパフォーマンスを分析および改善するための重要なツールの1つです。 FuelPHPは、アプリケーションをプロファイルするための優れたプロファイラーを提供します。 この章では、FuelPHPのプロファイルについて学びましょう。

プロファイリングを有効にする

プロファイリングはデフォルトで無効になっています。 プロファイリングを有効にするには、メイン構成ファイルfuel/app/config/config.phpで次のように属性プロファイリングをtrueに設定します。

'profiling'  => true,

これで、アプリケーションでプロファイリングが有効になりました。 プロファイリングを有効にすると、次のスクリーンショットに示すように、要求されたすべてのページのプロファイリング情報とともに、ページの下部に追加のタブが表示されます。

プロファイリングを有効化

プロファイラー情報

プロファイラーにはタブ付きのインターフェイスがあり、次のデータで構成されています。

  • コンソール-エラー、ログエントリ、メモリ使用量、または実行タイミングに関する情報を提供します。
  • ロード時間-リクエストのロード時間を表示します。
  • データベース-実行されたクエリの数と実行時間。
  • メモリ-リクエストに使用されるメモリの合計。
  • ファイル-すべてのPHPファイルを表示します。
  • Config -リクエストの最後の設定内容。
  • セッション-リクエストの最後のセッションの内容。
  • GET -$ _GET配列の内容。
  • POST -$ _POST配列の内容。

プロファイラークラス

プロファイラークラスは、プロファイル情報を追加するために使用されます。 PHPQuickProfiler(PQP)のカスタマイズされたバージョンを実装します。 プロファイラーには、プロファイラーの初期状態を制御するjavaScript変数のコレクションが含まれています。

  • プロファイラー*クラスは、次の*メソッド*をサポートしています-

マーク()

markメソッドは、プロファイラーに速度マーカーを追加します。 ロード時間を示します。

Profiler::mark('my custom code');

mark_memory()

*mark_memory* メソッドは、プロファイラーにメモリマーカーを追加します。 入力が指定されていない場合、その時点でのメモリ使用量がログに記録されます。 以下に示すように変数と変数のラベルを指定すると、変数のメモリ使用量が表示され、指定されたラベルを使用してラベルが付けられます。
mark_memory($this, 'My Employee Controller memory usage');

コンソール()

コンソールメソッドは、プロファイラーにログエントリを追加するだけです。

Profiler::console('log entry');

FuelPHP-エラー処理とデバッグ

FuelPHPは、エラーの処理とアプリケーションのデバッグのための優れたサポートを提供します。 この章でエラー処理とデバッグを理解しましょう。

エラー処理

FuelPHPのエラー処理は例外に基づいています。 FuelPHPは、すべての古いphpエラーに対してPhpErrorException例外を提供します。 FuelPHPは、PHPコードでエラーが発生するたびにPhpErrorExceptionを発生させます。 FuelPHPでは、さまざまなHTTPステータスコードのカスタムエラーページを簡単に表示することもできます。

ファイルが見つかりませんエラー

FuelPHPは、未知のリクエストを処理する新しい例外クラスHttpNotFoundExceptionを提供します。 時々、処理されないかもしれない要求に遭遇するかもしれません。 その時点で、HttpNotFoundExceptionをスローできます。

デフォルトでは、ルート構成ファイルfuel/app/config/routes.phpで、400エントリを使用してHttpNotFoundExceptionのデフォルトページが構成されます。 HttpNotFoundExceptionが発生するたびに、リクエストは400ページにリダイレクトされます。

'_404_'   => 'welcome/404',   //The main 404 route

内部エラー

FuelPHPは、すべてのサーバーエラーを処理する新しい例外クラスHttpServerErrorExceptionを提供します。 内部エラーのため、指定されたリクエストを処理できない場合があります。 その時点で、HttpServerErrorExceptionをスローするだけです。

デフォルトでは、500エントリを使用して、ルート構成ファイルfuel/app/config/routes.phpでHttpServerErrorExceptionのデフォルトページが構成されます。 HttpServerErrorExceptionが発生するたびに、リクエストは500ページにリダイレクトされます。

'_500_'   => 'welcome/500',   //The main 500 route

このページはエラーをログに記録し、ページに書式設定されたエラーを表示し、時々システム管理者に通知を送信します。

アクセス違反エラー

FuelPHPは、アクセス違反を処理する新しい例外クラスHttpNoAccessExceptionを提供します。 アクセス制限のため、リクエストを処理できない場合があります。 その時点で、HttpNoAccessExceptionをスローできます。

デフォルトでは、403エントリを使用して、ルート構成ファイルfuel/app/config/routes.phpでHttpNoAccessExceptionのデフォルトページが構成されます。 HttpNoAccessExceptionが発生するたびに、リクエストは403ページにリダイレクトされます。

'_403_'   => 'welcome/403',    //The main 403 route

このページには、アクセス違反情報が表示されます。

デバッグ

デバッグは、アプリケーションを開発する最も頻繁なアクティビティの1つです。 FuelPHPは、アプリケーションのデバッグアクティビティを処理する Debug という単純なクラスを提供します。 この章では、Debugクラスとそのメソッドについて学びましょう。

デバッグクラス

デバッグクラスは、変数、オブジェクト、配列などの詳細情報を表示するユーティリティメソッドを提供します。 デバッグクラスは次のメソッドを提供します。

dump

dumpメソッドは、複数の混合値をフォーマットされた構造化された方法でブラウザーに返します。

Debug::dump($var1, $var2);

backtrace()

backtraceは、コードの現在の実行に関する詳細情報を表示します。 PHPファイル情報、現在の行、および以前のすべてのアクションが表示されます。

Debug::backtrace();

クラス()

すべてのクラスのリストを返します。

Debug::classes();

interfaces()

すべてのインターフェイスクラスのリストを返します。

Debug::interfaces();

()を含む

実行時に現在ロードされているすべてのインクルードファイルのリストを返します。

Debug::includes();

関数()

すべての関数のリストを返します。

Debug::functions();

定数()

すべての定数のリストを返します。

Debug::constants();

extensions()

すべての拡張機能のリストを返します。

Debug::extensions();

headers()

すべてのHTTPヘッダーのリストを返します。

Debug::headers();

phpini()

php.iniファイルから読み取った構成設定のリストを印刷します。

Debug::phpini();

FuelPHP-単体テスト

単体テストは、大規模プロジェクトの開発に不可欠なプロセスです。 *単体テスト*は、開発のあらゆる段階でアプリケーションのコンポーネントのテストを自動化するのに役立ちます。 アプリケーションのコンポーネントがプロジェクトのビジネス仕様に従って動作していない場合に警告します。 単体テストは手動で実行できますが、多くの場合自動化されています。

PHPUnit

FuelPHPフレームワークは、PHPUnitテストフレームワークと統合されます。 FuelPHPフレームワークの単体テストを作成するには、PHPUnitをセットアップする必要があります。 PHPUnitがインストールされていない場合は、ダウンロードしてインストールします。 次のコマンドを使用して、システムでのPHPUnitの可用性を確認できます。

phpunit --version

PHPUnitが使用可能な場合、次のような結果が表示されます。

PHPUnit 5.1.3 by Sebastian Bergmann and contributors.

単体テストの作成

ユニットテストを記述するためにFuelPHPが提供する標準の場所は、fuel/app/testsです。 コントローラー、モデル、ビュー、プレゼンターの単体テストを別々のフォルダーに書き込むことができます。 Model_Employeeオブジェクトを検証する単体テストを作成しましょう。

  • *ステップ1 *-fuel/app/testsフォルダーの下にモデルのフォルダーを作成します。
  • *ステップ2 *-fuel/app/tests/model/フォルダーの下にファイルemployee.phpを作成します。
  • *ステップ3 *-PHPUnitで提供されるTestCaseクラスを拡張して、新しいテストクラスTest_Model_Employeeを作成します。
  • *ステップ4 *-メソッドtestInstanceOfEmployee()を記述して、PHPUnitのTestCaseクラスによって提供されるassertInstanceOf()メソッドを使用して、従業員オブジェクトの作成を資産化します。

以下は完全なコードです-

<?php
   class Test_Model_Employee extends TestCase {
      public function testInstanceOfEmployee() {
         $this->assertInstanceOf(Model_Employee::class, new Model_Employee());
      }
   }

テストグループの作成

FuelPHPには、テストケースのグループを作成するオプションがあります。 グループの作成は、docblock属性@groupを追加するのと同じくらい簡単です。 MyTestグループ内にテストケースを含めます。

<?php
  /* *
     * @group MyTest
   */
   class Test_Model_Employee extends TestCase {
      public function testInstanceOfEmployee() {
         $this->assertInstanceOf(Model_Employee::class, new Model_Employee());
      }
   }

テストを実行

ディレクトリ内のすべてのテストを実行するには、次のコマンドを使用します。

$ php oil test

特定のテストグループを実行するには、次のコマンドを使用します。

$ php oil test --group = MyTest

コマンドを実行すると、次の応答が返されます。

Tests Running...This may take a few moments.
PHPUnit 5.1.3 by Sebastian Bergmann and contributors.
                                        1/1 (100%).
Time: 123 ms, Memory: 8.00Mb
OK (1 test, 1 assertion)

FuelPHP-完全な作業例

この章では、FuelPHPでMVCベースの完全なBookStoreアプリケーションを作成する方法を学びます。

ステップ1プロジェクトを作成する

以下のコマンドを使用して、FuelPHPで「BookStore」という名前の新しいプロジェクトを作成します。

oil create bookstore

ステップ2レイアウトを作成する

アプリケーションの新しいレイアウトを作成します。 ファイルfuel/app/views/layout.phpにlayout.phpを作成します。 コードは次のとおりです。

fuel/app/views/layout.php

<!DOCTYPE html>
<html lang = "en">
   <head>
      <meta charset = "utf-8">
      <meta http-equiv = "X-UA-Compatible" content = "IE = edge">
      <meta name = "viewport" content = "width = device-width, initial-scale = 1">
      <title><?php echo $title; ?></title>

      <!-- Bootstrap core CSS -->
      <link href = "/assets/css/bootstrap.min.css" rel = "stylesheet">
      <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
      </script>
      <script src = "/assets/js/bootstrap.min.js"></script>
   </head>

   <body>
      <nav class = "navbar navbar-inverse navbar-fixed-top">
         <div class = "container">
            <div class = "navbar-header">

               <button type = "button" class = "navbar-toggle collapsed"
                  datatoggle = "collapse" data-target = "#navbar"
                  aria-expanded = "false" ariacontrols = "navbar">
                  <span class=  "sr-only">Toggle navigation</span>
                  <span class = "icon-bar"></span>
                  <span class = "icon-bar"></span>
                  <span class = "icon-bar"></span>
               </button>
               <a class = "navbar-brand" href = "#">FuelPHP Sample</a>
            </div>

            <div id = "navbar" class = "collapse navbar-collapse">
               <ul class = "nav navbar-nav">
                  <li class = "active"><a href = "/book/index">Home</a></li>
                  <li><a href = "/book/add">Add book</a></li>
               </ul>
            </div><!--/.nav-collapse -->
         </div>
      </nav>

      <div class = "container">
         <div class = "starter-template" style = "padding: 50px 0 0 0;">
            <?php echo $content; ?>
         </div>

      </div><!--/.container -->
   </body>

</html>

ここでは、ブートストラップテンプレートを使用しています。 FuelPHPは、ブートストラップテンプレートをサポートしています。 タイトルとコンテンツの2つの変数を作成しました。 titleは現在のページのタイトルを指定するために使用され、contentは現在のページの詳細を指定するために使用されます。

ステップ3コントローラーを作成する

新しいコントローラーController_Bookを作成して、ブックを表示、追加、編集、および削除します。 新しいファイルfuel/app/classes/controller/book.phpを作成し、次のコードを配置します。

fuel/app/classes/controller/book.php

<?php
   class Controller_Book extends Controller_Template {
      public $template = 'layout';
      public function action_index() {

        //Create the view object
         $view = View::forge('book/index');

        //set the template variables
         $this->template->title = "Book index page";
         $this->template->content = $view;
      }
   }

ここでは、テンプレートコントローラーを継承してブックコントローラーを作成し、デフォルトのテンプレートをfuel/app/views/layout.phpに設定しています。

ステップ4インデックスビューを作成する

fuel/app/viewsフォルダーの下のviewsディレクトリーにフォルダーを作成します。 次に、bookフォルダー内にindex.phpファイルを作成し、次のコードを追加します。

fuel/app/views/index.php

<h3>index page</h3>

今のところ、基本的なブックコントローラーを作成しました。

ステップ5デフォルトルートを変更する

デフォルトのルートを更新して、アプリケーションのホームページをコントローラーの予約に設定します。 デフォルトのルーティング設定ファイルfuel/app/config/routes.phpを開き、次のように変更します。

fuel/app/config/routes.php

<?php
   return array (
      '_root_'  => 'book/index', //The default route
      '_404_'   => 'welcome/404',//The main 404 route

      'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),
   );

ここで、URLをリクエストすると、http://localhost:8080/は次のようにブックコントローラーのインデックスページを返します。

インデックスページを返す

ステップ6データベースを作成する

次のコマンドを使用して、MySQLサーバーに新しいデータベースを作成します。

create database finddevguides_bookdb

次に、次のコマンドを使用してデータベース内にテーブルを作成します。

CREATE TABLE book (
   id INT PRIMARY KEY AUTO_INCREMENT,
   title VARCHAR(80) NOT NULL,
   author VARCHAR(80) NOT NULL,
   price DECIMAL(10, 2) NOT NULL
);

次のSQLステートメントを使用して、テーブルにサンプルレコードを挿入します。

INSERT
INTO
   book(title,
   author,
   price)
VALUES(
   'The C Programming Language',
   'Dennie Ritchie',
   25.00
),(
   'The C++ Programming Language',
   'Bjarne Stroustrup',
   80.00
),(
   'C Primer Plus (5th Edition)',
   'Stephen Prata',
   45.00
),('Modern PHP', 'Josh Lockhart', 10.00),(
   'Learning PHP, MySQL & JavaScript, 4th Edition',
   'Robin Nixon',
   30.00
)

手順7データベースの構成

fuel/app/configにあるデータベース構成ファイルdb.phpを使用してデータベースを構成します。

fuel/app/config/db.php

<?php
   return array (
      'development' => array (
         'type'           => 'mysqli',
         'connection'     => array (
            'hostname'       => 'localhost',
            'port'           => '3306',
            'database'       => 'finddevguides_bookdb',
            'username'       => 'root',
            'password'       => 'password',
            'persistent'     => false,
            'compress'       => false,
         ),
         'identifier'     => '`',
         'table_prefix'   => '',
         'charset'        => 'utf8',
         'enable_cache'   => true,
         'profiling'      => false,
         'readonly'       => false,
      ),
      'production' => array (
         'type'           => 'mysqli',
         'connection'     => array (
            'hostname'       => 'localhost',
            'port'           => '3306',
            'database'       => 'finddevguides_bookdb',
            'username'       => 'root',
            'password'       => 'password',
            'persistent'     => false,
            'compress'       => false,
         ),
         'identifier'     => '`',
         'table_prefix'   => '',
         'charset'        => 'utf8',
         'enable_cache'   => true,
         'profiling'      => false,
         'readonly'       => false,
      ),
   );

ステップ8 Ormパッケージを含める

メイン構成ファイルを更新して、ORMパッケージを含めます。 「fuel/app/config/」にあります。

fuel/app/config/config.php

'always_load' => array (
   'packages' => array (
      'orm'
   ),
),

ステップ9モデルを作成する

「fuel/app/classes/model」にあるbook.phpでブックモデルを作成します。 次のように定義されます-

fuel/app/classes/model/book.php

<?php
   class Model_Book extends Orm\Model {
      protected static $_connection = 'production';
      protected static $_table_name = 'book';
      protected static $_primary_key = array('id');

      protected static $_properties = array (
         'id',
         'title' => array (
            'data_type' => 'varchar',
            'label' => 'Book title',
            'validation' => array (
               'required',
               'min_length' => array(3),
               'max_length' => array(80)
            ),

            'form' => array (
               'type' => 'text'
            ),
         ),
         'author' => array (
            'data_type' => 'varchar',
            'label' => 'Book author',
            'validation' => array (
               'required',
            ),
            'form' => array (
               'type' => 'text'
            ),
         ),
         'price' => array (
            'data_type' => 'decimal',
            'label' => 'Book price',
            'validation' => array (
               'required',
            ),
            'form' => array (
               'type' => 'text'
            ),
         ),
      );
      protected static $_observers = array('Orm\\Observer_Validation' => array (
         'events' => array('before_save')
      ));
   }

ここでは、データベースの詳細をモデルのプロパティとして指定しました。 検証の詳細もあります。

ステップ10書籍を表示する

ブックコントローラーのインデックスアクションを更新して、データベース内の利用可能なブックを一覧表示します。

fuel/app/classes/controller/book.php

<?php
   class Controller_Book extends Controller_Template {
      public $template = 'layout';
      public function action_index() {

        //Create the view object
         $view = View::forge('book/index');

        //fetch the book from database and set it to the view
         $books = Model_Book::find('all');
         $view->set('books', $books);

        //set the template variables
         $this->template->title = "Book index page";
         $this->template->content = $view;
      }
   }

ここでは、 orm を使用してデータベースから書籍の詳細を取得し、書籍の詳細をビューに渡しました。

手順11インデックスビューを更新する

「fuel/app/views/book」にあるビューファイルindex.phpを更新します。 完全に更新されたコードは次のとおりです。

fuel/app/views/book/index.php

<table class = "table">
   <thead>
      <tr>
         <th>#</th>
         <th>Title</th>
         <th>Author</th>
         <th>Price</th>
         <th></th>
      </tr>
   </thead>

   <tbody>
      <?php
         foreach($books as $book) {
      ?>

      <tr>
         <td><?php echo $book['id']; ?></td>
         <td><?php echo $book['title']; ?></td>
         <td><?php echo $book['author']; ?></td>
         <td><?php echo $book['price']; ?></td>
         <td>
            <a href = "/book/edit/<?php echo $book['id']; ?>">Edit</a>
            <a href = "/book/delete/<?php echo $book['id']; ?>">Delete</a>
         </td>
      </tr>

      <?php
      }
      ?>
   </tbody>
</table>
<ul>
</ul>

ここで、URLを要求すると、http://localhost:8080/は次のようにページを表示します-

インデックスビュー

ステップ12ブックを追加するアクションを作成する

新しい本を書店に追加する機能を作成します。 次のように、ブックコントローラーで新しいアクションaction_addを作成します。

public function action_add() {

  //create a new fieldset and add book model
   $fieldset = Fieldset::forge('book')->add_model('Model_Book');

  //get form from fieldset
   $form = $fieldset->form();

  //add submit button to the form
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));

  //build the form  and set the current page as action
   $formHtml = $fieldset->build(Uri::create('book/add'));
   $view = View::forge('book/add');
   $view->set('form', $formHtml, false);

   if (Input::param() != array()) {
      try {
         $book = Model_Book::forge();
         $book->title = Input::param('title');
         $book->author = Input::param('author');
         $book->price = Input::param('price');
         $book->save();
         Response::redirect('book');
      } catch (Orm\ValidationFailed $e) {
         $view->set('errors', $e->getMessage(), false);
      }
   }
   $this->template->title = "Book add page";
   $this->template->content = $view; }

ここでは、次の2つのプロセスが実行されています。

  • FieldsetメソッドとBookモデルを使用してブックを追加するブックフォームを作成します。
  • ユーザーが書籍情報を入力してフォームを送信したときの書籍フォームの処理。 入力されたデータのInput :: param()メソッドをチェックすることで見つけることができます。 フォームの処理には、次の手順が含まれます-
  • 書籍情報を収集します。
  • 書籍情報を検証します。 saveメソッドの前に検証が呼び出されるように設定済みです。 検証に失敗すると、Orm \ ValidationFailed例外がスローされます。
  • 書籍情報をデータベースに保存します。
  • 成功時にユーザーをインデックスページにリダイレクトします。 それ以外の場合は、フォームを再度表示します。

同じアクションでフォームを処理するだけでなく、フォームを表示する両方を行っています。 ユーザーが初めてアクションを呼び出すと、フォームが表示されます。 ユーザーが書籍情報を入力してデータを送信すると、フォームが処理されます。

ステップ13ブックアクションを追加するためのビューを作成する

ブックアクションを追加するためのビューを作成します。 新しいファイルfuel/app/views/book/add.phpを作成し、次のコードを入力します。

<style>
   #form table {
      width: 90%;
   }
   #form table tr {
      width: 90%
   }
   #form table tr td {
      width: 50%
   }
   #form input[type = text], select {
      width: 100%;
      padding: 12px 20px;
      margin: 8px 0;
      display: inline-block;
      border: 1px solid #ccc;
      border-radius: 4px;
      box-sizing: border-box;
   }
   #form input[type = submit] {
      width: 100%;
      background-color: #3c3c3c;
      color: white;
      padding: 14px 20px;
      margin: 8px 0;
      border: none;
      border-radius: 4px;
      cursor: pointer;
   }
   #form div {
      border-radius: 5px;
      background-color: #f2f2f2;
      padding: 20px;
   }
</style>

<div id = "form">
   <h2>Book form</h2>

   <?php
      if(isset($errors)) {
         echo $errors;
      }
      echo $form;
   ?>
</div>

ここでは、アクションメソッドで作成されたフォームを表示しています。 さらに、エラーがあれば表示しています。

手順14ブックの追加アクションの確認

URL http://localhost:8080/book/addをリクエストするか、[ブックナビゲーションの追加]リンクをクリックすると、次のようなフォームが表示されます。

Form

更新されたビュー

データ付きのフォーム

データ付きフォーム

書籍情報を入力してページを送信すると、書籍情報がデータベースに保存され、次のようにページがインデックスページにリダイレクトされます。

新しく追加された書籍のある書籍リスト

書籍リスト

ステップ15ブックを編集するアクションを作成する

既存の書籍情報を編集および更新する機能を作成します。 次のように、ブックコントローラーで新しいアクションaction_editを作成します。

public function action_edit($id = false) {
   if(!($book = Model_Book::find($id))) {
      throw new HttpNotFoundException();
   }

  //create a new fieldset and add book model
   $fieldset = Fieldset::forge('book')->add_model('Model_Book');
   $fieldset->populate($book);

  //get form from fieldset
   $form = $fieldset->form();

  //add submit button to the form
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));

  //build the form  and set the current page as action
   $formHtml = $fieldset->build(Uri::create('book/edit/' . $id));
   $view = View::forge('book/add');
   $view->set('form', $formHtml, false);

   if (Input::param() != array()) {
      try {
         $book->title = Input::param('title');
         $book->author = Input::param('author');
         $book->price = Input::param('price');
         $book->save();
         Response::redirect('book');
      } catch (Orm\ValidationFailed $e) {
         $view->set('errors', $e->getMessage(), false);
      }
   }
   $this->template->title = "Book edit page";
   $this->template->content = $view;
}

addアクションに似ていますが、ページを処理する前にidでリクエストされたブックを検索することを除いて データベースに書籍情報が見つかった場合は、続行してフォームに書籍情報を表示します。 それ以外の場合は、ファイルが見つからないという例外をスローして終了します。

手順16編集アクションのビューを作成する

ブックアクションを編集するためのビューを作成します。 ここでは、アクションの追加に使用したのと同じビューを使用しています。

ステップ17ブックの編集アクションを確認します。

書籍一覧ページで任意の書籍の編集リンクをクリックすると、対応する書籍フォームが次のように表示されます-

本の詳細を含むフォーム

フォームブックの詳細

ステップ18ブックを削除するアクションを作成する

書店から本を削除する機能を作成します。 次のように、ブックコントローラーで新しいアクションaction_deleteを作成します。

public function action_delete($id = null) {
   if ( ! ($book = Model_Book::find($id))) {
      throw new HttpNotFoundException();

   } else {
      $book->delete();
   }
   Response::redirect('book');
}

ここでは、提供された書籍IDを使用して、データベース内の書籍の存在を確認しています。 書籍が見つかった場合、その書籍は削除され、インデックスページにリダイレクトされます。 それ以外の場合、ページが見つからないという情報が表示されます。

手順19削除アクションの確認

書籍リストページの[削除]リンクをクリックして、削除アクションを確認します。 要求された本を削除してから、再びインデックスページにリダイレクトされます。

最後に、書籍情報を追加、編集、削除、および一覧表示するためのすべての機能が作成されます。

FuelPHPは、他のMVCベースのPHPフレームワークと比較して、シンプルで、柔軟で、スケーラブルで、簡単に構成できます。 最新のMVCフレームワークのすべての機能を提供します。 そのまま使用することも、ニーズに合わせて完全に変更することもできます。 とりわけ、これはWeb開発に最適です。