Yiiアプリケーションの簡単な設定ページ

こんにちは



アプリケーションで設定ページを作成するために設計された小さなモジュールを共有したい。 同時に、コミュニティで何を改善できるかを学びます。



そのアイデアのタスクは単純です-「キー->値」タイプのパラメーターを格納するデータベースにラベルを作成し、これらの値を変更できる編集ページを作成します。 そしてもちろん、データベースに保存されたパラメーターにアクセスするためのプログラムインターフェイスを実装します。



実装期間は約30分です。 何らかの理由で、インターネット上に既製のソリューションはありませんでした。 状況を修正すれば、誰かが役に立つかもしれません。



具体的な例を使用してこれを行います。 次の設定を保存する必要があるとします:アプリケーション名、アプリケーションの説明、Giiのパスワード、メール管理者。



書く



したがって、最初に、モジュールを追加するディレクトリ構造を作成します。

configpage components Econfig.php conrollers WtsController.php models WtsConfigForm.php views wts config.php configForm.php ConfigpageModule.php
      
      





私たちは何も発明せず、データベースに設定を保存するために既製の拡張機能EConfigを使用します。 componentsディレクトリに追加します。 この拡張には「get」と「set」の2つのメソッドがあり、データベースにテーブルを作成する方法も知っています。つまり、スチームバスを使用して設定する必要はありません。



モジュールのテンプレートはGiiを介して生成され、メインモジュールファイルConfigpageModule.phpは変更されません。

 class ConfigpageModule extends CWebModule { public function init() { $this->setImport(array( 'configpage.models.*', 'configpage.components.*', )); } public function beforeControllerAction($controller, $action) { if(parent::beforeControllerAction($controller, $action)) { return true; } else return false; } }
      
      





フォーム自体のほうがはるかに興味深いものです。 作成するには、Yiiに含まれているフォームデザイナーを使用できます。 詳細はこちらをご覧ください



つまり、フォームモデル、コントローラー、フォームの説明、およびビューを作成する必要があります。 モデルから始めましょう。

WtsConfigForm.php:

 class WtsConfigForm extends CFormModel { public $applicationName; public $applicationShortDesc; public $giiPassword; public $adminEmail; public function rules() { return array( array('applicationName, giiPassword, adminEmail, applicationShortDesc', 'required'), ); } public function attributeLabels() { return array( 'applicationName' => Yii::t('app', ' '), 'applicationShortDesc' => Yii::t('app', '  '), 'giiPassword' => Yii::t('app', '    Gii'), 'adminEmail' => Yii::t('app', 'Email '), ); } }
      
      





簡単です-4つのフィールドについて説明し、ラベルについて説明し、フィールドが必須であることを示すルールを示しました。 ヒント:必要に応じてフィールドを指定しないと、フォームに表示されません。



わかった コントローラーはデザート用のままにしておきますが、ここではフォームとビューについて説明します。 フォームの説明は、フィールドとフォームコントロールの説明を格納する単純な配列です。

configForm.php:

 return array( 'elements'=>array( 'mainSettings'=>array( 'type'=>'form', 'title'=>' ', 'elements'=>array( 'applicationName'=>array('type'=>'text',), 'applicationShortDesc'=>array('type'=>'text',), ), ), 'systemSettings'=>array( 'type'=>'form', 'title'=>' ', 'elements'=>array( 'adminEmail'=>array('type'=>'text',), 'giiPassword'=>array('type'=>'text', ), ), ), ), 'buttons'=>array( 'configPage'=>array( 'type'=>'submit', 'label'=>'', ), ), );
      
      





ただ? だからそう思う。 基本設定とシステム設定の2つのグループを区別しました。各グループでは、モデルに存在する特定のフィールドについて説明し、下の[保存]ボタンを見つけました。



これらすべてを最も簡単なビューに表示します。そのビューの名前はconfig.phpです。

 <?php $this->breadcrumbs = array( '', ' ', ); ?> <div class="form"> <?php echo $form; ?> </div>
      
      





さて、ここではすべてが簡単です。 美しさのために、パン粉を残さないでください。



そして今、最も興味深いものがあります。 コントローラーでは、モデルを任意の数のフィールドとスペシャルに関連付けます。 キーと値のペアを格納するDBネームプレート。 私が言ったように、通信はEConfigモジュールを追加します。 ファイルWtsController.php

 class WtsController extends Controller { public function actionIndex() { $model = new WtsConfigForm; foreach ($model->attributes as $attr => $val) { $model->$attr = Yii::app()->getModule('configpage')->config->get($attr); } $form = new CForm('configpage.views.wts.configForm', $model); if ($form->submitted('configPage') && $form->validate()) { foreach ($model->attributes as $attr => $val) { Yii::app()->getModule('configpage')->config->set($attr, $val); } $this->render('config', array('form' => $form)); } else { $this->render('config', array('form' => $form)); } } }
      
      





ここで何が起こっていますか。 actionIndexで(生成しすぎないように)モデルのインスタンスを作成し、データベースから値を入力します。必要な値がデータベースにない場合は、フィールドにnullを入れ、説明とモデルインスタンスを使用してフォームを作成します。



そして、ブラウザからのデータがあるかどうかを確認します-ある場合、モデルはそれを自分でダウンロードし、その後、このデータはデータベースに記録され、設定ページがユーザーに再び表示されます。



ところで、はい、ユーザーフィルタリングルールを不要とは説明していません。 これを忘れないでください。そうしないと、誰でもデータベースに設定を書き込むことができます。



ささいなことは残っています。 モジュールを接続して使用を開始します。



つなぐ



モジュールの接続は簡単です。 メインアプリケーション構成ファイル( main.php )のモジュールセクションに次のコードを入力するだけです。

 ... 'modules' => array( 'configpage' => array( 'components' => array( 'config' => array( 'class' => 'EConfig', 'strictMode' => false, ), ), ), ), ...
      
      





これですべて、モジュールが接続されました。



使用する



当然のことながら、ページ自体は私たちには落ちませんでした。データベースに保存された情報にアクセスする何らかの方法が必要です。 この特定の例では、アプリケーションのindex.phpファイルにデータの読み込みを実装できます。

 $app = Yii::createWebApplication($config); function loadSettings() { Yii::app()->getModule('gii')->password = Yii::app()->getModule('configpage')->config->get('giiPassword'); Yii::app()->name = Yii::app()->getModule('configpage')->config->get('applicationName'); Yii::app()->params['adminEmail'] = Yii::app()->getModule('configpage')->config->get('adminEmail'); } loadSettings(); $app->run();
      
      





つまり、アプリケーションのインスタンスを作成し、モジュールと設定をロードしてから、一部の設定を上書きしてからアプリケーションを実行します。

そのようなもの。 私が気に入らないのは、getメソッド呼び出し行だけです:

 Yii::app()->getModule('configpage')->config->get('applicationName');
      
      





長すぎます。 残念ながら、私はまだそれを短くする方法を理解できません。 誰か教えてもらえますか?



まあ、写真なしの場所。 最終的に得られるものは次のとおりです。

画像



ところで、 このプロジェクトとの類似点を見つけた場合、写真をscらないでください。 オープンソース、すべてのもの、他の人の開発を使用できます。 この場合、左側のパネルの位置が気に入っています。 それ以外の場合、類似性はありません=)。 ディー一般に、Twitter Bootstrapはどこでも同じです。



ポジティブから



私の専門分野では、実際にはnifigaはWeb開発者ではありませんが、最近何らかの理由で、この特定の種類のコーディングにますます対処しなければなりません。 そして、何らかの理由で私はそれが好きです。これはQtやC ++ =)よりもずっと簡単です。 コード生成、Yiiフレームワーク、Twitter Bootstrap、その他多くのnishtyakovなどを発見したとき、Webプロジェクトは、ホットケーキのような多かれ少なかれ経験豊富な開発者のペンから飛び出すことができることに気付きました。



そのため、資格のある人材が絶えず不足しているという近隣の トピックの議論は、一種の愚かです。



最新の開発ツールは非常に単純であるため、BTreeやハッシュなどのMySqlインデックスの違いを知らなくても作業の90%を実行できます。 そして残りの10%はいつでもどこでも見ることができます。



まあ、これはすべて歌詞です。



他に注意したいこと



このモジュールの拡張は非常に簡単です。コントローラー、モデル、フォームおよびビューの説明をもう1つ追加するだけです。 そして、新しいアクション、説明的なフォーム、モデルという少ない労力で対応できます。 同じビューを使用できます。 そして、互いに独立した2〜3〜10の設定ページが既にあります。



ちなみに、私にとっては、統一と最適化は一般的に病気なので、ブラウザで直接設定フォームフィールドを編集するためのインターフェイスをこれらすべてに固定したいと思いますが、これはすでに他のプロジェクトにあります。



一般に、Yiiとの1年間の作業の後、あらゆる種類の例、アーキテクチャソリューション、倒錯の箱をすべて集めました。それらをすべて人間的に説明しますが、いつものように...



すべてが好きです。 ご質問は? 提案?



All Articles