Zend Frameworkの最初の鮮床、ch1MVCを掚奚

私はディヌンの芁請でここで犁止されおいなかったので、瀟䌚に利益をもたらすこずにしたした。 私はバカで䜕もできないので、ZFに぀いお曞いおみたしょう-なんらかの理由で誰もが心から憎んでいる玠晎らしいこずです。 ただし、日本テレビでペレビン申し蚳ありたせんが、本物ではありたせんが䞊映されるたで、間に合わせる必芁がありたす。



あらゆる皮類のQSの䞻な䞍幞は、それらが本圓に迅速で実際に開始するこずですが、そのようなこずをすべお行うず、特に「スケヌラブル」なアプリケヌションが埗られないため、䜕をすべきかは明確ではありたせん。 Zend Frameworkの以前のバヌゞョンの公匏クむックスタヌトず比范するず、 新しいものは玠晎らしいですが、欠陥がないわけではありたせん。 私は反察偎から行きたす。意味のない兞型的なこずを行う方法を説明する代わりに、Zend Frameworkのすべおの可胜なメ゜ッドを䜿甚しおアプリケヌションを䞀般的に蚘述する方法を説明したす。 ああ、それはhabracatをする時間です。



Zend Frameworkは、本物の男性向けの魔法のような幞せなPHPフレヌムワヌクです;-)。 私にずっお、ZFは非垞に短い時間で簡単に䜜成でき、スケヌラブルで非垞にコンパニオンなWebアプリケヌションを曞く唯䞀の方法です6時間は手間をかけずに簡単に実行できたす承認+登録+投皿+テヌプ+ツリヌのようなコメント+茶+コヌヒヌ+ダンスたったく䜕もする必芁のない決定Wordpress、Drupalなどからプログラマヌに䜕も課さないこずによっお原則ずしお、ZF、䞀連の関連クラスそのスタむルを維持しながら、必芁なものだけを䜿甚できたす砎る あなたが䞀番奜きな靎。 Zend_Authを認蚌に䜿甚したせんか そしお誰があなたがあなた自身の䜕かを曞くこずを犁じたすか ;同時に、矎しく非垞に論理的に構築されおいたすあらゆる皮類のクラス、芪、むンタヌフェヌス、すべおのゎミたずえば、単に暙準Zendクラスからいく぀かのクラスを継承し、本圓に远加したいものを远加するだけで䟿利ですホリバヌのコメントに「ZF察䜕でも」を配眮したす。お願いしたす。たったくしないでください。



うん ですから、私たちが成功するこずは、願わくば耇雑ですが、論理的で、倚少なりずも矎しいものになりたす。 私はバカでアマチュアなので、すべおの動きが本圓に合理的で正しいこずをふりするこずはできたせん。貎重なアドバむス、远加、反論に぀いおは「ありがずう」などず蚀いたす。 ああ、そうです、そしおそれはここの唯䞀の蚘事ではないず思いたす。 さらに、最初の1぀はかなり平凡に芋えるかもしれたせんが、この堎合は2぀目を埅っおいたす8この特定の1぀で、MVCのZend実装での䜜業に぀いお話したす



私は自分自身を繰り返すこずにしたした。「私はハッカヌではなく、ただ孊習しおいるだけです。」 もっずよく知っおいたすか これを曞き盎しお/次の蚘事を䞀緒に曞いお、さらにクヌルにしたしょう;-)



はい、私はあなたをずおも愛しおいたすが、コメントでは文法や句読点の間違いやコヌドのタむプミスを指摘したす-nasra to karma。 habrahpostに曞き蟌みたす。 削陀できない蚘事の䞋に迫っおいるこれらの暫定修正は誰も必芁ずしたせん。



行こう



最初のステップは、ZFをダりンロヌドしおから、少なくずも「構成ずレゞストリの䜜成」たでQuickstartを実行するこずです。 その埌、SQLiteでなんらかのバカが来たすスカむラむンの意味がわからない、そしおZend_Formが䞀般的に䜿甚されたす私はこの皮の゚ンタヌテむンメントの反察者です。耇雑なこずはありたせん。 あなたが成功するスケルトンから、私たちは螊りたす。



そのため、次のようなものがありたす存圚しない-䜜成する、䜕か䜙分なものがある堎合-たあ、それに぀いおどうするかを自分で決めおください

 +アプリケヌション/
   +構成/
     * app.ini
   +コントロヌラヌ/
     * IndexController.php
	 * ErrorController.php
   +レむアりト/
	 +スクリプト/
	   * layout.html
	 +ヘルパヌ/
   +モデル/
	 + dbtable /
	 * SuperModel.php
   +ビュヌ/
     +スクリプト/
	   +むンデックス/
	     * index.phtml
       +゚ラヌ/
	     * error.phtml
	 +ヘルパヌ/
   * routes.php [1]
   * bootstrap.php
 +ラむブラリ/ // [2]
   + zend /
	 // tru-la-la ...
 + public /圌はhtdocsです/私にずっおは重芁ですが
   +静的/
     // [3]
   * index.php




[1]-すべおのルヌトはこのファむルにありたす。 その埌、bootstrap.phpに含たれたすqsの埌、ルヌトはブヌトストラップ自䜓に含たれたすが、通垞は少し倧きすぎたす

[2]-このフォルダヌを1぀䞊のレベルに移動したす。぀たり、すべおを/home/va1en0k/coolsite.ru/に保存しおいる堎合は、/の代わりに/ home / va1en0k / library /にラむブラリヌを保持したすhome / va1en0k / coolsite.ru / library /他のプログラムの堎合は、それらに簡単にアクセスできたす

[3]-さたざたなクヌルなCSS、JSファむル、写真がありたす-カヌヌ党䜓。 スタむルで展開するこずができたす/、画像/、他のサヌバヌに持ち出すこずができたす、誰もあなたがここにそれらを保持するこずを匷制したせん私たちはすべおのHTML



すべおが非垞に単玔な、通垞のMVCです。 プログラムを䜜成するためのアルゎリズムは次のずおりです誰もが倧奜きな「テストによる開発」ずは倚少異なりたすが、原則ずしお、開発前/埌/開発䞭にフォヌム、コントロヌラヌ、モデルのテストを調敎できたす。

  1. たず、特定のナヌザヌアクション䞭に発生する䜕かが必芁です。デザむナヌがそれに぀いお質問したか、䜕か他のものがありたす。
  2. アクションは垞に䜕らかのURL呌び出しです。 URLを䜜成したす任意でも構いたせんが、/「controller_name」/「action_name」ずいう圢匏のURLに非垞に満足しおいたす。しかし、投皿を取埗するには、䜕らかの/ post / 12321を䜿甚する方が適切ですか、決定したすそれがコントロヌラヌによっおどのように凊理されるか䜕も圓おはたりたせんか/ application / controllers /に新しいものを䜜成したす、このコントロヌラヌにアクションを远加したす。
  3. /views/scripts/controller_name/action_name.phtmlを䜜成し、必芁なhtmlをそこに描画したす。

    • 他のペヌゞに衚瀺されおいないものを衚瀺する必芁がある堎合は、次のように蚘述したす。<= $ This-> shachlo>、曞き留めるか、必芁なものを芚えおおいおください。
    • たずえば、あるナヌザヌの名前など、たくさん衚瀺されるものを出力する必芁がある堎合、<= $ This-> printUser$ this-> user>;


  4. 次に、必芁なすべおのヘルパヌを䜜成したすヘルパヌは、次のように呌び出される関数です<= $ This-> printUser$ this-> user>。 それらを/ views / helpers /で曞きたす。 アむコンを远加したり、ナヌザヌの名前に他のスタむルをい぀でも適甚できるように、それらを個別に䜿甚するこずをお勧めしたす。 たたは、すべおのナヌザヌを「OK」ずいう蚀葉に眮き換えお、すべおのナヌザヌが驚いたこずに倢䞭になるようにしたす。 
  5. 幞せにゞャンプしお、アクションを曞きたす。 アクションコヌド党䜓を実際にはそうではないが3぀の郚分に分けるこずができたす。

    • 匕数を凊理したす。フォヌムたたはそこのURLからデヌタを取埗したすURLが/ user / 12345の堎合。
    • アクションに必芁なこずを行いたす。ロケットを宇宙に発射するか、ポケットベルでタクシヌ運転手にメッセヌゞを送信したす。 デヌタベヌスからのデヌタが必芁な堎合、たたはLast.fmやTwitterからのデヌタ、たたはその他のデヌタが必芁な堎合は、モデルに぀いお質問したす。 [これたでに]モデルが発行方法を知らない堎合、できるかどうかを尋ねたす$ this-> m-> twitter-> getUser "va1ka"; たたはそこに$ this-> m-> getUsersTable-> getUser "va1en0k"; -必芁に応じお、質問しおください。
    • 圌がステップ3で芁求したすべおを衚瀺したす。$ this-> view-> shachlo = "popyachtsa"; など。
  6. 前のステップで圌女に求めたすべおをモデルに远加したす。




このアルゎリズムはほが普遍的でありナヌザヌアクションで䜕が起こるかが必芁な堎合は、少し異なる方法で行動する必芁がありたす、できるだけ明確に固執するこずをお勧めしたす。 なぜ最初に芋おから、残りを芋るのですか さお、2぀の理由で、最初に37signalsがアドバむスし、次に、これが私たちが必芁ずするものず受信する圢匏を理解する最も合理的な方法です。 すべおのデヌタリク゚ストがモデルを介しおのみカプセル化されるようにするこずが重芁です幞いなこずに、その堎合、デヌタベヌスを芋ずに手を振ったり、ステップモゞュヌルのリセットなど、プログラムを高速化する玠敵なキャッシュを远加したりできたす。 すべおのHTML、぀たり非垞に完党にすべおが、フォルダヌ内、ヘルパヌ内、たたはそのようなビュヌたたはレむアりトを通過するようにするこずが重芁です。



そしお今、MVCの3぀のクゞラのためにより具䜓的に。



衚瀺する


雄匁にほのめかしたように、ビュヌにはすべおすべおのHTMLがあるはずです。 コントロヌラヌや、特にモデルで発生するすべおの゚ラヌは、タグがなく、裞線である必芁がありたす。 出力定数たずえば、キャッチフレヌズや「゚ラヌナヌザヌ名は最倧25文字でなければなりたせん自殺しおください」もビュヌに保存する必芁がありたす。



どうやっおやるの ヘルパヌが助けに駆け぀けたす ヘルパヌを䜜成したすそれから、驚くほどのコヌドが出おきたす。これはそのたた䜿甚する䟡倀はありたせんが、原則ずしお、本圓にひどいものは䜕もありたせん。䜕が起こっおいるのかを敎理する方法を自分で考えおください。

 class Zend_View_Helper_Errors extends Zend_View_Helper_Abstract {
	パブリック関数゚ラヌ$ err{
		 ifsizeof$ errreturn '';
		
		 $ html = '<div class = "errors">';
		
		 foreach$ errずしお$ err
			 $ html。= '<p>'。  AppErrors :: getErrorString$ er。 '</ p>';
		
		 $ html。= '</ div>';
		
		 return html;
	 }
 }


たた、静的メ゜ッドを持぀クラス

クラスAppErrors {
	静的関数getErrorString$ er{
	   //文字列を返したす。 私たちはどこかからそれを取りたす配列がそこにあるか、デヌタベヌスたたは他のどこかにあり、必芁ならばZend_Translateを介しお翻蚳しお返したす
	 }
 }




$ Err自䜓-ヘルパヌ匕数-は「゚ラヌ」の配列です。 ゚ラヌは、単にいく぀かの番号、たたは配列たずえば、配列 'err_id' => 666、 'err_arg' => 'satan'によっお゚ンコヌドされたす。゚ラヌにargumentsがある堎合想像力が損なわれおいる限り。



コントロヌラヌ


コントロヌラヌはアクションで構成されおいたす。 アクションは、アプリケヌションのバックボヌンです統合アプロヌチに基づく構造機胜瀟䌚孊の堎合ず同様。 これは、プログラム蚭蚈者からプログラマヌぞの理想的な芁求です。「さあ、このボタンを抌すず、これが起こりたす。」 したがっお、「そのような」はアクションです誰に説明したすか。



コントロヌラヌをバッチで䜜成する前に、トリッキヌな動きをするこずをお勧めしたす。独自のフロントコントロヌラヌずアクションコントロヌラヌを䜜成し、それらを既に継承しおいたす。 次に、その堎合、たずえば、サむトにアクセスせずにペヌゞにアクセスするこずを犁止できたすたずえば、らい病のコロニヌのように、アクションコントロヌラヌに必芁なさたざたな倉数を蚭定したす。

クラスSchachloFrontControllerはZend_Front_Controllerを拡匵したす{
	 // 
ここで、getInstanceをオヌバヌロヌドするこずを忘れないでください。
 } // bootstrap.phpを倉曎するこずを忘れないでください
クラスSchachloActionControllerはZend_Action_Controllerを拡匵したす{
	 //私の意芋では、オヌバヌロヌドする必芁はありたせん
 } //そしお、そこからすべおのアクションコントロヌラヌを継承したすこれらは/ application / controllers /




それでは、すべおが倚かれ少なかれ明確です。 コヌドを可胜な限り小さな関数に分割し、モデルに抌し蟌むか、ヘルパヌビュヌヘルパヌずアクションヘルパヌの䞡方に任せるこずをお勧めしたす。 忘れないでください祖母のミドルネヌムがであっおも、すべおのデヌタはモデルで受信する必芁がありたす。そうではありたせんが、祖母だけが必芁な堎合は、構成の方が良いです



モデル


実際、このモデルでは、私は経隓䞍足に぀いお最も疑問を持っおいたす。 たあ、私は通垞個人的にこれを行いたす

各デヌタタむプに぀いお、デヌタベヌスにタブレットを䜜成したす。 そこには、投皿のために、コメントのために、すべおのものがありたす。 デヌタ型に配列倉数たずえば、投皿のタグがある堎合、そのために、切り株は明確で、別個のラベルです。 次に、プレヌトごずに/ application / models / DbTable /に独自のファむルを䜜成したす。 さお、メむンファむルはSuperModel.phpで、このファむルでは、アンゞェリヌナゞョリヌがすべおのタブレット静的倉数に栌玍されおいるをメ゜ッドずずもに返したす。 同様に、ファむルシステムたたは倖郚デヌタ゜ヌスを操䜜するために必芁なクラスを突き出し最近では、たったく緊匵せずにZend_Rest_Clientを䜿甚しおlast.fmを操䜜したした、スヌパヌモデルに到達するためのメ゜ッドを突き出したした。



そのため、突然䜕かを知る必芁がある堎合は、これが懞念するデヌタ゜ヌスの数を調べたす。 1぀のラベルの堎合メ゜ッドを独自のクラスに远加したす。 ラベルが1぀ずそれ以䞊のラベルがある堎合たずえば、投皿ラベルから投皿を取埗し、タグなどからタグを取埗するなど-そしお、それに察しおも。 たた、2぀以䞊たたはそれ以䞋のテヌブルが必芁な堎合は、メ゜ッドをモデルに配眮したすが、参加しおいる各テヌブルで䜜業を自分で敎理したす。



チェはもっず蚀う そうそう。 キャッシュを忘れないでください。 各メ゜ッドにキャッシュトラッキングを远加するか、2぀のモデルを䞀床に取埗しお䜜成できたす。1぀は䞊蚘のモデルで、もう1぀はキャッシュを介しお最初のモデルを呌び出し、同時に䞍芁な堎合はオフにしたす。 再び犁止されない堎合は、おそらくキャッシュに぀いお曞き蟌みたす。 D



ふう それは13キロバむトず思われ、あたり倚くはないず蚀った。 恋人、そこにあるもの フィヌドバックを埅っおいたす。



All Articles