
Phalconの新しいバージョンのリリースを発表できることを嬉しく思います。
前のバージョンがリリースされてから2か月以上が経過し、開発チームはC拡張として記述された最速のPHPフレームワークの最大かつ最も深刻なリリースの1つを発表しました。
新しいバージョンには、多くの新機能、バグ修正、最適化が含まれています。 また、サイトを更新し、APIのドキュメントと説明の主要な更新に備えています。
Innovations Phalcon 1.2.0:
- コンパイルされたVoltテンプレートの動的パス
- ボルトに力を与える
- Phalcon \ Mvc \ Urlの静的および動的パスのリンク
- ファルコン\ Mvc \ビュー\シンプル
- JSONの改善された作業
- ORMでの多対多のサポート
- 仮想外部キーの使用
- JavascriptとCSSの縮小
- PHQLで変数(リテラル)を無効にする
- 拡張パーシャル
- Phalcon \ Tag as a Serviceの使用
- ボルトのマクロ
- 警告ではなくBadMethodCallException
- デバッグコンポーネント
ダウンロードする
新しいモットー
謝辞
したがって、Phalcon 1.2.0で実装されたもの
1.コンパイルされたVoltテンプレートの動的パス
Voltテンプレートパラメータの「compiledPath」オプションは、テンプレートキャッシュファイルを書き込む前に必要なアクションを実行できる匿名関数を受け入れるようになりました。
// .php $volt->setOptions([ 'compiledPath' => function($templatePath) { return $templatePath . '.php'; } ]); // $volt->setOptions([ 'compiledPath' => function($templatePath) { $dirName = dirname($templatePath); if (!is_dir(CACHE_DIR . $dirName)) { mkdir(CACHE_DIR . $dirName,0755,true); } return CACHE_DIR . $dirName . '/'. $templatePath . '.php'; } ]);
2.ボルトに力を与える
テンプレートエンジンでは、必要な拡張機能を追加し、動作、演算子を変更し、関数とフィルターを追加できます。 たとえば、以下のクラスを使用すると、テンプレートで任意のphp関数を使用できます。
class PhpFunctionExtension { public function compileFunction($name, $arguments) { if (function_exists($name)) { return $name . '('. $arguments . ')'; } } }
この拡張機能を追加します。
$volt->getCompiler()->addExtension(new PHPFunctionExtension());
3. Phalcon \ Mvc \ Urlの静的および動的パスのリンク
これで、静的ファイルへのリンクに別のパスを指定できるようになりました。たとえば、写真またはjsファイルとページへのリンクです。 この機能は、CDNを使用する場合に特に関連します。
$di['url'] = function() { $url = new Phalcon\Mvc\Url(); // URI mod-rewrite $url->setBaseUri('/index.php?_url='); // URI CSS/Javascript/Images $url->setStaticUri('/static/'); return $url; };
4. Phalcon \ Mvc \ View \ Simple
このコンポーネントは、テンプレート階層をサポートせずに、Phalcon \ Mvc \ Viewの簡単な代替手段です。 マイクロアプリケーションでの使用と、文字列としての表現の受信に関連します。
// View service $di['view'] = function() { $view = new Phalcon\Mvc\View\Simple(); $view->setViewsDir(APP_PATH . '/views/'); return $view; };
マイクロアプリケーションで使用:
$app->map('/login', function() use ($app) { echo $app->view->render('security/login', array( 'form' => new LoginForm(), )); });
このコンポーネントは、さまざまなテンプレートエンジンとテンプレートキャッシングをサポートしています。
5. JSONの改善された作業
JSON形式でのデータの送受信がずっと簡単になりました。 データをPhalcon \ Http \ Responseに転送すると、それらは自動的にJSON形式で送信されます。
$app->post('/api/robots', function() use ($app) { $data = $app->request->getJsonRawBody(); $robot = new Robots(); $robot->name = $data->name; $robot->type = $data->type; $response = new Phalcon\Http\Response(); // if ($robot->success() == true) { $response->setJsonContent([ 'status' => 'OK', 'id' => $robot->id ]); } else { // HTTP $response->setStatusCode(500, "Internal Error"); $response->setJsonContent([ 'status' => 'ERROR', 'messages' => $status->getMessages() ]); } return $response; });
6. ORMで多対多をサポートする
ORMは多対多の関係を維持し始めています。 これにより、中間の3番目のモデルを使用して、2つのモデル間の直接的な関係を確立できます。
class Artists extends Phalcon\Mvc\Model { public $id; public $name; public function initialize() { $this->hasManyToMany( 'id', 'ArtistsSongs', 'artists_id', 'songs_id', 'Songs', 'id' ); } }
アーティストの曲は、リレーションシップエイリアスから取得できます。
$artist = Artists::findFirst(); // foreach ($artist->songs as $song) { echo $song->name; }
PHQLで多対多の関係を操作できます(これは、モデルの使用とSQLクエリの作成を簡素化するSQLのアドオンです)。
$phql = 'SELECT Artists.name, Songs.name FROM Artists JOIN Songs WHERE Artists.genre = "Trip-Hop"'; $result = $this->modelsManager->query($phql);
モデルの作成時に関連データをすぐに追加できます。必要なすべての中間接続レコードも自動的に作成されます。
$songs = array() $song = new Song(); $song->name = 'Get Lucky'; $songs[] = $song; $song = new Song(); $song->name = 'Instant Crush'; $songs[] = $song; $artist = new Artists(); $artist->name = 'Daft Punk'; $artist->songs = $songs; // $artist->save();
7.仮想外部キーの使用
仮想外部キーが指定されている場合、メインレコードに関連付けられているすべての依存要素も削除されます。
use Phalcon\Mvc\Model Phalcon\Mvc\Model\Relation; class Artists extends Model { public $id; public $name; public function initialize() { $this->hasMany('id', 'Songs', 'artists_id', [ 'foreignKey' => [ 'action' => Relation::ACTION_CASCADE ] ]); } }
アーティストを削除すると、彼の曲もすべて削除されます。
$artist = Artists::findFirst(); $artist->delete(); //
8. JavascriptとCSSの縮小
Phalcon \ Assetsコンポーネントに、静的リソースを柔軟に管理し、グループ化し、フィルタリングするだけでなく、JS / CSS(縮小)を圧縮することも教えました。 このような責任ある作業には、ダグラスクロックフォードのJsminソリューションとライアンデイのCSSMinが使用されました。
$manager = new Phalcon\Assets\Manager(array( 'sourceBasePath' => './js/', 'targetBasePath' => './js/production/' )); $manager // Javascripts ->collection('jsFooter') // ->setTargetPath('final.js') // ->setTargetUri('production/final.js') // , ->addJs('code.jquery.com/jquery-1.10.0.min.js', true, false) // ->addJs('common-functions.js') ->addJs('page-functions.js') // ( final.js ) ->join(true) // Jsmin ->addFilter(new Phalcon\Assets\Filters\Jsmin()) // , ->addFilter(new MyApp\Assets\Filters\LicenseStamper()); $manager->outputJs();
9. PHQLでの変数(リテラル)の禁止
パラメーターはPHQL内で直接使用できなくなりました;次のコードは例外をスローします。
$artist = Artists::findFirst("name = '$name'");
10.強化されたパーシャル
開発者は、パラメーターの配列をパーシャルに渡すことができます。
<?php $this->partial('footer', ['links' => $myLinks]);
Voltはこの機能もサポートしています。
{{ partial('footer', ['links': myLinks]) }} {% include 'footer' with ['links': myLinks] %}
11. Phalcon \ Tag as a Serviceの使用
静的メソッドの使用は慎重に避けていますが、まだ機能しますが、使用することはお勧めできません。 Phalcon \ Tagコンポーネントは、DI \ FactoryDefaultでサービスとして利用できるようになりました。 代わりに:
Phalcon\Tag is now a service in DI\FactoryDefault. So instead of doing this:
使用価値がある:
$this->tag->setDefault('name', $robot->name);
12.ボルトのマクロ
マクロでの作業が始まったばかりで、さらに追加されます。
{%- macro input_text(name, attributes=null) -%} {{- '<input type="' ~ name ~ '" ' -}} {%- for key, value in attributes -%} {{- key ~ '="' ~ value|e '"' -}} {%- endfor -%} {{- '/>' -}} {%- endmacro -%} {{ input_text("telephone", ['placeholder': 'Type telephone']) }}
13.警告ではなくBadMethodCallException
バージョン1.1.0より前では、間違った数のパラメーターをメソッドに渡すと警告が発生しました。 このような状況では、バージョン1.2.0から、エラーが発生した場所を正確に追跡できるBadMethodCallException例外がスローされます。
<?php $e = new Phalcon\Escaper(); $e->escapeCss('a {}', 1, 2, 3);
以下が表示されます。
Fatal error: Uncaught exception 'BadMethodCallException' with message 'Wrong number of parameters' in test.php:4 Stack trace: #0 test.php(4): Phalcon\Escaper->escapeCss('a {}', 1, 2, 3) #1 {main}
14.デバッグコンポーネント
Phalcon \ Debugコンポーネントはデバッグスタックを形成するため、開発者はどこで問題が発生したかを追跡できます。 データは構造化されています。 コンポーネントが機能するためには、開始ファイルのtry / catchブロックを削除し、その先頭に示す必要があります。
(new Phalcon\Debug)->listen();
コンポーネントの操作を示す小さなスクリーンキャストを用意しました:
さらに重要なイノベーションがいくつかあります。
- Phalcon \ Dbのネストされたトランザクション、複数の結合のサポート
- XCacheのサポート/キャッシュ用のIgbinaryキャッシュアダプター/アノテーション/ ORM-MetaData
- PHP 5.5のサポート
- プロファイルされたガイド付き最適化
変更の完全なリストはCHANGELOGで入手できます。
ダウンロードする
GitHubで新しいバージョンをビルドするか、Windows用の既製のDLLをダウンロードできます。 一部のLinuxシステムでは、既製のビルドも利用できます 。 ドキュメントも更新されます。
新しいモットー
長い間、「最速のPHPフレームワーク」というモットーの下で作業し、それに完全に準拠し、Phalconを最高速度で実行し続けました。 可能な限りすべてを最適化し、メモリ消費を節約してオーバーヘッドを削減する機会を探しました。 しかし、速度が唯一の優先事項ではありません。 バージョンごとに、Phalconをさらに便利にし、最も便利な機能を含めるようにしました。 これにより、プロジェクトは世界で最も高速で最も機能的なオープンソースソフトウェア製品の1つに成長することができました。
前進するために、私たちはモットーを変更して、ファルコンの位置を改善することにしました。 バージョン1.2.0以降、「速度と機能性の最適なバランス」というスローガンの下で取り組んできました。 私たちの主な目標は、フレームワークの速度とそれが提供する機能の最適なバランスを維持することです。 私たちは、PHPの最速のフレームワークであるだけでなく、速度と機能の面でも最適なものになりたいと考えています。
謝辞
私たちは、すべてのコミュニティメンバー、新機能に投票し、実装と検証を支援する開発者に感謝します。 ドキュメントのテストと改善を支援する人。
Phalconの開発を支援し、コミュニティに関与しているすべての人に感謝します。
ありがとう