README.md

    Yii 2 Advanced Project Template


    Yii 2 Advanced Project Template is a skeleton Yii 2 application best for developing complex Web applications with multiple tiers.

    The template includes three tiers: front end, back end, and console, each of which is a separate Yii application.

    The template is designed to work in a team development environment. It supports deploying the application in different environments.

    Documentation is at docs/guide/README.md.

    Latest Stable Version Total Downloads build

    DIRECTORY STRUCTURE

    common
        config/              contains shared configurations
        mail/                contains view files for e-mails
        models/              contains model classes used in both backend and frontend
        tests/               contains tests for common classes    
    console
        config/              contains console configurations
        controllers/         contains console controllers (commands)
        migrations/          contains database migrations
        models/              contains console-specific model classes
        runtime/             contains files generated during runtime
    backend
        assets/              contains application assets such as JavaScript and CSS
        config/              contains backend configurations
        controllers/         contains Web controller classes
        models/              contains backend-specific model classes
        runtime/             contains files generated during runtime
        tests/               contains tests for backend application    
        views/               contains view files for the Web application
        web/                 contains the entry script and Web resources
    frontend
        assets/              contains application assets such as JavaScript and CSS
        config/              contains frontend configurations
        controllers/         contains Web controller classes
        models/              contains frontend-specific model classes
        runtime/             contains files generated during runtime
        tests/               contains tests for frontend application
        views/               contains view files for the Web application
        web/                 contains the entry script and Web resources
        widgets/             contains frontend widgets
    vendor/                  contains dependent 3rd-party packages
    environments/            contains environment-based overrides
    

    Вопросы

    frontend/modules/v1/models/User.php

    $user->patronymic = '';

    $user->temporary_pass = '';

    То что сделал

    localhost/docs - задание и постмен коллекция

    localhost/frontend/config/main.php

        'modules' => [
            'v1' => [
                'class' => 'frontend\modules\v1\Module',
            ],
        ],
        'components' => [
            'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'enableStrictParsing' => false,
                'rules' => [
                    [
                        'class' => 'yii\rest\UrlRule',
                        'controller' => ['site'],
                    ],
                    [
                        'class' => 'yii\rest\UrlRule',
                        'controller' => ['v1/user'],
                    ],
                    [
                        'class' => 'yii\rest\UrlRule',
                        'controller' => ['v1/auth'],
                    ],
                ],
            ],
            'request' => [
                'csrfParam' => '_csrf-frontend',
                /*'parsers' => [
                    'application/json' => 'yiiwebJsonParser',
                ]*/
            ],
    

    frontend/modules/v1/controllers/RestController.php

            public function actions() {
    		$actions = parent::actions();
    		$actions['create']['class'] = 'frontend\modules\v1\rest\CreateAction';
    		$actions['delete']['class'] = 'frontend\modules\v1\rest\DeleteAction';
    		// добавлено обновление пользователя
    		$actions['update']['class'] = 'frontend\modules\v1\rest\UpdateStudentAction';
    		return $actions;
    	}
    
    

    frontend/modules/v1/controllers/UserController.php

    /**
         *
         * @OA\Put(path="/v1/user/{id}",
         *     tags={"Пользователи (user)"},
         *     summary="Редактирование пользователя",
         *	   @OA\Parameter(name="id", in="path", description="Идентификатор", required=true),
         *     @OA\Response(
         *         response = 200,
         * 		   description = "OK",
         *         @OA\Schema(ref = "#/components/schemas/User")
         *     ),
         *     @OA\Response(
         *         response = 404,
         * 		   description = "Not found",
         *         @OA\Schema(ref = "#/components/schemas/User")
         *     ),
         *		security={{"bearerAuth":{}}}
         * )
         */
        public function actionUpdate($id) {
            $model = User::find()->where(['id' => $id])->one();
    
            if (!$model) {
                throw new \yii\web\HttpException(404, 'No entries found with this query string');
            }
    
            $model->scenario = User::SCENARIO_UPDATE;
            $model->load(Yii::$app->getRequest()->getBodyParams(), '');
    
            if ($model->save()) {
                Yii::$app->response->setStatusCode(200);
                return [
                    'message' => 'User updated successfully',
                    'data' => $model,
                ];
            } else {
                Yii::$app->response->setStatusCode(400);
                return [
                    'error' => 'Failed to update user',
                    'errors' => $model->errors,
                ];
            }
            throw new \yii\web\HttpException(404, 'No entries found with this query string');
        }
    

    common/models/User.php

        public $patronymic;
        public $temporary_pass;
    
        const SCENARIO_AUTHORIZATION = 'authorization';
        const SCENARIO_UPDATE = 'update';
        const SCENARIO_CREATE = 'create';
        ...
        public static function findIdentityByAccessToken($token, $type = null)
        {
            return static::findOne(['access_token' => $token]);
        }
        ...
        /**
         * Finds user by email
         *
         * @param string $email
         * @return static|null
         */
        public static function findByEmail($email)
        {
            return static::findOne(['email' => $email, 'status' => self::STATUS_ACTIVE]);
        }
        ...
        public function generateAccessToken($expireInSeconds = 86400)
        {
            $this->access_token = Yii::$app->security->generateRandomString() . '_' . (time() + $expireInSeconds);
        }
    
        public function scenarios()
        {
            $scenarios = parent::scenarios();
            $scenarios[self::SCENARIO_AUTHORIZATION] = ['email', 'password']; // поля, которые должны валидироваться при сценарии 'authorization'
            $scenarios[self::SCENARIO_UPDATE] = ['email', 'password', 'username', 'surname', 'status', 'phone']; // поля, которые должны валидироваться при сценарии обновления данных пользователя
            $scenarios[self::SCENARIO_CREATE] = ['username', 'email', 'password']; // поля, которые должны валидироваться при сценарии создания пользователя
            return $scenarios;
        }
    
    
    Конвейеры
    0 успешных
    0 с ошибкой