Phalcon 2.1.0 beta 1リリース

Phalcon 2.1の最初のベータリリースを発表できることを嬉しく思います!

2.1.xリリースはより長い期間サポートされ、2.1は長期サポート( LTS )を備えた最初のバージョンになります。

2.0.xでは、いくつかの新機能を導入し、多くのバグを修正しました。 ただし、Phalcon 1.3.xとの後方互換性を維持することに常に注意が払われ、同時に開発者に2.0.xへのアップグレードを奨励しました。 これにより、開発者がアプリケーションに変更を加えて新しいブランチで動作するのに十分な時間が与えられました。

Phalcon 2.1は新しい機能を提供しますが、その一部は以前のバージョンと互換性がないため、運用システムをアップグレードする前に必ずアプリケーションを確認してください。

このリリースでの変更が更新を正当化することを確信しています:)

PHP 5.3サポートの終了


Phalcon 2.0.xは、PHP 5.3(> = 5.3.21)をサポートする最新リリースシリーズです。 この制限のため、フレームワークにパフォーマンスの改善を含めることはできません。

バージョン2.1.xからは、開発者が5.6にアップグレードすることを強くお勧めします。もうすぐPHP7が登場します。 PHP 7での作業に焦点を当てていますが、同時に、作業用のPHPの推奨バージョンは5.6です。

Phalcon\Mvc\Model\Validation非推奨です


Phalcon\Mvc\Model\ValidationPhalcon\Validation Phalcon\Mvc\Model\Validation 。 両方のコンポーネントの機能が1つの全体に統合されるため、コードベースのサポートが簡素化されます。

以前は、検証は次のように実行されていました。

 namespace Invo\Models; use Phalcon\Mvc\Model; use Phalcon\Mvc\Model\Validator\Email as EmailValidator; use Phalcon\Mvc\Model\Validator\Uniqueness as UniquenessValidator; class Users extends Model { public function validation() { $this->validate( new EmailValidator( [ 'field' => 'email', ] ) ); $this->validate( new UniquenessValidator( [ 'field' => 'username', 'message' => 'Sorry, That username is already taken', ] ) ); if ($this->validationHasFailed() == true) { return false; } } } 

Phalcon\Validation導入により、上記のコードを変更する必要があります。

 namespace Invo\Models; use Phalcon\Mvc\Model; use Phalcon\Validation; use Phalcon\Validation\Validator\Email as EmailValidator; use Phalcon\Validation\Validator\Uniqueness as UniquenessValidator; class Users extends Model { public function validation() { $validator = new Validation(); $validator->add( 'email', new EmailValidator() ); $validator->add( 'username', new UniquenessValidator( [ 'message' => 'Sorry, That username is already taken', ] ) ); return $this->validate(); } } 

同意して、この変更によりコードがより読みやすくなります。

コンストラクターPhalcon\Mvc\Model


クラスモデルコンストラクターが変更され、初期化のためにデータの配列を渡すことができるようになりました。

 $customer = new Customer( [ 'name' => 'Peter', 'status' => 'Active', ] ); 

このメソッドの使用はassign()似ています。 使用可能なセッターを使用して(特定のモデルまたは組み込みで実装されます)プロパティを割り当てます。

Phalcon\Mvc\Viewは複数のビューディレクトリをサポートします


これは、コミュニティが何度も要求している機能の1つでした。 ビューでディレクトリを指定するときに、あらゆる種類の階層を使用できるようになったことをお知らせします。 これは、複数のモジュールで再利用する場合に特に便利です。

 use Phalcon\Mvc\View; // ... $di->set( 'view', function () { $view = new View(); $view->setViewsDir( [ '/var/www/htdocs/blog/modules/backend/views/', '/var/www/htdocs/blog/common/views/', ] ); return $view; } ); 

Phalcon\Mvc\Viewが絶対パスをサポートするようになりました


Mvc\View::setLayoutsDirおよびMvc\View::setPartialsDir絶対パスを使用できるようになりMvc\View::setPartialsDir 。 これにより、ビューのメインディレクトリ外のフォルダを使用できます。

 use Phalcon\Mvc\View; // ... $di->set( 'view', function () { $view = new View(); $view->setViewsDir( [ '/var/www/htdocs/blog/modules/backend/views/', '/var/www/htdocs/blog/common/views/', ] ); $view->setLayoutsDir( '/var/www/htdocs/common/views/layouts/' ); return $view; } ); 

Phalcon\Diサービスクロージャに関連付けられました


以前は、内部で何らかのアクションを実行する必要がある場合、サービスクロージャ内で依存関係コンテナを渡す必要がありました。 たとえば、configまたはevent-managerにアクセスします。 これで$thisを使用して、すでに登録されているサービスだけでなく、 Phalcon\Diにもアクセスできます。

前のコード:

 use Phalcon\Mvc\Dispatcher; // ... $di->set( 'dispatcher', function () use ($di) { $eventsManager = $di->getEventsManager(); $eventsManager->attach( 'dispatch:beforeException', new NotFoundPlugin() ); $dispatcher = new Dispatcher; $dispatcher->setEventsManager($eventsManager); return $dispatcher; } ); 

これで、 $diを渡さずにサービスにアクセスできます。

 use Phalcon\Mvc\Dispatcher; // ... $di->set( 'dispatcher', function () { $eventsManager = $this->getEventsManager(); $eventsManager->attach( 'dispatch:beforeException', new NotFoundPlugin() ); $dispatcher = new Dispatcher; $dispatcher->setEventsManager($eventsManager); return $dispatcher; } ); 

許可されるサービスオーバーライド


Phalcon\Di beforeServiceResolveイベントの後にオブジェクトが返された場合、返されたインスタンスはデフォルトのサービス値をオーバーライドします。

次の例は、プラグインからのresponseサービスの作成をオーバーライドする方法を示しています。

 use Phalcon\Di; use Phalcon\Http\Response; use Phalcon\Events\Manager; use MyApp\Plugins\ResponseResolverInterceptor; $di = new Di(); $eventsManager = new EventsManager; // Intercept service creation $eventsManager->attach( 'di', new ResponseResolverInterceptor() ); $di->set('response', Response::class); $di->setInternalEventsManager($eventsManager); 

プラグインを使用すると、サービスの作成を傍受できます。

 namespace MyApp\Plugins; use Phalcon\Http\Response; class ResponseResolverInterceptor { private $cache = false; public function beforeServiceResolve($event, $di, $parameters) { // Intercept creation of responses if ($parameters['name'] == 'response' && $this->cache == false) { $response = new Response(); $response->setHeader('Cache-Control', 'no-cache, must-revalidate'); return $response; } } } 

actionメソッドからビューを無効にする


特定のコントローラーactionメソッド内で$this->view->disable()呼び出して、 Phalcon\Mvc\Viewコンポーネントによる結果のさらなる処理を避けるために、ビューをオフにする必要がある場合があります。

ずっと簡単になりました。 false返すだけです:

 use Phalcon\Mvc\Controller; class Api extends Controller { public function loginAction() { if ($this->safeApp->isBanned()) { $this->response->setStatusCode(401, "Unauthorized"); return false; } // ... } } 

行を返すと、応答の本文になります。


コントローラーアクションから文字列を返すことは、応答本文として認識されます。
return $this->response->setContent('Hello world')と同じ)

 use Phalcon\Mvc\Controller; class Session extends Controller { public function welcomeAction() { return '<h1>Hello world!</h1>'; } } 

Phalcon\Mvc\View\Simple代わりにPhalcon\Mvc\View Phalcon\Mvc\View\Simple使用すると特に便利です。

 use Phalcon\Mvc\Controller; class Session extends Controller { public function welcomeAction($name) { return $this->view->render( 'welcome/index', [ 'name' => $name, ] ); } } 

この機能は、 Mvc\Microハンドラーでも使用できます。

 use Phalcon\Mvc\Micro; $app = new Micro(); // ... $app->get( '/hello/{name}', function () { return $this->view->render( 'hello', [ 'name' => $name, ] ); } ); 

ルートでのディスパッチャーの動作とビューのオーバーライド


コールバックをルートに割り当てることができるようになりました。これにより、ディスパッチャーとビューのデフォルトの動作をオーバーライドできます。

 // Make a redirection if the /help route is matched $router->add('/help', [])->match(function () { return $this->getResponse()->redirect('https://support.google.com/'); }); // Return a string directly from the route $router->add('/', [])->match(function () { return '<h1>It works</h1>'; }); 

CHANGELOGのPhalcon 2.1の完全な変更ログをお読みください。

テストの支援


このバージョンは2.1.ブランチからインストールできます。 Zephirがない場合は、次のコマンドを実行します。

 git clone https://github.com/phalcon/cphalcon git checkout 2.1.x cd cphalcon/ext sudo ./install 

Zephirがインストールされている場合:

 git clone https://github.com/phalcon/cphalcon cd cphalcon/ git checkout 2.1.x zephir build 

これらの拡張機能や追加機能をお楽しみください。 このバージョンについてのあなたの考えや質問をPhosphorumで共有してください。

<3ファルコンチーム

Source: https://habr.com/ru/post/J266521/


All Articles