• Как организовать личный кабинет пользователя на yii2?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Совет dmirogin хорош, но по целому ряду причин, кабинет пользователя лучше делать во frontend. Это и безопаснее и layout frontend и css и т.д. будут уместнее, чем от backend. Да и методы личного кабинета и кеш ближе к frontend части. Лучше вообще admin часть держать на поддомене.
    Если личный кабинет имеет много своего функционала и методов иногда стоит под него сделать отдельное app, например profile, которое будет разделено от frontend и backend и будет тоже на поддомене. Тут и удобней закрыть от индексации поисковиками и свой конфиг и свой MainController можно сделать и т.д.
    Ответ написан
  • Как организовать личный кабинет пользователя на yii2?

    @dmirogin

    Я правильно понимаю, что в advanced-шаблоне backend-часть предназначена только для администратора? Или можно таким образом разделить публичную часть сайта и личные кабинеты пользователей?


    С помощью фильтра yii\filters\AccessControl и созданием дополнительных ролей можно разграничить доступ.
    Подробнее про rbac в yii2 www.yiiframework.com/doc-2.0/guide-security-author...
    Ответ написан
    Комментировать
  • Формы yii2. Как обновит данные в БД используя модель?

    supervaleha
    @supervaleha
    Web-development
    Ох, не верится мне, что в Гугле Вы подробно искали)) Но, дело житейское.
    Идея:
    1. В контроллере загружаем данные по пользователю в объект модели. Например:
    $model = User::findOne( $someUserId ) ;

    2. Передаем этот объект во вью, где при помощи виджета выводим список всех нужных полей.
    <?php 
    $form = ActiveForm::begin([
        'id'                          =>    'about-form',
        'method'                      =>    'post',
    ]); ?>
    <?=  $form->field($model, 'name_first') ?>
    <?=  $form->field($model, 'name_middle')?>
    <button class="btn btn-lg btn-primary" type="submit">OK</button>
    <?php ActiveForm::end(); ?>


    3. Action формы с методом POST направляем на тот же контроллер и в нем проверяем, каким методом пришел запрос, проводим валидации и т.д. - после чего сохраняем:
    if( \Yii::$app->getRequest()->isPost ){
                if( $model->load( \Yii::$app->request->post() ) && $model->validate() ){
                    $model->save( false ) ;
                 }
            }


    Таким образом типовой метод в контроллере может иметь вид:
    public function actionIndex()
        {
            // загружаем данные по ID
            $model = \app\models\User::findOne( $this->userId );
            // если POST - значит идет сохранение с формы
            if( \Yii::$app->getRequest()->isPost ){
                // если аттрибуты загрузились и отвалидировались - можно сохранять
                if( $model->load( \Yii::$app->request->post() ) && $model->validate() ){
                    $model->save( false ); 
                }
            }
            // передаем объект во вью (если GET - исходные, если POST - обновленные)
            return $this->render('index', [
                'model'     =>  $model
            ]);
        }
    Ответ написан
    2 комментария