ホームページ > バックエンド開発 > PHPチュートリアル > PHP フレームワーク Yii を使い始めるときに発生した関連問題

PHP フレームワーク Yii を使い始めるときに発生した関連問題

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-13 12:05:46
オリジナル
931 人が閲覧しました

PHP フレームワーク Yii を始めるときに遭遇した問題

最近、PHP という人気のフレームワーク Yii を学習していますが、学習の過程でいくつかの問題に遭遇しました。次のように要約します:

?

(1)アクティブ レコード クラス "User" のテーブル "{{tbl_user}}" がデータベース内に見つかりません.

詳細エラー:

? エラーの理由: エンティティ クラス User のメソッド tableName が "'{{tbl_user}}'" を返します

/**	 * @return string the associated database table name	 */	public function tableName()	{		return '{{tbl_user}}';	}
ログイン後にコピー

? しかし、アプリケーション設定ファイル (D:studyyiiyiidemosshop_goodsprotectedconfigmain.php) には、tablePrefix が指定されていません。

解決策:

方法 1: 両側の中括弧を削除し、次のように変更します:

/**	 * @return string the associated database table name	 */	public function tableName()	{		return 'tbl_user';	}
ログイン後にコピー

?

方法 2: アプリケーション内設定ファイル (D:studyyiiyiidemosshop_goodsprotectedconfigmain.php)

tablePrefix

を指定します (2) CPasswordHelper::verifyPassword($password,$this->password); を使用します。

return CPasswordHelper::verifyPassword($password,$this->password); 問題があります。
は false を返しますが、実際には $password,$ this->password は等しいです。

(3) PHP でメンバー変数を呼び出すときは、 の代わりに -> を使用します。

Java での実務経験のある開発者は、Yii フレームワークを使用する場合、PHP の構文ではなく Java の構文を使用することが非常に簡単です。

?

(4) 登録ページの場合、対応するコントローラーのアクションメソッドで、$_POST['RegisterForm'] を使用してフォームを取得します。項目の値を入力した場合、$_POST の属性名 (RegisterForm など) は何で決まるのでしょうか?

は、render メソッド

?

(5) の 2 番目のパラメーターによって決定されます。 シナリオの区別方法

たとえば、ユーザーは登録時に電子メールと再パスワードを入力する必要がありますが、ログイン時に電子メールと再パスワードを入力する必要はありません。これが、シナリオごとに検証要素が異なる理由です。これを達成するにはどうすればよいでしょうか?

RegisterForm の rules() メソッドでは、

public function rules()	{		return array(			// username and password are required			array('username, password', 'required'),			array('email,repassword', 'required','on'=>'register'),			// rememberMe needs to be a boolean			array('rememberMe', 'boolean','on'=>'login'),			// password needs to be authenticated			array('password', 'authenticate','on'=>'login'),		);	}
ログイン後にコピー

?'on'=>'register' は、検証が「登録」シナリオでのみ必要であることを意味します。

では、どのようにシーンを選択すればよいのでしょうか?

$model=new RegisterForm('register');

?

を指​​定します例

array('ユーザー名, パスワード', '必須', 'on'=>'ログイン, 登録'),
array('メールアドレス', '必須' , 'on'=>'register'),
上記のように、ログイン シナリオではユーザー名とパスワードの属性が必要です。ユーザー名、パスワード、電子メールの属性は登録フィールドに入力する必要があります。したがって、ログイン シナリオでブロック割り当てを実行すると、ユーザー名とパスワードのみがブロック割り当てされます。なぜなら、それら
だけがログイン検証ルールに現れるからです。一方、シーンがレジスターの場合は、3 つのプロパティすべてをブロックに割り当てることができます。
// ログイン シナリオ内
$model=new User('
login');if(isset($_POST['U​​ser']))
$model ->attributes=$_POST['U​​ser'];
// 登録シナリオでは
$model=new User('
register');if(isset($ _POST['U​​ser']))
$model->attributes=$_POST['U​​ser'];

?

?(6)

方法フォームの入力値をバッチで取得します

$model->attributes=$_POST['RegisterForm'];

のインスタンス後?クラスが作成されると、そのプロパティにエンド ユーザーが送信したデータを設定することが必要になることがよくあります。これは、次のような大規模な

割り当てで簡単に実現できます:
$model=new LoginForm;
if(isset($_POST['LoginForm']))
$model-> _POST['LoginForm'];
最後の式は大規模代入と呼ばれ、$_POST['LoginForm'] 内の
の各項目を対応するものにコピーします。 モデルの特徴
。これは、次の割り当てメソッドと同等です: foreach($_POST['LoginForm'] as $name=>$value)
{
if($name は安全な機能です)
$モデル ->$name=$value;
}

?

(7)

フォーム内の * はどのように生成されますか

は、$model の rules() メソッドによって決定されます。


には、
* がありません。これは、RegisterForm の rules() で電子メールが必須であることが制限されていないためです。

public function rules()	{		return array(			// username and password are required			array('username, password', 'required','on'=>'register,login'),			array('repassword', 'required','on'=>'register'),			// rememberMe needs to be a boolean			array('rememberMe', 'boolean','on'=>'login'),			// password needs to be authenticated			array('password', 'authenticate','on'=>'login'),			// 在注册场景中,密码repassword 必须和password 一致。			array('repassword', 'compare', 'compareAttribute'=>'password', 'on'=>'register'),		);	}
ログイン後にコピー
?

?

(8)include(authenticate.php): ストリームを開けませんでした: そのようなファイルまたはディレクトリはありません

問題のあるコード:

?

原因:authenticate() メソッドがありません

30 をコメントアウトするだけです。

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート