GlavWebからYiiプロジェクトを構成する方法

Yiiフレームワークのすべてのファンの皆さん、こんにちは!



一連の記事で、Yiiでのプロジェクト開発へのアプローチを共有したいと思います。 おそらく私たちのアイデアは役に立つかもしれませんし、ある人にとっては考えの糧になるかもしれません。 決して私がユニークであるふりをすることはありません。私たちがしているとおりに行う必要があると主張するわけではありません。



最初の投稿はプロジェクトの構成に関するものです、私は理解しています、トピックはそれなしで、よく、ハックされています。



それでは、始めましょう。 まず、入力スクリプト(index.php)を解析しましょう。 これがどのように見えるかです:

<?php $rootPath = dirname(__FILE__); /** * Define config */ $env = null; $envFile = $rootPath . '/.env'; if (is_file($envFile)) { $env = trim(file_get_contents($envFile)); } $configFile = $rootPath . '/application/config/production.php'; if (!empty($env)) { $configFile = $rootPath . '/application/config/' . $env . '.php'; if (!file_exists($configFile)) { die('Config file is not found.'); } } $config = require $configFile; /** * Create and run application */ $libraryPath = $rootPath . '/library'; require_once $libraryPath . '/yii/yii.php'; $autoloader = function($class) { global $libraryPath; $path = $libraryPath . '/' . implode(preg_split('/[_\\\]/', (string)$class, -1, PREG_SPLIT_NO_EMPTY), DIRECTORY_SEPARATOR) . '.php'; if (is_file($path)) { include_once $path; } }; Yii::registerAutoloader($autoloader, true); Yii::createWebApplication($config)->run();
      
      





ここで最初に行うことは、アプリケーションの構成を決定することです。 ルートにある「.env」ファイルの内容に基づいて、構成へのパスを取得します。 このファイルが存在しない場合、構成は「実動」です。 つまり 「.env」ファイルはマシン上にのみ存在し、バトルサーバーにアップロードしたり、無視するように設定したりする必要があります。 これは何のためですか? -実動サーバーと開発者のサーバーの構成を分離するため。



さらに、構成では、対応する定数も定義します。 たとえば、サーバー乙女の場合、これは次のとおりです。

 define('YII_DEBUG', true); define('YII_TRACE_LEVEL', 3); define('YII_ENABLE_ERROR_HANDLER', true); define('YII_ENABLE_EXCEPTION_HANDLER', true);
      
      





「index.php」ではなく、構成ファイルにあるのはなぜですか? -定数の値も環境に依存するため。



さらに、便宜上、構成をマージできます。 つまり 環境の機能を決定する1つの基本(メイン)および特定(本番、開発、テストなど)を選択します。



この場合、「config」フォルダーの内容は次のようになります。

-main.php //メインアプリケーションの設定

-production.php //サーバー生産の違い

-dev.php //開発者サーバーの違い



例、ファイル「dev.php」の内容:

 define('YII_DEBUG', true); define('YII_TRACE_LEVEL', 3); define('YII_ENABLE_ERROR_HANDLER', true); define('YII_ENABLE_EXCEPTION_HANDLER', true); return array_replace_recursive( require dirname(__FILE__) . '/main.php', array( 'components' => array( 'db' => array( //     ), ), ) );
      
      





フレームワーク「CMap :: mergeArray()」ではなく、ネイティブPHP関数「array_replace_recursive()」を使用してマージしていることに注意してください(クックブックのアドバイスによる)。 この時点ではまだYiiライブラリを接続していないことに注意してください。 そして、彼らは接続しませんでした、なぜならこれは私たちの設定で定義された定数とyii.phpで定義された定数の衝突を引き起こすからです。



「index.php」の内容を見ると、Yiiで採用されているルートディレクトリの標準的な命名から少し外れていることがわかります。 ルートには3つのフォルダーのみがあります。

-アプリケーション//保護と同じ

-ライブラリ// Yiiを含む使用済みライブラリがここにあります

-public // Webからアクセス可能なファイル、たとえばcss、js、images

-assest //アセットファイルのフォルダー



ほとんどの場合、このような構造はZendに残された習慣の問題です。



「assetManager」コンポーネントの設定で「public / asset」にアセットを追加するには、「basePath」および「baseUrl」プロパティを再定義する必要があります。



さらに調べます。 「index.php」で、追加のオートローダーを定義および登録します。 なんで? 「library」ディレクトリから追加のライブラリを安全に接続するため。 つまり オートローダーは、対応するクラスの名前で「ライブラリ」フォルダー内のファイルを検索し、接続します。 クラス「Zend_Paginator」の場合、パスは「library / Zend / Paginator.php」です。 また、名前空間も理解しています。クラス「Zend \ Paginator \ Paginator」の場合、パスはそれぞれ「library / Zend / Paginator / Paginator.php」になります。 心配しないでください。これはパフォーマンスに影響しません。 オートローダーはYiiオートローダーの後に機能します。 この動作は、「Yii :: registerAutoloader()」の2番目の変数によって決定されます。



最後に、構成データの配列を使用してアプリケーションを起動します。



今日は以上です。 みなさん、良い一日を!



PS私の意見では、構成を共有するための適切なオプション(APPLICATION_ENV経由)は、suver-habrahabr.ru/ post/146473を提供します。 私の方法の主な違いは、Apacheでサイト設定を行う必要がないことです。サイトをlocalhostフォルダーに配置する場合に便利です(http:// localhost / mysite)



All Articles