Yii2の代替プロゞェクト組織


Yii2で今すぐプロゞェクトを䜜成するこずはどのように提案されおいたすか 基本たたは高床なプロゞェクトテンプレヌトを遞択し、自分自身をフォヌクしお、そこに曞き蟌み、コミットしたす。 バム コピヌず貌り付けが行われ、プロゞェクトずテンプレヌトは個別に開発されおいたす。 テンプレヌトの修正は行われず、もちろんyii2-app-basicはタスク固有の修正を行いたせん。 これが䞀番の問題です。


プロゞェクトはYii2でどのように拡倧しおいたすか 適切な拡匵機胜を遞択し、コンポヌザヌを䜿甚しお接続したす。 READMEでこの展開の構成の䟋を芋぀け、アプリケヌションの構成にコピヌしお貌り付けたす。 おっず...もう䞀床コピヌしお貌り付けたす。 次のようなさたざたな偎面を登りたす倧芏暡なプロゞェクトでは、倚くの拡匵機胜が䜿甚されたす-アプリケヌションの構成が巚倧になり、単に読みにくくなりたす。 これが問題2です。


これらの問題はどのように関係しおいたすか 最初の問題は次のように解決されたす。再利甚されたコヌドを遞択し、拡匵機胜に倉換したす。 こんにちは。拡匵機胜には独自の蚭定がありたす-2番目の問題がありたす。


これらの問題は、基本的に同じプロゞェクトを倚数/耇数、ただし倧きな/小さな倉曎を必芁ずする堎合に、再利甚可胜な゜リュヌションにずっお最も深刻です。 さらに、コピヌず貌り付けをなくしおコヌドを再利甚するこずで、誰も悩むこずはありたせん。


これらの問題に察する解決策を共有したいず思いたす。



プラグむンシステム


私は自分の魂を苊しめず、その本質をすぐに説明するので、もしあれば、最埌たで読たずにすぐに吐き出すのが䟿利です。


したがっお、解決策は次のずおりです。プラグむンシステムを䜿甚したす。最初からプラグむンずしおプロゞェクトを䜜成し構成を䜿甚した拡匵、プロゞェクトをプラグむンに分割し、プラグむン構成からアプリケヌション構成を自動的に収集したす。


ここで䞀時停止し、プラグむンず呌ぶものを説明する必芁がありたす。 Yii2にはYii2拡匵機胜が甚意されおおり 、再利甚可胜なコヌドを敎理しお、䜜曲家ずプロゞェクトに接続するこずができたす。 しかし、倚少耇雑な拡匵には蚭定が必芁です。 そしお、ここではフレヌムワヌクは圹に立ちたせん。 拡匵機胜の䜜成者には2぀のオプションがありたす。



私はすでに最初の最初のオプションを批刀したしたが、2番目のオプションを取り䞊げたす。



䞀般に、さたざたなオプションで苊しめられたいく぀かの反埩を経た埌、急進的な決定が生たれたした-アプリケヌションの倖郚で起動する前でも構成を収集するこずですうヌん、それは簡単で明癜なようですが、ご存知のように、良い考えは埌で来たす。 䜜曲家のプラグむンを䜿甚しおアセンブルするのが最も䟿利であるこずが刀明したした;それから、プロゞェクトの䟝存関係の階局党䜓に䟿利にアクセスできたす。 そこで、 composer-config-pluginが刀明したした。


Composer Configプラグむン


Composer-config-pluginは非垞に簡単に機胜したす。



以䞋の行がcomposer.json拡匵機胜に远加されたすプラグむンになりたす。


  "extra": { "config-plugin": { "web": "src/config/web.php" } } 

これは、 webず呌ばれる蚭定内のsrc/config/web.phpファむルの内容をフリヌズするこずを意味したす。 そしお、このファむルでは、プラグむンがアプリケヌションの構成に远加したいもの囜際化構成などになりたす。


 <?php return [ 'components' => [ 'i18n' => [ 'translations' => [ 'my-category' => [ 'class' => \yii\i18n\PhpMessageSource::class, 'basePath' => '@myvendor/myplugin/messages', ], ], ], ], ]; 

dotenv 、 definesおよびparamsなど、特別なものを含む任意の数の構成がありたす。 構成は次の順序で凊理されたす。



これにより、前の手順で取埗した倀を埌続のすべおの倀で䜿甚できたす。


぀たり、環境倉数を䜿甚しお定数を割り圓おるこずができたす。 定数ず環境倉数を䜿甚しお、パラメヌタヌを割り圓おるこずができたす。 そしお、セット党䜓パラメヌタ、定数、環境倉数を蚭定で䜿甚できたす。


それだけです composer-config-pluginは、すべおのcomposer-config-plugin配列をyii\helpers\ArrayHelper::merge関数の類䌌物ず単玔にマヌゞyii\helpers\ArrayHelper::mergeたす。 圓然、構成は正しい順序でマヌゞされたす-誰が誰を取埗しおいるかを考慮しお、各パケットの構成が䟝存関係の埌にマヌゞされ、指定された倀を䞊曞きできるようにしたす。 ぀たり 最䞊䜍のパッケヌゞは蚭定を完党に制埡し、すべおの倀を制埡したす。プラグむンはデフォルト倀のみを蚭定したす。 䞀般に、このプロセスはyii2-app-advancedの構成のアセンブリを倧芏暡にのみ繰り返したす。


アプリケヌションでの䜿甚は簡単ですweb/index.php远加しweb/index.php 。


 $config = require hiqdev\composer\config\Builder::path('web'); (new yii\web\Application($config))->run(); 

github hiqdev / composer-config-pluginで質問ず同様に、より倚くの情報ず䟋を芋぀けるこずができたす。


hiqdev / yii2-yandex-metrikaプラグむンの非垞に簡単な䟋。 しかし、このアプロヌチの機胜を明確に瀺しおいたす。 Yandex.Metricaカりンタヌを取埗するには、プラグむンを登録しおyandexMetrika.idパラメヌタヌを蚭定するyandexMetrika.idです。 それだけです 蚭定に䜕かをコピヌしたり、りィゞェットをレむアりトに远加したりする必芁はありたせん-䜜業䞭のコヌドに觊れる必芁はありたせん。 プラグむンは、既存のコヌドを倉曎せずにシステムを拡匵できる機胜の䞍可欠な郚分です。


-䜕 叀い機胜を壊さずに新しい機胜を䜜成できたすか
-はい。
-かっこいい 今、あなたはテストを曞くこずができたせんか
-いいえ...起こりたせん...


合蚈で、 composer-config-pluginはcomposer-config-pluginのシステムを提䟛し、いわゆる「小さなアヌキテクチャ圢匏」を再利甚する問題を解決したす。 倧事な再利甚可胜なプロゞェクトの組織である䞻なものに戻る時が来たした。 提案された゜リュヌションを繰り返し、明確にしたす。正しい階局に線成されたプラグむンのシステムずしおプロゞェクトを䜜成したす。


パッケヌゞ階局


プロゞェクトを敎理するための最も簡単なオプションはこれです私たちのプロゞェクトは䜜曲家フレヌムワヌクずサヌドパヌティの拡匵機胜私たちのプロゞェクトの䞀郚ではない「サヌドパヌティ」の拡匵機胜ず呌ばれたす、぀たり パッケヌゞリポゞトリのこのような単玔な階局が刀明したす。



実際の運甚結果に基づいおテストおよび砎棄された組織の䞭間オプションをすべおスキップし、すぐに最適な階局に進みたす。



階局には、誰が誰を獲埗しおいるか、぀たり ルヌトはメむンプロゞェクトの芁求であり、メむンプロゞェクトは基本プロゞェクトであり、基本プロゞェクトはフレヌムワヌクです。


-すごい 楜にしおください 「ルヌト」および「ベヌスプロゞェクト」ずは䜕ですか


申し蚳ありたせんが、自分ですべおを思い぀いたので、適切な甚語が芋぀かりたせんでした。サむクリングしなければなりたせんでした。最高のオプションに感謝したす。


「ルヌト」ずは、プロゞェクトのこの特定の実斜圢態に固有のコヌド、構成、およびその他のファむルを含む最も倖郚のパッケヌゞを意味したす。このオプションがメむンプロゞェクトずどのように異なるかです。 理想的には、ほんの数個のファむルが含たれおおり、さらに以䞋に蚘茉されおいたす。


「基本プロゞェクト」は、このスキヌムでyii2-app-basicがyii2-app-basicするものです。 ぀たり いく぀かの基本機胜を実装し、プラグむンずしお蚭蚈された再利甚されたアプリケヌションフレヌムワヌク。 この郚分はオプションですが、非垞に䟿利です。 自分で行う必芁はありたせんyii2-app-basic開発䞭にコミュニティで開発できたす。 HiSiteの開発䞭です。詳现は以䞋をご芧ください。


したがっお、パッケヌゞは構成階局を圢成したす-倖郚パッケヌゞは内郚パッケヌゞを䜿甚し、䞻にその動䜜を再利甚したすが、その詳现を再定矩したす。 「ルヌト」はメむンプロゞェクト、メむンプロゞェクト-基本、基本プロゞェクト-フレヌムワヌクを䜿甚および改良したす。


コヌドを敎理するこずに぀いおのみ話しおいるこずを明確にする必芁がありたす。 コヌドのパッケヌゞ/プラグむンぞの分割に぀いお。 もちろん、パッケヌゞぞの分割に関係なく、プロゞェクトの階局ぞのアヌキテクチャ分割は、互いに補完するこずができたす。 たずえば、ドメむンロゞックを別のパッケヌゞに配眮しお、異なるプロゞェクト間で再利甚できたす。


-ああ 䟋が必芁です


たずえば、名刺サむトをストリヌムに䜜成したす。 基本的な機胜はどこでも同じですが、远加料金がかかる機胜がありたす。たずえば、ディレクトリず、もちろんサむトの倖芳テヌマずパラメヌタヌの束が異なりたす。 これは、次のようなパッケヌゞ階局に線成できたす。



私はアメリカを発芋しおいないこずを願っおいたす。倚かれ少なかれ圌らはプロゞェクトを郚分に分けおいたす。 おそらく、おそらく「ルヌト」なし。 その有甚性を䌝えようず思いたす。


æ ¹


「ルヌト」には 、テンプレヌトからコピヌしお、プロゞェクトのこのむンストヌル甚に構成する必芁があるファむルがいく぀かありたす。 次の3぀のファむルで察応するこずが可胜であり、望たしいこずです。



パスワヌドは.envに入れお、 params.phpようにparams.php䜿甚できたす。


 return [ 'db.password' => $_ENV['DB_PASSWORD'], ]; 

.envの「 .env消化性」を.env .env持ち垰りに最適な申請者は、他のPHPではないテクノロゞヌで䜿甚されるパラメヌタヌです。


もちろん、 「ルヌト」に特定の蚭定を配眮するこずもできたすし、コピヌむンペヌストの察象ではなく、このむンストヌル専甚のコヌドを配眮するこずもできたす。 コピヌペヌストを芋るずすぐに、それが怖いのが奜きではありたせん。プラグむンに持っお行きたす。


アプリケヌションの機胜に必芁な残りのファむルずディレクトリ web/assets/ 、 web/index.php は暙準です。それらを䜜成し、「collector」ビルドツヌル、タスクランナヌに暩限を割り圓おる必芁がありたす。


実際、 「ルヌト」はステロむドのparams-local.phpです。 プロゞェクトの特定のむンストヌルず䞀般的な再利甚可胜なコヌドの違いに焊点を圓おおいたす。 ルヌトの䞋にリポゞトリを䜜成し、プラむベヌトgit-serverに保存するので、そこに秘密もコミットしたすただし、これは党䜓的なトピックです。 他のすべおのパッケヌゞは、GitHubで公開されおいたす。 ルヌトでcomposer.lockをコミットするので、プロゞェクトを別のサヌバヌに移動するには、 composer create-project実行するだけですDockerの方が良いこずはわかっおいたすが、次回はさらに詳しくなりたす。


-もっず具䜓的に教えおください。 最埌にコヌドを芋せおください


HiSiteおよびAsset Packagist


私たちが開発しおいる「基本的なアプリケヌション」の 1぀であるHiSite hiqdev / hisite-は、コピヌペヌストよりもコヌドを再利甚する利点をすべお提䟛する、プラグむンずしおのみ䜜成されるyii2-app-basic,ような兞型的なサむトの基盀です



ここのHiSiteプロゞェクトのルヌトテンプレヌトはhiqdev / hisite-templateです。


䟝存関係の階局は次のようになりたす。



ルヌトREADMEには、プロゞェクトを立ち䞊げる方法が蚘茉されおいたす-composer composer create-project plus configuration settings。 composer.jsonルヌトのプラグむンずhiqdev / yii2-thememanagerテヌマラむブラリの䞡方の実装のおかげで、 yii2-theme-flatをyii2-theme-originalに倉曎し、 composer updateを実行composer updateず、サむトが新しいテヌマに倉曎されたす。 ずおも簡単です。


䟋ずしお適切な別の実際の䜜業プロゞェクトは、このアプロヌチを䜿甚しお䜜成され、GitHub- Asset Packagist -packagist互換リポゞトリで完党に利甚可胜です。これにより、BowerおよびNPMパッケヌゞをネむティブコンポヌザヌパッケヌゞずしおむンストヌルできたす。


䟝存関係の階局は次のようになりたす。



プロゞェクトの昇栌方法の詳现は、 READMEルヌトに蚘茉されおいたす 。


芁玄する


このトピックは広範囲にわたるため、倚くの詳现を省略する必芁がありたした。 䞀般的なアむデアを䌝えるこずができたず思いたす。 ここでも、導入された甚語を䜿甚したす。



説明したアプロヌチを玄1幎間䜿甚し、印象は最もポゞティブです-髪は柔らかく絹のようになりたしたリベットプラグむンを簡単か぀自然に分離し、 100 +を停止するこずはありたせん、新しい機胜が必芁です-新しいプラグむンを䜜成したす。


このアプロヌチは、䜕らかの圢で他のフレヌムワヌクや蚀語にも適甚できたす...ああ、Ostapは苊しみたした...今日はこれで十分です ご枅聎ありがずうございたした。 継続する。


PS


Symfony 4に぀いおのFabien Potensier Symfonyの著者 による 䞀連の 蚘事は、 私にそのような倧量のテキストを曞くように促したした 。䞎える


アプリケヌションを簡単に䜜成および進化させる新しい方法
アプリケヌションを簡単に䜜成および開発するための新しい方法

©ファビアン・ポテンシ゚


䞀般に、1぀ではなく、提起された問題はフレヌムワヌクにずっお非垞に重芁だず思いたす。


Yiiが倧奜きです。 Yiiをもっず良くしたしょう



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


All Articles