PHP の Yii フレームワークの基本的な使用例、yii フレームワークの例
Yii によって自動生成されたコードでは、管理インターフェイスに常に CGridView が表示されます。これは、データを表示するための非常に便利なテーブル コントロールです。うまく使用すると、開発の進行を大幅にスピードアップできます。 CGridView の基本的な使用法を見てみましょう:
わかりやすくするために、Yii デモのブログのサンプルを使用してコードを変更します。まず、変更された部分的な Mysql ステートメントを次に示します。
リーリー2 つのテーブルがあり、1 つは作成者情報を保存し、もう 1 つはログを保存します。ログにはユーザーに関連付けられた外部キーがあります。 2 つのテーブルの is_delete フィールドは、レコードが削除されたかどうかをマークします。0 は削除されていないことを意味し、1 は削除されたことを意味します。 gii で生成された Post クラスのリレーション メソッドを見てみましょう:
リーリー 著者の外部キーは BELONGS_TO 関係として存在しており、これは期待どおりです。
ここまで述べたので、自動生成された Post 内の admin.php の CGridView のコードを見てみましょう:
見てください!何も書いていませんが、これがこのコントロールの最も基本的な使い方です。 dataProvider は、モデル内の検索関数によって提供されるデータです。フィルター...現時点では、Columns が表示される各列を制御します。CButtonColumn の最後の項目には、View Update および View Update という 3 つのボタンが表示されます。消去。
次は少しずつ変形していきます
CGridView を使用して、実際に必要なデータ フォームを表示します。
多くの場合、データベース内の内容は、ユーザーに直接表示するのには適していません。読み取りに適するようになる前に、特定の処理を実行する必要があります。ただし、ここで変更を行わないと、CGridView はデータベース値を変更せずに表示するだけなので、対応するフィールドで値を変更する必要があります。たとえば、is_delete フィールドには 0 と 1 がデータベースに格納されていますが、ここを読み取るのはあまり良くありません。「はい」を表示するには 1 に、「いいえ」を表示するには 0 に変更する必要があります。以下のコードを見てください。2 つのキーはモデルが所有するフィールドに対応し、値は php ステートメントとして記述できます。コードが実行されました。これを見て、この値を使用して多くのことができると思いますか?学生の中には、実行したいコードが非常に長い場合、そのコードはすべて値で記述されているのかと疑問に思う人もいるかもしれません。 。 。 。私は、クラスメイト、どこか別の場所に関数を書いて、それをここで呼び出してみませんか、と言いました。 ?
さらに、配列に入力できる一般的に使用されるオプションがいくつかあります。以下はより一般的な使用法です (コードの他の部分は省略されています)。 リーリー
上記の名前を使用する場合、それはモデル内のオリジナルのフィールドです。自分で定義した新しいコンテンツを表示したい場合は、header:を使用します。 リーリー
CCheckBoxColumn を追加:
各行を選択するためにチェック ボックスが必要になる場合があります。この場合、列を追加して CCheckBoxColumn クラスを使用できます。
リーリー
リスト内の各項目の最後の 3 つの小さなアイコンに気づきましたか?もちろん、それらが必要ない場合は、直接削除してください。しかし、それらのうちのいくつかだけが必要な場合はどうすればよいでしょうか。テンプレートパラメータを追加できます:
リーリー
ボタンをカスタマイズすることもできます:
各検索後に Javascript をトリガーしたい場合、Yii にはこのオプションも用意されています。これを実行したい場合は、これを関数として記述し、afterAjaxUpdate を設定するだけです。ページの先頭 読み込み完了後に呼び出したい場合は、ページに追加の Javascript を追加する必要があります
リーリー
まず、ここでは「1 対多」関連の検索についてのみ話していることを言っておきます。忘れた場合は、ここをクリックしてください。 tbl_post に関連付けられた外部キー。作成者関連の情報を検索するために使用されます。データベースを構築した後、生成した Yii コードの POST モデルを見てください (コメントは無視してください)。
リーリー
POST テーブルと USER テーブルには、作成者キー (例: $model->author->nickname) を介してアクセスできることがわかります。ここに BELONGS_TO 関係があります。
ここまで述べてきましたが、私たちのニーズとは一体何でしょうか? ....
プロダクト マネージャーはメガネを押し上げました。「ログのバックエンド管理インターフェイスに、著者名で該当する記事を検索できる機能を追加したいと考えています。これは緊急であり、今夜完了する予定です
」
淡定淡定,不就是改需求吗。忽略进度要求,我们研究一下究竟要做什么。
其实很简单的,不就是在 POST 的 admin 界面中增加一列作者名称,然后可以通过作者名的 模糊搜索 去找到对应日志吗?看看代码,要是通过 作者 id 去搜索不就简单了吗?不过这样确实不太友好...如果是展示作者名字而已不也是很简单吗?加一个 header 然后 value 是 $data->author->username, 问题是这样只能展示,不能进行搜索...哎,好苦恼。
淡定淡定,不就是多个搜索吗?来,让我告诉你怎么做。
首先,我们进入 POST 的 model,在一开始的地方添加一个属性:
class Post extends CActiveRecord { public $name; //添加一个 public 属性,代表作者名 然后改一下 Model 里面 search 的代码,改动部分都已经加了注释: public function search() { // @todo Please modify the following code to remove attributes that should not be searched. $criteria=new CDbCriteria; $criteria->with = array('author'); //添加了和 author 的渴求式加载 $criteria->compare('post_id',$this->post_id); $criteria->compare('title',$this->title,true); $criteria->compare('content',$this->content,true); $criteria->compare('tags',$this->tags,true); $criteria->compare('status',$this->status); $criteria->compare('create_time',$this->create_time); $criteria->compare('update_time',$this->update_time); $criteria->compare('author_id',$this->author_id); //这里添加了一个 compare, username 是 User 表的字段,$this->name 是我们添加的属性,true 为模糊搜索 $criteria->compare('username',$this->name,true); return new CActiveDataProvider($this, array( 'criteria'=>$criteria, )); }
然后在 view 里面,就是 post 文件夹的 admin.php ,CGridView 改为下面代码:
<?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'post-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( 'post_id', 'title', 'content', 'tags', 'status', 'create_time', 'update_time', 'author_id', /*下面就是添加的代码啊*/ array( 'name'=>'作者名称', 'value'=>'$data->author->username', //定义展示的 value 值 'filter'=>CHtml::activeTextField($model,'name'), //添加搜索 filter ), array( 'class'=>'CButtonColumn', ), ), )); ?>
你是不是发现现在有了搜索框但是不起作用呢?哈哈,所以我们说文章要坚持看到最后。我们要做的最后一步,就是在 rule 里面,把 name 属性加入到安全搜索字段中,要不然会被 Yii 认为是不安全字段而过滤掉的。看,就在下面函数的最后一行,safe 前面多了个 name ....
public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( array('title, content, status, author_id', 'required'), array('status, create_time, update_time, author_id', 'numerical', 'integerOnly'=>true), array('title', 'length', 'max'=>128), array('tags', 'safe'), // The following rule is used by search(). // @todo Please remove those attributes that should not be searched. array('post_id, title, content, tags, status, create_time, update_time, author_id, name', 'safe', 'on'=>'search'), ); }

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ホットトピック









