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\Validation
は
Phalcon\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ファルコンチーム