私は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)); } }