検索
ホームページバックエンド開発PHPチュートリアルPHP の Yii フレームワークを使用する際のエラーの解決策と提案、yii Framework_PHP チュートリアル

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 までご連絡ください。
PHP依存性噴射コンテナ:クイックスタートPHP依存性噴射コンテナ:クイックスタートMay 13, 2025 am 12:11 AM

aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

PHPの依存噴射対サービスロケーターPHPの依存噴射対サービスロケーターMay 13, 2025 am 12:10 AM

SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

PHPパフォーマンス最適化戦略。PHPパフォーマンス最適化戦略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

PHPメールの検証:電子メールが正しく送信されるようにしますPHPメールの検証:電子メールが正しく送信されるようにしますMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

PHPアプリケーションをより速くする方法PHPアプリケーションをより速くする方法May 12, 2025 am 12:12 AM

tomakephpapplicationsfaster、followthesesteps:1)useopcodecachinglikeopcacheTostoredscriptbytecode.2)最小化abasequeriesecachingingindexing.3)leveragephp7機能forbettercodeefficiency.4)

PHP依存性インジェクション:コードのテスト可能性を改善しますPHP依存性インジェクション:コードのテスト可能性を改善しますMay 12, 2025 am 12:03 AM

依存性注入(DI)は、明示的に推移的な依存関係によりPHPコードのテスト可能性を大幅に改善します。 1)DI分離クラスと特定の実装により、テストとメンテナンスが柔軟になります。 2)3つのタイプのうち、コンストラクターは、状態を一貫性に保つために明示的な式依存性を注入します。 3)DIコンテナを使用して複雑な依存関係を管理し、コードの品質と開発効率を向上させます。

PHPパフォーマンスの最適化:データベースクエリの最適化PHPパフォーマンスの最適化:データベースクエリの最適化May 12, 2025 am 12:02 AM

DatabaseQueryoptimizationInpholvesseveralstrategESTOEnhancePerformance.1)selectonlynlynlyndorycolumnStoredatedataTransfer.2)useindexingtospeedupdataretrieval.3)revenmecrycachingtostoreres sultsoffrequent queries.4)

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

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

SublimeText3 Mac版

SublimeText3 Mac版

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター