私はYiiフレームワークが初めてです。Yii で登録フォームを実装したい。ブログ プロジェクトのデモ プロジェクトを確認しましたが、登録フォームがありません。この問題に関するチュートリアルを知っている人はいますか?
4 に答える
まず、Users 用のテーブルを作成します。このテーブルに基づいて、gii を使用して User モデルとコントローラーを生成し、好みに合わせてコードを調整します。ユーザー コントローラー内で、登録を処理する関数を作成します。
function actionRegister() {
$model = new User('register');
// collect user input data
if(isset($_POST['User']))
{
$model->attributes=$_POST['User'];
// validate user input and redirect to the previous page if valid
$model->setAttributes(array(
'datereg' => time(), //additional data you want to insert
'lastlogin' => time() //additional
));
if($model->save())
{
//optional
$login=new LoginForm;
$login->username = $_POST['User']['username'];
$login->password = $_POST['User']['password'];
if($login->validate() && $login->login())
$this->redirect('/pages/welcome');
}
}
else
// display the registration form
$this->render('register',array('model'=>$model));
}
有効なビュー ファイル (register.php) が必要です。
$login=new LoginForm;
$login->username = $_POST['User']['username'];
$login->password = $_POST['User']['password'];
if($login->validate() && $login->login())
$this->redirect('/pages/welcome');
このコード ブロックは、ユーザーを「認証」し、登録が成功した直後にユーザーをログインさせます。CUserIdentity を使用します。$login->login() はパスワードをハッシュします。
また、テーブルに挿入する前にデータを処理するには、このようなものが必要です
public function beforeSave() {
if(parent::beforeSave() && $this->isNewRecord) {
$this->password = md5($this->password);
}
return true;
}
コントローラー内でパスワードをハッシュすることも問題ありません。ただし、Model クラス内で DB 関連のすべてを実行したいと考えています。
ここで $model-validate() を呼び出していないことに気付くかもしれません。これは、$model->save() が検証メソッドも呼び出すためです。詳細: http://www.yiiframework.com/doc/api/1.1/CActiveRecord#save-detail
CActiveForm を使用して、yii で簡単にフォームを作成できます。
ここに yii ドキュメントのリンクがあります:: Yii CActiveForm
- CAvtiveForm を使用して、登録フォームを作成する必要があります (たとえば、LoginForm を参照してください)。
- ユーザー モデルを作成します。
コントローラーを作成します。
class UsersController extends Controller { public function actionSignup() { $model = new RegistrationForm; if (isset($_POST['RegistrationForm'])) { if ($model->validate()) { $user = new Users; $user->populateRecord($form->attributes); $user->save(); $this->redirect(Yii::app()->createUrl('/')); } } $this->render('signup', array('model' => $model)); } }