
初心者のために、「サイクリスト」または単に好奇心...
この記事は行動を促すものではなく、「どうすればよいか」というトピックに関する小さなスケッチにすぎません。 現時点では、私は自分の部署でZend Frameworkを積極的に使用しています。精通しているので、類似点を恐れないでください。これは広告ではありません。
ルール
私はルールを設定することから始めます:
- コーディング標準-既存のものを使用することをお勧めします。ZendFrameworkの標準をお勧めします
- リポジトリにコードを追加するプロセス(自分がプロジェクトに参加している場合でも-これはうまく訓練されます)、あまり遠くに行かないでください。そうしないと、プロジェクトの開発が遅くなります
これらのルールを開発しないと、フレームワークをガベージダンプに変える危険があります。 また、単体テストを作成することを強くお勧めします。時間を大幅に節約できます。
建築
ほとんどの読者が既にMVC( Model-View-Controller )パターンに精通していることを願っています-それで、私たちのフレームワークを他の何かを使ってベースにしましょう。
モデル
典型的なプロジェクトでは、モデルはデータベースの1つのテーブルに関連付けられていますが、十分な例外があるため、このステートメントを公理と見なすべきではありません。 このモデルは、データベース、ファイル、メモリなど、さまざまなデータストレージで簡単に動作するはずです。
モデルがどのように見えるか想像してみましょう:
//ユーザーモデルはストレージとしてDBを使用します
Model_User クラス は Framework_Model_Databaseを拡張します
{
$ _table = "users" ;
$ _pkey = "id" ;
関数 getByLogin ( $ login ) { /*...*/ }
関数 getByEmail ( $ email ) { /*...*/ }
}
// MainConfigモデルはiniファイルをストレージとして使用します
クラス Model_MainConfig は Framework_Model_Iniを拡張します
{
protected $ _file = "application.ini" ;
関数 setOption ( $キー ) { /*...*/ }
function getOption ( $ key ) { /*...*/ }
}
//レジストリモデルはメモリをストレージとして使用します-グローバル変数の代替
クラス Model_Registry は Framework_Model_Memoryを拡張します
{
関数 setOption ( $キー ) { /*...*/ }
function getOption ( $ key ) { /*...*/ }
}
//セッションモデルはセッションファイルをストレージとして使用します
Model_Session クラス は Framework_Model_Sessionを拡張します
{
protected $ _namespace = "global" ;
関数 setOption ( $キー ) { /*...*/ }
function getOption ( $ key ) { /*...*/ }
}
実際、そのような例では、MVCの概念を強く歪めています。これは、モデルが特定のビジネスモデルを意味することが多く、セッションや構成ファイルを意味しないためです。
表示する
現在のテンプレートエンジンの要件は何ですか? 個人的には、ネイティブPHP構文、さまざまな種類のヘルパーとフィルターのサポート。 「2ステップビューパターン」も実装する必要があります。ZFには 、 Zend_ViewとZend_Layoutの 2つのコンポーネントがあります 。
そのような表現の例を挙げます。
<?php if ( $ this- > books ) : ?>
<!-いくつかの本の表。 ->
<表>
<tr>
<th>著者</ th>
<th>タイトル</ th>
</ tr>
<?php foreach ( $ this- > $ as = key => $ val ) : ?>
<tr>
<td> <?php echo $ this- > escape ( $ val [ 'author' ] ) ?> </ td>
<td> <?php echo $ this- > escape ( $ val [ 'title' ] ) ?> </ td>
</ tr>
<?php endforeach ; ?>
</ table>
<?php else : ?>
<p>表示する書籍はありません。</ p>
<?php endif ; ?>
レイアウトの使用例(Zend_Layoutのドキュメントから引用):

そうです、Zend Frameworkはプレゼンテーションの実装に成功しています。もちろん、軽微な苦情がないわけではなく、一般的には5つです。
コントローラー
— , — .
:
example.com/?controller=users&action=profile&id=16
, — id=16. users profile, id:
// -
class Controller_Users extends Framework_Controller_Action
{
public function actionProfile()
{
//
$id = $this->request->get('id');
//
$user = new Model_User();
$user -> getById($id);
//
$this->view->user = $user;
}
}
, , .. JSON , ( MVC, ).
Request'a — . — .
Routers
— . :
example.com/?controller=users&action=profile&id=16
example.com/users/profile/id/16 // URL'a ZF
example.com/users/profile/16 // CodeIgniter
example.com/profile/16 // ,
/ ZF — — URL', — .
— URL , :
example.com/users/list/page/2/limit/20/filter/active
example.com/users/list/2/20/active
Request, , URL View — Request — , , Request View
Request & Response
Request — :
- Router'
Response — , :
- — .. view, layout
Response ZF —
Modules
, .. - (, , ..) . MVC , - .
Core
— , , :
- Router', Request
- Request , //
- ( )
- Response
, .
«», :
- — MySQL, SQLite, PostgreSQL ( ), , ..
- — , (. Zend_Validate)
- — , gettext'a,
- — mail, - -
- — — (. Zend_Paginator)
- — , « » (. Zend_Navigation)
- — (. Zend_Cache)
- — Zend_Config , ini , , Zend_Config_Ini
- — , — Zend_Loader
- ACL — — , //
Zend Framewrok' — , , .. Zend'a ( : ZYM)
( ):
- Redirect — ,
- Forward — //
- Messages — ,
- Scaffold — ()
, CMS — , .
«» — ...
, , ( document_root public):
project |-- application | |-- configs | |-- layouts | |-- controllers | |-- models | |-- views | `-- modules | `-- <module_name> | |-- layouts | |-- controllers | |-- models | `-- views |-- data | |-- cache | |-- logs | `-- sessions |-- library | `-- Framework |-- public | |-- styles | |-- scripts | |-- images | |-- uploads | |-- .htaccess | `-- index.php `-- tests
, — …
To Be Or Not To Be — , — - , . , , — .
RSS http://anton.shevchuk.name/feed/, http://twitter.com/AntonShevchuk