Closed5
🕊 Phalcon(PHPフレームワーク)キャッチアップ

Phalconの公式ドキュメントっぽいもののまとめ
とりあえずアイコンかっけええ...
参考記事
環境構築

Phalconについて
- アクセス制御リストがある
ロールは、リソースへのアクセスを要求するオブジェクトであり、ACLの仕組みによってアクセスを許可したり拒否したりすることができる
- アノテーションが存在する
- PhalconはMVC構成になっている
- コンポーネントを使用すると、様々なタイプのMVC構造を実行することができる
// シングルモジュール
use Phalcon\Loader;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Application;
use Phalcon\Di\FactoryDefault;
// マルチモジュール
use Phalcon\Loader;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Dispatcher;
use Phalcon\Mvc\Application;
use Phalcon\Di\FactoryDefault;
// マルチモジュールの場合
// 複数のモジュールで同じドキュメントルートを使用する
// 特別なブートストラップファイルが必要っぽい
ときPhalcon \ MVC \アプリケーションが登録されたモジュールを持って、常にすべての一致したルートが有効なモジュールを返すことが必要です。登録された各モジュールには、モジュール自体をセットアップする機能を提供する関連クラスがあります。各モジュールクラス定義は、registerAutoloaders()およびregisterServices()という2つのメソッドを実装する必要があります。これらは、実行されるモジュールに応じて、Phalcon \ Mvc \ Applicationによって呼び出されます。引用:公式ドキュメント
- キャッシュによるパフォーマンスの向上
- 基本的には各種細かく設定するよりもPhalconに任せたほうが早い
- 一応、自身で設定して動かすことができる
- cronジョブ、スクリプト、コマンドユーティリティなどを作成するのに便利な機能がある
- モジュール読み込んでロジック書くだけっぽい
- Phalconでのコントローラの扱い(多分めっちゃ大事)
- 基本的にはデフォルトの動きがある
- リダイレクト先や
if``else
などで分岐したい時になどは詳しく設定できる
- Cookieの詳細な設定ができる
- 暗号化機能がある
- コンポーネントはAES-256-CFBを使用した安全な暗号化を提供している
- 従来のPHPのモデルよりも抽象レイヤーのデータベース操作ができる
- 公式ドキュメントには
MySQL
,Postgresql
,Sqlite
のサンプルコードがある - 独自のデータベースアダプタも設定できる
- 公式ドキュメントには
- DI(依存性インジェクション)がある
- コントローラーをインスタンス化し、コントローラーに対して必要なアクションを実行するコンポーネントすることができる
- より詳細な設定をできる.くらいの解釈
- いろいろな種類のテキストをエスケープすることができる

補足
環境構築に関しては、そもそもローカル環境で作成しようとするとPHPのバージョンが古すぎて適用できない
おそらく dockerで環境構築する のが無難である

PHPフレームワーク Phalcon Youtube
Phalconについて
- 高速だから開発がしやすい
- 理由は、フレームワーク自体がC言語で実装されているため
- 多くのリクエストを受けられるように設計されている
- メモリ使用量も少ない
動作環境
-
Vagrant
やdocker
などの仮想環境を使用する
より詳しくPhalconを知る
- Controller
-
indexAction()
などのAction
をつけなければならない -
Phalcon
では、コンストラクタの宣言はなく、代わりにInitialize()
を呼ぶ
-
class User extends \Phalcon\Mvc\Model {
public function initialize() {
$this->setSource(`users`);
}
}
// 以下のようにテーブル名は複数名にしてクラス名で扱う名称を変更する方法もある
$this->setSource(`users`);
- Model
- モデルはDBと1対1の関係になっている
- 記述方法は以下...
// tag_dbというテーブルがあったとして...
// 以下のようにTagDbと記述する
class TagDb extends \Phalcon\Mvc\Model {
}
-
PHQL
- Phalconでは仮想的なSQLを扱うことができるPHQLというものがある
- 普通のクエリも扱えるけど、クエリビルダを扱ったほうが簡単に扱える
これは
spring boot
のJPAみたいなイメージか... - クエリビルダは、Railsっぽい感じで、メソッドチェーンでSQL文を発行できる
-
Volt
-
Phalcon
の特徴的なテンプレートエンジン -
Python
のJinja2
というテンプレートエンジンを参考に作成された -
Volt
の有効化が必要 - 使用される理由は高速であるから
-
-
ControllerやModel以外でDIを取得したい場合
- DIを他からも呼び出すこともできる
特徴
- Phalconだけでは高速化されない、DBの最適化やキャッシュの管理をすることで高速化できる
- 日本語ドキュメントない問題は、プロジェクトに参加したりとか..
- 今だと公式ドキュメントは一部日本語化に適用している
- 公式ドキュメントっぽいものは全て日本語化しているのでそれだけで十分っぽい
- テストは
PHPUnit
を使用する - PhalconのDIの機能をうまく使用するのが大事
障害
- モデルとDBが1対1だからこそ、機能拡張が難しい
- より拡大する案件などでは以下のような階層にする
- 複雑なコードを管理しやすくなる
- ロジックや受け渡しなど明確に分かれているのでコードの見通しが良くなる
// 従来 or 小規模
Controller > Model
// 拡張フェーズ
Controller > Service > Model

Phalcon 公式ドキュメント MVCチュートリアル
- Phalconのファイル構成
.
└── tutorial
├── app
│ ├── controllers
│ │ ├── IndexController.php
│ │ └── SignupController.php
│ ├── models
│ │ └── Users.php
│ └── views
└── public
├── css
├── img
├── index.php
└── js
-
bootstrap
- オートローダーコンポーネントの登録
- サービスの設定とDependency Injectionへの登録
- アプリケーションのHTTPリクエストの処理
-
index.html
の初期設定
<?php
use Phalcon\Loader;
use Phalcon\Mvc\View;
use Phalcon\Mvc\Application;
use Phalcon\Di\FactoryDefault;
use Phalcon\Mvc\Url as UrlProvider;
// リソースの特定に役立つ絶対パス定数を定義する
define('BASE_PATH', dirname(__DIR__));
define('APP_PATH', BASE_PATH . '/app');
// オートローダーの登録
$loader = new Loader();
$loader->registerDirs(
[
APP_PATH . '/controllers/',
APP_PATH . '/models/',
]
);
$loader->register();
// DIの生成
$di = new FactoryDefault();
// ビューコンポーネントの設定
$di->set(
'view',
function () {
$view = new View();
$view->setViewsDir(APP_PATH . '/views/');
return $view;
}
);
// ベースURIの設定
$di->set(
'url',
function () {
$url = new UrlProvider();
$url->setBaseUri('/');
return $url;
}
);
$application = new Application($di);
try {
// リクエストのハンドリング
$response = $application->handle();
$response->send();
} catch (\Exception $e) {
echo 'Exception: ', $e->getMessage();
}
-
Controller
の作成- デフォルトでは、PhalconはIndexControllerという名前のコントローラを探す.
- コントローラクラスの後ろには、
Controller
が必要である - アクションの後には
Action
をつける必要がある
<?php
use Phalcon\Mvc\Controller;
class IndexController extends Controller
{
public function indexAction()
{
echo '<h1>Hello!</h1>';
}
}
-
View
に出力する- Phalconは、最後に実行されたコントローラーと同じ名前のディレクトリー配下にある、最後に実行されたアクションと同じ名前のビューを探す
今回の場合は (app/views/index/index.phtml)
<?php echo "<h1>Hello!</h1>";
- サインアップフォームのデザイン
<?php
echo "<h1>Hello!</h1>";
// 以下のコードは改行の時に使用する
echo PHP_EOL;
echo PHP_EOL;
echo $this->tag->linkTo(
'signup',
'Sign Up Here!'
);
上記の生成されたHTMLコードでは、新しいコントローラにリンクする<a>タグ
を表示する
上記のコードは以下のようになる
<h1>Hello!</h1>
<a href="/signup">Sign Up Here!</a>
-
SignController
を作成する
use Phalcon\Mvc\Controller;
class SignupController extends Controller
{
public function indexAction()
{
}
}
-
app/views/signup/index.phtml
フォーム作成
<h2>Sign up using this form</h2>
<?php echo $this->tag->form("signup/register"); ?>
<p>
<label for="name">Name</label>
<?php echo $this->tag->textField("name"); ?>
</p>
<p>
<label for="email">E-Mail</label>
<?php echo $this->tag->textField("email"); ?>
</p>
<p>
<?php echo $this->tag->submitButton("Register"); ?>
</p>
</form>
このスクラップは2022/09/05にクローズされました