Различные вопросы по PHP и MySQL

242K
.
The Fast, Secure and Professional - Yii2
# reaper (12.02.2015 / 00:10)
Или user_groups
гГ нее. Есть 4 таблицы

users
users_group
users_permissions
users_group_permissions

Думаю всё таки это нормальные названия. Можно было бы обойтись без последней таблиц, но нужно было бы писать массив в users_group, а это не гуд.
.
(\/)____o_O____(\/)
# Rakovskiy (12.02.2015 / 00:00)
Спасибо понял. {з как назвать таблицу связей прав доступа и групп для юзера, пришлось назвать users_group_permissions
нормальное название, можно просто сократить имена, ugrperm, ,но тогда без пузыря не разберешься
.
The Fast, Secure and Professional - Yii2
# Koenig (12.02.2015 / 00:19)
зачем мешанину устроил, у тебя массив на выходе, массив определенной важности, зачем там еще и вывод текста ошибки? цифрами ретурни, цифру уже обрабатывай, текст ошибки как минимум должен быть в шабло
Ты про rules()???
.
(\/)____o_O____(\/)
'message' => 'Группа с таким алиасом уже существует'
вот
.
Rakovskiy
The Fast, Secure and Professional - Yii2
# Koenig (12.02.2015 / 00:24)
'message' => 'Группа с таким алиасом уже существует'
вот
Это правила валидации формы... Всё правильно там. Не я это делал, а если бы и я то также
.
The Fast, Secure and Professional - Yii2
Сейчас приведу пример как это работает.
.
# Rakovskiy (12.02.2015 / 00:00)
Спасибо понял. {з как назвать таблицу связей прав доступа и групп для юзера, пришлось назвать users_group_permissions
юзер_ убери и все. и так же понятно что за группы, хотя бы по имени класса
.
(\/)____o_O____(\/)
Rakovskiy, то есть ты не имеешь своего мнения и решения, я уже
минимум три решения придумал. и не стоит доверять выбору тех, кто это написал, они ведь тоже могут ошибается, как и я сам
.
The Fast, Secure and Professional - Yii2
Вот пример регистации

Модель:
<?php

namespace app\models;

use app\helpers\Time;
use yii\helpers\Html;
use \yii\db\ActiveRecord;
use yii\web\IdentityInterface;

class Users extends ActiveRecord implements IdentityInterface{
    public $verifyCode;
    public $sex = 'm';

    public static function tableName()
    {
        return 'users';
    }

    public function rules(){
        return [
            [['login', 'password'], 'required', 'on' => 'reg'],
            ['login', 'string', 'min' => 3, 'max' => 25, 'tooShort' => 'Минимальная длина логина 3 сим.', 'tooLong' => 'Максимальная длина логина 25 сим.', 'on' => 'reg'],
            ['password', 'string', 'min' => 6, 'max' => 50, 'tooShort' => 'Минимальная длина пароля 6 сим.', 'tooLong' => 'Максимальная длина пароля 50 сим.', 'on' => 'reg'],
            ['login', 'unique', 'targetAttribute' => 'login', 'message' => 'Такой логин уже занят', 'on' => 'reg'],
            ['sex', 'in', 'range' => ['m', 'w'], 'on' => 'reg'],
            ['verifyCode', 'captcha', 'captchaAction' => 'index/captcha', 'on' => 'reg']
        ];
    }

    public function attributeLabels(){
        return [
            'login' => 'Логин',
            'password' => 'Пароль',
            'sex' => 'Ваш пол',
            'verifyCode' => 'Код с картинки'
        ];
    }

    public static function findIdentity($id)
    {
        return static::findOne($id);
    }

    public static function findIdentityByAccessToken($token, $type = null)
    {
        throw new NotSupportedException('findIdentityByAccessToken is not implemented.');
    }

    public function getId()
    {
        return $this->getPrimaryKey();
    }

    public function getAuthKey()
    {
        return $this->auth_key;
    }

    public function validateAuthKey($authKey)
    {
        return $this->getAuthKey() === $authKey;
    }

    public function beforeSave($insert){
        if ($this->isNewRecord){
            $this->time_reg = Time::real();
            $this->time_visit = Time::real();
            $this->time_total = 0;
        }

        $this->login = Html::encode($this->login);
        $this->password = \Yii::$app->security->generatePasswordHash($this->password);
        return parent::beforeSave($insert);
    }
}


Контроллер:
<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\Users;
use app\models\LoginForm;
use yii\filters\AccessControl;
use yii\helpers;

class IndexController extends Controller
{

    public function actionRegistration()
    {
        $model = new Users();
        $model->scenario = 'reg';

        if ($model->load(Yii::$app->request->post()) && $model->save()){
            return $this->redirect(['/']);
        }

        return $this->render('registration/index', [
            'model' => $model
        ]);
    }

    public function actions()
    {
        return [
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'height' => 20,
                'width' => 90,
                'padding' => 0,
                'offset' => 3,
                'transparent' => true
            ],
        ];
    }
}


Представление:
<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use yii\captcha\Captcha;

/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
/* @var $model app\models\Users */

$this->title = 'Регистрация';
$this->params['breadcrumbs'][] = $this->title;
?>

<h1 class="page-header"><?= Html::encode($this->title) ?></h1>

<div class="row">
    <div class="col-lg-4">
        <?php $form = ActiveForm::begin(); ?>

        <?= $form->field($model, 'login') ?>

        <?= $form->field($model, 'password')->passwordInput() ?>

        <?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
            'captchaAction' => 'index/captcha',
            'template' => '<div class="form-group input-group">{input}<span class="input-group-addon">{image}</span></div>',
        ]) ?>

        <?= $form->field($model, 'sex')->radioList(['m' => 'Мужской', 'w' => 'Женский']) ?>

        <div class="form-group">
            <?= Html::submitButton('Регистрация', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
        </div>

        <?php ActiveForm::end(); ?>
    </div>
</div>


Как бы так, для представления можно написать чистый html код, но объясню нафиг такие телодвижения. Вот такая хрень
$form->field($model, 'login')


Включает в себя label, оформления поля от состояния - если ошибка дается класс error если всё хорошо success, далее вывод самой ошибки сразу под полем и возможность валидации клиента & сервер что является default или ajax & сервер.
.
The Fast, Secure and Professional - Yii2
# Koenig (12.02.2015 / 00:32)
Rakovskiy, то есть ты не имеешь своего мнения и решения, я уже
минимум три решения придумал. и не стоит доверять выбору тех, кто это написал, они ведь тоже могут ошибается, как и я сам
Получать ошибку по ключу или как? Подобная хрень будет в моби
Всего: 7969