yii2.0 admin-create无法从ActiveForm运行


yii 2.0 admin create is not working from ActiveForm

好的,首先我使用的是Yii 2基本版,而不是高级版。

好吧,我已经做到了,这样我的登录功能就可以从数据库中提取数据,并对用户进行硬编码。然后,我在索引视图中显示数据库中所有管理员及其id的网格视图。我试图创建一个创建页面,管理员可以在其中创建另一个管理员。

我确实做到了,但就我的一生而言,我无法找出我做了什么让这个功能停止工作。

型号''用户.php

<?php
namespace app'models;
use yii'base'NotSupportedException;
use yii'db'ActiveRecord;
use yii'web'IdentityInterface;
use yii'data'ActiveDataProvider;
/**
* User model
*
* @property integer $id
* @property string $username
* @property string $authkey
* @property string $password 
* @property string $accessToken
*/
class User extends ActiveRecord implements IdentityInterface
{

/**
 * @inheritdoc
 */
public static function tableName()
{
    return 'Users';
}

public function rules(){
        return [
            [['username','password'], 'required']
        ];
}

public static function findAdmins(){
    $query = self::find();
    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);
    return $dataProvider;
}

/**
 * @inheritdoc
 */
public static function findIdentity($id)
{
    return static::findOne(['id' => $id]);
}

/**
 * @inheritdoc
 */
public static function findIdentityByAccessToken($token, $type = null)
{
    throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
}
/**
 * Finds user by username
 *
 * @param  string      $username
 * @return static|null
 */
public static function findByUsername($username)
{
    return static::findOne(['username' => $username]);
}
/**
 * @inheritdoc
 */
public function getId()
{
    return $this->id;
}
/**
 * @inheritdoc
 */
public function getAuthKey()
{
    return static::findOne('AuthKey');
}
/**
 * @inheritdoc
 */
public function validateAuthKey($authKey)
{
    return static::findOne(['AuthKey' => $authKey]);
}
/**
 * Validates password
 *
 * @param  string  $password password to validate
 * @return boolean if password provided is valid for current user
 */
public function validatePassword($password)
{
    return $this->password === $password;
}
}

Views''admin''index.php

    <?php
    use yii'helpers'Html;
    use yii'grid'GridView;
    /* @var $this yii'web'View */
    $this->title = 'Admins';
    $this->params['breadcrumbs'][] = $this->title;
    ?>
    <div class="site-about">
        <h1><?= Html::encode($this->title) ?></h1>
        <p>
            <?= Html::a('Create Admin', ['create'], ['class' => 'btn btn-success']);?>  
        </p>
        <?php
            if(isset($user_id)){
                print_r($user_id);
            }
        ?>
        <?= GridView::widget([
            'dataProvider' => $dataProvider,
            'columns' => [
                'id',
                'username',
                'password',
                ['class' => 'yii'grid'ActionColumn'],
            ],
        ]); ?> 
    </div>

所以这很有效,并且可以很好地连接到我的数据库。它显示正确的列等。

现在,我将向您展示两个不起作用的视图,一个渲染_form.php 的create.php

views''admin''create.php:

    <?php
    use yii'helpers'Html;

    /* @var $this yii'web'View */
    $this->title = 'Create Admin';
    $this->params['breadcrumbs'][] = ['label' => 'admin', 'url' => ['index']];
    $this->params['breadcrumbs'][] = $this->title;
    if(isset($username)){
    print_r($username);
    echo '</br>';
    print_r($password);   
    }
    ?>
    <div class="site-about">
        <h1><?= Html::encode($this->title) ?></h1>
        <?= $this->render('_form',[
            'model' => $model
        ]); 
        ?>

    </div>

views''admin_form.php:

    <?php
    use yii'helpers'Html;
    use yii'widgets'ActiveForm;

    /* @var $model app'models'Users */
    /* @var $form yii'widgets'ActiveForm */
    ?>
    <div class="admin-form">
        <?php $form = ActiveForm::begin(); ?>

        <?= $form->field($model, 'username')->textInput(); ?>
        <?= $form->field($model, 'password')->textInput(); ?>

        <div class="form-group">
            <?= Html::submitButton('create', ['class' => 'btn btn-success']) ?>
        </div>
        <?php ActiveForm::end(); ?>
    </div>

现在终于是我的控制器:

controllers''AdminController.php:

    <?php
    namespace app'controllers;
    use Yii;
    use yii'web'Controller;
    use yii'filters'VerbFilter;
    use yii'filters'AccessControl;
    use app'models'User;


    class AdminController extends Controller
    {
        public function behaviors()
        {
            return [
                'verbs' => [
                    'class' => VerbFilter::className(),
                    'actions' => [
                        'delete' => ['post'],
                    ],
                ],
            ];
        }
        public function actions()
        {
            return [
                'error' => [
                    'class' => 'yii'web'ErrorAction',
                ],
                'captcha' => [
                    'class' => 'yii'captcha'CaptchaAction',
                    'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
                ],
            ];
        }
        public function actionIndex()
        {
            $searchModel = new User;
            $dataProvider = $searchModel->findAdmins();
            return $this->render('index',[
                'dataProvider' => $dataProvider
                    ]);
        }
        public function actionCreate(){
            $model = new User;
            $request = Yii::$app->request;
            $post = $request->post(); 
            $username = "usernameStandard";
            $password = "passwordStandard";
            if($model->load(Yii::$app->request->post())){
                $username = $post['User']['username'];
                $password = $post['User']['password'];
            }
            return $this->render('create',[
                'model' => $model,
                'username' => $username,
                'password' => $password
                    ]);
        }
    }

好吧,当我尝试这样做时,我从create.php(用rendered_form.php)填写表单。当我点击create按钮时。我打印了post结果以确保这是正确的,并且它会用post结果再次呈现页面。但是,它不会在我的数据库中创建新用户。

真的被困在这里有人能帮忙吗?

好吧,你应该简单地保存你的模型。。。例如:

public function actionCreate()
{
    $model = new User;
    if($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['index']);
    }
    return $this->render('create',[
        'model' => $model,
    ]);
}

阅读更多http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#save()-详细