目次
PHP の Yii フレームワーク、yii フレームワークの使用におけるいくつかのエラー解決策と提案
ホームページ バックエンド開発 PHPチュートリアル PHP の Yii フレームワークを使用する際のエラーの解決策と提案、yii Framework_PHP チュートリアル

PHP の Yii フレームワークを使用する際のエラーの解決策と提案、yii Framework_PHP チュートリアル

Jul 13, 2016 am 09:44 AM
php yii

PHP の Yii フレームワーク、yii フレームワークの使用におけるいくつかのエラー解決策と提案

この記事は、Yii 開発プロセスにおける小さな問題の解決策を記録することを目的としています。これは包括的ではなく、権威がなく、チュートリアルでもありません。自分で書いたものなので、今後も使えると思いますので、覚えておいてください。

1. Yii での Js および Css ファイルの紹介。
最も単純な質問から始めましょう。これは問題ではありません。単なる文法です。 js ファイルは protected と同じレベルの js フォルダーに配置され、css ファイルは protected と同じレベルの css フォルダーに配置されているとします。まあ、仕様は次のとおりです。対応するビューではインターフェイスは次のように記述されています。 css 関数と js 関数のパラメーターが異なります... (このため、調整に 1 時間かかりました..)
登録された js ファイルの 2 番目のパラメータは、js が配置される場所です。 CClientScript::POS_HEAD は Head 部分に配置されます。 CClientScript::POS_BEGIN は、Body の先頭に配置されます。特別な要件はありません。登録する CSS ファイルの 2 番目のパラメータはここをクリックしてください。 ...
Jquery のような js の場合、 registerCoreScript を使用しても不可解なエラーは発生しません...

リーリー

2. Yii isNewRecord の修正
Yii のモデルの isNewRecord 属性は非常に便利で、この属性に基づいてケースバイケースで議論できます。ただし、トランザクション メカニズムやその他の状況をオンにして、挿入後にデータがロールバックされると、レコードはデータベースに存在しなくなりますが、isNewRecord は false になります。これは、新しいレコードではなくなったことを意味します。解決策は、主キーを使用してデータベースにアクセスし、それが新しいレコードであるかどうかを判断することです。この属性を使用する前に、まず次のように処理する必要があります。次のモデルは Post で、主キーは id です:

リーリー

3.Yii は非表示の入力フィールドを生成します
入力フィールドを自分で書くのは簡単ですが (display:none だけですよね)、場合によっては Yii のフォーム コード形式に従わなければならない場合もあります。とにかく 1 文だけ...

リーリー

4. Yii はドロップダウン メニューを生成します
フォームにドロップダウン メニューが必要な場合は、Chtml の listdata が非常に便利です。データベース内のフィールドの可能性が 0 と 1 など少数しかない場合は、次のように書くことができます:

リーリー

この時点で表示されるのは、はいといいえのドロップダウン メニューです。「はい」を選択して送信すると、このフィールドには 1 が入力され、「いいえ」には 0 が入力されます。もちろん、これはそれほど単純ではありません。モデルに関数を追加してドロップダウン メニューの配列を生成し、それをビューで呼び出すことができます。この関数のデータは自分で書き込むことも、データベースから見つけることもできます。以下では Listdata が使用されています。これは、モデル内の ID がキーであり、名前が値であることを具体的に意味します。

リーリー

5.Yii トランザクションメカニズムをオンにします
複数のレコードをデータベースに同時に保存する場合、トランザクション メカニズムを有効にする必要がある場合があります。 Yii でトランザクション メカニズムを有効にするのは簡単で、たった 3 つの文で十分です。

リーリー

より完全なものは次のようになります:

リーリー

でも私は普段こうやってますので、その効果はご自身で体験してみてください…

リーリー

6. 関連テーブルの同じフィールドをクエリするとエラーが発生します。
2 つのテーブルを作成することがありますが、その 2 つのテーブルには同じフィールドがあります。CDbCriteria を使用して関連クエリ検索を実行する場合、追加の設定が行われていない場合、クエリ エラーが発生します。これはおそらく、Mysql ステートメントがあいまいであることを意味します。現時点では、メインテーブルにエイリアスを設定するだけでよく、関連するフィールドをクエリするときに名前を追加することに注意してください。
例: 2 つのモデル、Post と User には ID があり、次のように記述できます:

リーリー

7. ファイルのアップロード
そういえば、これは Yii ではありません。基本的にはネイティブの HTML と PHP です。めんどくさい場合は、ここに置いておきます。
以下は HTML で、アクションは独自の URL に変更され、ID と名前も独自に定義されます。

リーリー

これは、サーバーがファイルを受信して​​保存するためのコードです。最終的に、ファイルは添付フォルダーのファイル フォルダーに保存されます。 リーリー

以下は、既存のファイルを old_file パスからattached/fileの現在の日付フォルダーに移動します。ここのモバイルでは名前変更を使用しています

リーリー

8.YIi シナリオとセキュリティ フィールド
現在のモデル シーンを表示します:
リーリー

シーンのセキュリティフィールドを表示します。安全なフィールドとは、ユーザーが送信したときにこれらのデータが Yii によってフィルタリングされないことを意味します。 Web ページで送信されたものの一部が不足していることがわかり、長い間調整した後、そのシナリオで一部がフィルタされていることがわかりました。


$arr = $model->getSafeAttributeNames($model->scenario); 
var_dump($arr); 
ログイン後にコピー

强制赋值避免 rule 规则过滤字段。用 setAttributes 可以强制取消 Yii 的安全过滤,只要第二个参数赋值为 false 就好。但是这也只能对这个 Model 生成时就拥有的字段生效,如果要对包括自己定义的所有字段不过滤,还是要定义场景然后在 rule 里指定安全字段比较好。

if(isset($_GET['Po'])) 
  $model->setAttributes($_GET['Post'],false); 

ログイン後にコピー

检查日期格式合法性
有时我们需要检验用户填写的日期是否合法,可以用下面的函数。

function checkDatetime($dateStr, $format = "Y-m-d H:i:s") 
{ 
  $time = strtotime($dateStr); 
  $checkDate = date($format, $time); 
 
  return $checkDate == $dateStr; 
} 

ログイン後にコピー

Yii 渲染多个 model
相信新手都有疑惑,_form 里面的表单都是渲染一个 model 然后提交给 controller 保存数据的,如果想要渲染多个 model 怎么办呢?
下面,我们假设有两个 model 类,分别叫做 Person 和 Addr,我们想要做的是在一个 Person 的 _form 里再渲染几个 Addr 的 model ,意思是一个人可以有几个地址。基本思路其实还是很简单,就是你在 controller 里定义要渲染的 model 然后传给 view 界面,最后依然在 controller 里接收 Post 过来的数据。主要是写法问题而已,我相信下面大家都能看懂,有疑问的童鞋再留言好了。

//在 controller 里面 
 
$model=new Person; 
/* $addrs 存储 Addr model 的数组,放几个你就看着办吧*/ 
$addrs = array(); 
 
if(isset($_POST['Person'])) 
{ 
  $model->attributes = $_POST['Person']; 
  /*此处省略一堆逻辑*/ 
  foreach($_POST['Addr'] as $one_addr) 
  { 
    $addr = new Addr(); 
    $addr->attributes = $one_addr; 
    /*此处省略另一堆逻辑*/ 
  } 
} 
 
$this->render('create',array( 
  'model'=>$model, 
  'addrs' => $addrs, 
)); 
 
 
//在 view 里面 
 
/*可以循环输出你的多个 model */ 
$num = count($addrs); 
for($i = 0;$i < $num;++$i) 
{ 
  echo $form->labelEx($addrs[$i],"[{$i}]postcode"); 
  echo $form->textField($addrs[$i],"[{$i}]postcode",array('size'=>10,'maxlength'=>10)); 
  ...; 
} 
 
/*也可以通过数字指定输出某个 model */ 
echo $form->labelEx($addrs[0],"[0]postcode"); 
echo $form->textField($addrs[0],"[0]postcode",array('size'=>10,'maxlength'=>10)); 

ログイン後にコピー

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1049138.htmlTechArticlePHP的Yii框架使用中的一些错误解决方法与建议,yii框架 此文意在记录 Yii 开发过程中的小问题解决方案,不全面,不权威,不是教程。自己...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP サービス CakePHP サービス Sep 10, 2024 pm 05:26 PM

この章では、CakePHP で利用できる認証プロセスに関する情報を扱います。

See all articles