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 シナリオとセキュリティ フィールド
現在のモデル シーンを表示します:
リーリー
$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));

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

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

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

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

ホットトピック



