Yii не может выполнить задачу, не получая ошибок вообще - PullRequest
1 голос
/ 01 марта 2012

Я использую Yii Framework и хочу создать страницу регистрации.Я создал все, что было необходимо, и когда я регистрирую пользователя, я не получаю никакой ошибки, но не могу найти запись в базе данных.так ты можешь мне помочь?вот мой код:

SiteController.php:

public function actionRegister()
{
    $model=new RegisterForm;

    // uncomment the following code to enable ajax-based validation

    if(isset($_POST['ajax']) && $_POST['ajax']==='register-form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }

    if(isset($_POST['RegisterForm']))
    {
        $model->attributes=$_POST['RegisterForm'];
        if($model->validate())
        {
            $user = new User;
            $user->username = $_POST['RegisterForm']['username'];
            $this->password = $_POST['RegisterForm']['password'];
            $this->salt = Security::GenerateSalt(128);
            $user->password = hash('sha512', $password.$salt);
            $user->question = $_POST['RegisterForm']['question'];
            $user->answer = $_POST['RegisterForm']['answer'];
            $user->salt = $salt;
            $user->email = $_POST['RegisterForm']['email'];
            $user->fullname = $_POST['RegisterForm']['fullname'];
            $user->birth = $_POST['RegisterForm']['dd'].'/'.$_POST['RegisterForm']['mm'].'/'.$_POST['RegisterForm']['yy'];
            $user->avatar = CUploadedFile::getInstance($model,'image');
            $user->about = $_POST['RegisterForm']['about'];
            $user->sighnup = date('d/m/y');
            $user->login = date('d/m/y');
            if($user->save())
            {
                $model->image->saveAs('images/users/localFile.jpg');
                // redirect to success page
            }

            $activation = new Activation;
            $record = User::model()->findByAttributes(array('username'=>$_POST['RegisterForm']['username']));
            $activation->user = $record->id;
            $activation->code = Security::ActivationCode(32);
            $activation->save();
        }
    }
    $this->render('register',array('model'=>$model));
}

RegisterForm.php модель проверки:

class RegisterForm extends CFormModel
{
    public $username;
    public $password;
    public $password2;
    public $question;
    public $answer;
    public $email;
    public $fullname;
    public $avatar;
    public $about;
    public $dd;
    public $mm;
    public $yy;
    public $verifyCode;

    public function rules()
    {
        return array(
            array('username, password, password2, question, answer, email, fullname, dd, mm, yy', 'required'),

            array('username','length','min'=>4),
            array('username','length','max'=>16),
            array('username', 'filter', 'filter'=>'strtolower'),
            array('username', 'ext.alpha', 'allowSpaces'=>'flase', 'allowNumbers'=>'true', 'allAccentedLetters'=>'false'),
            array('username', 'unique', 'attributeName'=> 'username', 'className'=>'User' ,'caseSensitive' => 'false'),

            array('password', 'length', 'min' =>6),
            array('password', 'length', 'max' =>32),
            array('password2', 'compare', 'allowEmpty' => 'false', 'compareAttribute' => 'password'),

            array('question', 'length', 'min' =>10),
            array('question', 'length', 'max' =>128),

            array('answer', 'length', 'min' =>4),
            array('answer', 'length', 'max' =>64),

            array('email', 'length', 'min' =>8),
            array('email', 'length', 'max' =>128),
            array('email', 'email'),
            array('email', 'unique', 'attributeName'=> 'email', 'className'=>'User' ,'caseSensitive' => 'false'),

            array('fullname','length','min'=>6),
            array('fullname','length','max'=>64),
            array('fullname', 'ext.alpha', 'allowNumbers'=>'false', 'allowSpaces'=>'true', 'allAccentedLetters'=>'false'),

            array('avatar', 'file', 
                                'types'=>'jpg, gif, png', 
                                'maxSize'=>1024 * 1024 * 2,
                                'tooLarge'=>'The file was larger than 2MB. Please upload a smaller file.',
                                'wrongType'=>'Please upload only images in the format jpg, gif, png',
                                'tooMany'=>'You can upload only 1 avatar',
                        'on'=>'upload'),

            array('about','length','max'=>384),

            array('dd', 'numerical', 'allowEmpty'=>'false', 'integerOnly'=>'true', 'min'=>'1', 'max'=>'31'),
            array('dd', 'FilterDay'),
            array('mm', 'numerical', 'allowEmpty'=>'false', 'integerOnly'=>'true', 'min'=>'0', 'max'=>'12'),
            array('mm', 'FilterMonth'),
            array('yy', 'numerical', 'allowEmpty'=>'false', 'integerOnly'=>'true', 'min'=>'1900', 'max'=>'2008'),
            array('yy', 'FilterYear'),

            array('verifyCode', 'captcha', 'allowEmpty'=>!extension_loaded('gd')),
        );
    }

    public function attributeLabels()
    {
        return array(
            'username' => 'Username',
            'password' => 'Passwrod',
            'password2' => 'Verify Password',
            'email' => 'Email',
            'fullname' => 'Full Name',
            'dd' => 'Day',
            'mm' => 'Month',
            'yy' => 'Year',
        );
    }
}

Register.php файл просмотра:

<div class="form">
<h1><?php echo($data); ?></h1>
<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'register-form',
    'enableAjaxValidation'=>true,
)); ?>

    <p class="note">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary($model); ?>

    <div class="row">
        <?php echo $form->labelEx($model,'username'); ?>
        <?php echo $form->textField($model,'username'); ?>
        <?php echo $form->error($model,'username'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'password'); ?>
        <?php echo CHtml::activePasswordField($model,'password'); ?>
        <?php echo $form->error($model,'password'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'password2'); ?>
        <?php echo CHtml::activePasswordField($model,'password2'); ?>
        <?php echo $form->error($model,'password2'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'email'); ?>
        <?php echo $form->textField($model,'email'); ?>
        <?php echo $form->error($model,'email'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'fullname'); ?>
        <?php echo $form->textField($model,'fullname'); ?>
        <?php echo $form->error($model,'fullname'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'question'); ?>
        <?php echo $form->textField($model,'question'); ?>
        <?php echo $form->error($model,'question'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'answer'); ?>
        <?php echo $form->textField($model,'answer'); ?>
        <?php echo $form->error($model,'answer'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'avatar'); ?>
        <?php echo CHtml::activeFileField($model, 'avatar'); ?>
        <?php echo $form->error($model,'avatar'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'about'); ?>
        <?php echo CHtml::activeTextArea($model, 'about'); ?>
        <?php echo $form->error($model,'about'); ?>
    </div>

<?php
function getYear($value1 = 1900, $value2 = 2008)
{
    $data = array();

    for ($i = $value2; $i >= $value1; $i--){
        $data[$i] = (string)$i;
    }
    return $data;
}

function getMonth()
{
    $data = array();

    for ($i = 1; $i <= 12; $i++){
        $data[$i] = (string)$i;
    }
    return $data;
}

function getDays()
{
    $data = array();

    for ($i = 1; $i <= 31; $i++){
        $data[$i] = (string)$i;
    }
    return $data;
}
?>

    <div class="row">
        <?php echo $form->labelEx($model,'dd'); ?>
        <?php echo CHtml::activeDropDownList($model,'dd', getDays()); ?>
        <?php echo $form->error($model,'dd'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'mm'); ?>
        <?php echo CHtml::activeDropDownList($model,'mm', getMonth()); ?>
        <?php echo $form->error($model,'mm'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'yy'); ?>
        <?php echo CHtml::activeDropDownList($model,'yy', getYear()); ?>
        <?php echo $form->error($model,'yy'); ?>
    </div>

    <?php if(extension_loaded('gd')): ?>
    <div class="simple">
        <?php echo CHtml::activeLabel($model,'verifyCode', array('style'=>'width:150px;')); ?>
        <div>
        <?php $this->widget('CCaptcha'); ?>
        <?php echo CHtml::activeTextField($model,'verifyCode'); ?>
        </div>
        <p class="hint">Please enter the letters as they are shown in the image above.
        <br/>Letters are not case-sensitive.</p>
    </div>
    <?php endif; ?>

    <div class="row buttons">
        <?php echo CHtml::submitButton('Submit'); ?>
    </div>

<?php $this->endWidget(); ?>

</div><!-- form -->

Я не получаю никаких ошибок, но дело в том, что в базе данных вообще нет сообщений, пожалуйста, помогите мне

-------------------------------------------------------- Отредактировано ---------------------------------------------------------------------

Я выяснил в чем проблема.проблема в том, что я не могу вставить информацию в базу данных через активную запись.Когда я набираю:

$user = new User;
$user->username = 'irakli';
$user->save();

, он работает без ошибок, но ничего не вставляет в базу данных.Но дело в том, что соединение с базой данных активно, потому что я могу читать исходные тексты из базы данных через Active Record, проблема в том, что я не могу вставить новые данные в базу данных через Active Record.

Так что есть идеи?

1 Ответ

1 голос
/ 05 марта 2012

Попробуйте это:

$user = new User;
$user->username = 'irakli';
if ($user->save())
{
  echo "user record saved to the db";
}
else
{
  var_dump($user->getErrors());
}
...