4

いくつかの組み込みフレームワーク クラスを拡張したいのですが、明確でない点がいくつかあります。

  1. 自分のクラスをコンポーネント フォルダに配置する必要があると思いますが、これは適切な場所ですか?
  2. クラスには のような名前を付けSubfolder_ClassName、ファイルには のような名前を付ける必要がありますClassName.phpか?
  3. どうやって継承するの?デフォルトのインクルード パスには、フレームワーク自体は含まれません。インクルードパスを変更したり、オートロード機能を使って遊んだり、コードにインクルードをハードコードしたりすることなく、それを行うための組み込みの方法があると思います。

右?

4

2 に答える 2

5

ソースファイルの配置

それらを下に置くこと/protected/componentsは自然な選択です。プロジェクト間で再利用できるより一般的なクラスを後で開発する場合は、それらを別のディレクトリに配置することを検討できます。

ネーミングとディレクトリ構造

これは、アプリの規模によって異なります。多くのコンポーネントがない場合 (20 未満など)、ディレクトリ構造は必要ありませんcomponents。ディレクトリはそれらすべてに適しています。もう 1 つの実用的な方法は、ビジネス コンポーネントを 1 つのディレクトリに配置し、HTML コンポーネントを別のディレクトリに配置することです (例: widgets)。

親クラスを含む

構成ファイルには、次のようなセクションが必要です。

// autoloading model and component classes
'import'=>array(
    'application.models.activerecord.*',
    'application.models.forms.*',
    'application.components.*',
    'application.classes.*',
    // etc
),

このセクションは、実際にはCModule::setImportアプリケーション インスタンスで呼び出され、オートロード可能なクラスを登録します。これらのクラスを拡張したい場合は、何もする必要はありません。

コンポーネントの一部が上記のようにインポートされない Yii クラスに依存している場合、Yiibase::importクラスを宣言する前に明示的にインポートする必要があります。例えば:

Yii::import('zii.widgets.jui.CJuiSlider');

class MySlider extends CJuiSlider {
    // class contents here
}

パスのエイリアスを登録する

インポート パスの独自のエイリアスを作成する場合 (たとえば、myapp.componentsクラスをインポートするときに参照できるパスを作成する場合)、 を使用してこれを行うことができますYiibase::setPathOfAlias。これに適した場所は、構成ファイルの一番上です。

<?php
Yii::setPathOfAlias('myapp.components','components/my/');

// This is the main Web application configuration. Any writable
// CWebApplication properties can be configured here.
return array(
    // your whole app configuration is here, and you can now do this:
   'import'=>array(
       // ...other imports...
       'myapp.components.*',
       // ...other imports...
   ),
);
于 2011-09-17T02:15:40.867 に答える
0

yii-Frameworkでクラスの子クラスを作成する場合は、クラス定義ファイルを内に配置できますproject/protected/components。必要なベストプラクティスによって異なりますが(つまり、FWクラスを拡張する1つまたは2つだけではなく、数十のカスタムクラスを作成することになります)、ファイルをコンポーネントに直接配置することは、編成の観点からは問題ありません。

継承するには、次の行に沿ってファイルを作成できます。

class MyNewClass extends CFrameworkClass
{
    //All your stuff

} 

慣例により、yiiフレームワーククラスの前には「C」が付いていることに注意してください(つまり、CController)。慣例に従う以外の理由で、そこに「C」を追加していません(CFramwork ..)。

于 2011-09-17T02:05:31.840 に答える