[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ищу наставника по Yii2
Страницы: 1, 2
Arcoslov
Всем привет.

Ищу человека, который мне поможет освоить YII2.

Прочитал мануал (вот этот). Вопросов больше чем ответов.
Поставил, хело ворлд, все дела, а как чё работает, как самому создавать приложения итд - нет понимания. Суть mvc понимаю так себе.
Готов рассмотреть различные варианты - оплату, сотрудничество, итд.

"ну ты тут вопрос напиши а мы тебе поможем" - не катит. Хочу комплексное понимание.
rolleyes.gif
kristall
Попробуй настроить ЧПУ (раздел "Модификация УРЛ"), тогда роутинг будет яснее:
http://guide.yii2.org-info.by/guide-ru-runtime-routing.html

В контроллере есть методы, которые называются экшены, они вызываются в зависимости от того, что ты напишешь в URL:

http://www.example.com/site/about => вызовет метод actionAbout() в контроллере SiteController.

_____________
echo '<pre>',print_r($var, 1);die;

root@server# make love && war
Arcoslov
Цитата (kristall @ 23.01.2015 - 20:01)
Попробуй настроить ЧПУ (раздел "Модификация УРЛ"), тогда роутинг будет яснее:
http://guide.yii2.org-info.by/guide-ru-runtime-routing.html

В контроллере есть методы, которые называются экшены, они вызываются в зависимости от того, что ты напишешь в URL:

http://www.example.com/site/about => вызовет метод actionAbout() в контроллере SiteController.

Настроил. Поэкспериментировал. Роутинг примерно понятен.

Проблема в том, что весь этот мануал отвечает на вопросы весьма мелочные (хоть и сами по себе позеные). Типа, как прикрутить то-то или то-то. А глобально - не понятно ничего.

Как с нуля писать свой сайт?
Какая должна быть структура?
и т.п.

Вот, взять, к примеру, аутентификацию. Если в настройке маршрутов ещё боле-менее ясно изложнно - в каком файле что писать, как именуются экшены и как они вызываются, то тут не понятно ничего, просто про какие-то настройки и всё.
Как взять и написать форму аутентификации?
Как её модифицировать (ну, там, свои поля, логику, итд.)?
как прикрутить её в нужное место сайта?
итд..
bestxp
Если бы ТС читал внимальено не было бы вопросов именования и структуры

PSR стандарты именования, структуры и тд это давно описано

что мешает тебе сделать форму авторизации?
Читаешь как сделать форму + как авторизоваться с помощью yii2
как модифицировать? Снова читаешь как сделать форму на yii2
Как прикрутить в нужное место? Читаешь как устроен view в yii2

плюс у тебя есть есть прекрасный gii генератор кода
Michael
Цитата (Arcoslov)
Вот, взять, к примеру, аутентификацию.

По ссылке то про REST аутентификацию, тебе это пока не надо. Читай просто про аутентификацию.
Цитата (Arcoslov)
Как взять и написать форму аутентификации?
Как её модифицировать (ну, там, свои поля, логику, итд.)?
как прикрутить её в нужное место сайта?

Так ты устанавливал сам Yii2? Смотрел его? В каждом из тех шаблонов есть пример рабочей аутентификации.

_____________
There never was a struggle in the soul of a good man that was not hard
Michael
Цитата (Arcoslov)
Проблема в том, что весь этот мануал отвечает на вопросы весьма мелочные (хоть и сами по себе позеные). Типа, как прикрутить то-то или то-то. А глобально - не понятно ничего.

Мануал объясняет как пользоваться фреймворком.
Но зачастую не объясняет как вся эта химия работает, на каких задумках основана, какие задачи решались.
Мануал не отвечает на мелочные вопросы, то что в мануале - это то чем в основном придется пользоваться, это основное.
Ну а чтобы ПОНИМАТЬ, надо затратить усилия и посмотреть в коде как что работает.
Пройтись хотя бы от момента старта системы до момента отдачи контента и финала работы.

Дело в том что на практике даже на фреймворке можно делать все очень по разному и криво в том числе, таких недоразобравшихся спецов хватает, разбираясь в том как именно работает фрейм ты можешь избежать этой судьбы.

p.s. Приватное обучение не практикую.

_____________
There never was a struggle in the soul of a good man that was not hard
Michael
Если только начинаешь разбираться, я бы не лез в аутентификацию и пользователя.
Чтобы понять этот материал надо усвоить сначала предыдущий.
По порядку, который в самом мануале, но прорабатывая на практике.

_____________
There never was a struggle in the soul of a good man that was not hard
kristall
Michael правильно написал. Делать можно по-разному, может быть и криво. Это фреймворк, он берет на себя только рутину, а все остальное оставляет на усмотрение разработчика. Более того, очень многие моменты до сих пор служат темой холивара.

Схема работы везде одинакова:
  • Создаем новую модель
  • Смотрим, есть ли данные GET/POST
  • Если есть, наполняем ими модель
  • Если наполнение прошло без ошибок, сохраняем модель.
  • Передаем модель в представление.
  • Выводим в представлении форму по данным модели.
  • PROFIT


_____________
echo '<pre>',print_r($var, 1);die;

root@server# make love && war
Arcoslov
Спасибо за ответы, коллеги. Потихоньку что-то да проясняется. :)

На данный момент, у меня такой вопрос.
Не понимаю назначение Приложения и его Компонентов (читал, ссылку обратно в ман давать не надо).
Понимаю, что модели в каких-то случаях его используют.
В каких?

Поставил шаблон yii2-advanced, где более разумно реализована аутентификация.
В целом, в коде понятно вроде всё, кроме одного:

модель LoginForm.php
 
public function login()
{
if ($this->validate()) {
return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
} else {
return false;
}
}



Что такое Yii::$app->user->login() ? Не могу найти эту функцию.

p.s. плюс, вообще не понятно, где указывается таблица юзеров и её структура, как туда происходит сохранение.
Michael
Сама вся система состоит из модулей вложенных один во второй.
Самый верхний модуль называется Приложением.
На вот эти модули можно установить компоненты, которые просто независимые агенты что то делающие.
Цитата
Что такое Yii::$app->user->login() ? Не могу найти эту функцию.

Смотришь файл конфига, раздел 'components', там видишь ключ 'user' это и есть компонент который реализует сущность пользователя. Класс пользователя там указан, найдешь и метод.

Цитата
p.s. плюс, вообще не понятно, где указывается таблица юзеров и её структура, как туда происходит сохранение.

Физически табличка создается через миграции.
common\models\User - это AR модель над данной табличкой
Регистрация у них сделана в frontend\models\SignupForm::signup() , там видно как юзер сохраняется

_____________
There never was a struggle in the soul of a good man that was not hard
Arcoslov
Цитата (Michael @ 1.02.2015 - 12:19)
Смотришь файл конфига, раздел 'components', там видишь ключ 'user' это и есть компонент который реализует сущность пользователя. Класс пользователя там указан, найдешь и метод.

Смотрю frontend/config/main.php:


'components' => [
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
],
...
...



Потом смотрю 'common\models\User.php, там нет никакого login ни в нём, ни в его родителе ActiveRecord, ни в его родителе BaseActiveRecord, ни в его родителе Model.

User.php


<?php
namespace common\models;

use Yii;
use yii\base\NotSupportedException;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;

/**
* User model
*
*
@property integer $id
*
@property string $username
*
@property string $password_hash
*
@property string $password_reset_token
*
@property string $email
*
@property string $auth_key
*
@property integer $status
*
@property integer $created_at
*
@property integer $updated_at
*
@property string $password write-only password
*/

class User extends ActiveRecord implements IdentityInterface
{
const STATUS_DELETED = 0;
const STATUS_ACTIVE = 10;

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

/**
*
@inheritdoc
*/
public function behaviors()
{
return [
TimestampBehavior::className(),
];

}

/**
*
@inheritdoc
*/
public function rules()
{
return [
[
'status', 'default', 'value' => self::STATUS_ACTIVE],
[
'status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],
];

}

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

/**
*
@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, 'status' => self::STATUS_ACTIVE]);
}

/**
* Finds user by password reset token
*
*
@param string $token password reset token
*
@return static|null
*/

public static function findByPasswordResetToken($token)
{
if (!static::isPasswordResetTokenValid($token)) {
return null;
}

return static::findOne([
'password_reset_token' => $token,
'status' => self::STATUS_ACTIVE,
]);

}

/**
* Finds out if password reset token is valid
*
*
@param string $token password reset token
*
@return boolean
*/

public static function isPasswordResetTokenValid($token)
{
if (empty($token)) {
return false;
}
$expire = Yii::$app->params['user.passwordResetTokenExpire'];
$parts = explode('_', $token);
$timestamp = (int) end($parts);
return $timestamp + $expire >= time();
}

/**
*
@inheritdoc
*/
public function getId()
{
return $this->getPrimaryKey();
}

/**
*
@inheritdoc
*/
public function getAuthKey()
{
return $this->auth_key;
}

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

/**
* Validates password
*
*
@param string $password password to validate
*
@return boolean if password provided is valid for current user
*/

public function validatePassword($password)
{
return Yii::$app->security->validatePassword($password, $this->password_hash);
}

/**
* Generates password hash from password and sets it to the model
*
*
@param string $password
*/

public function setPassword($password)
{
$this->password_hash = Yii::$app->security->generatePasswordHash($password);
}

/**
* Generates "remember me" authentication key
*/

public function generateAuthKey()
{
$this->auth_key = Yii::$app->security->generateRandomString();
}

/**
* Generates new password reset token
*/

public function generatePasswordResetToken()
{
$this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time();
}

/**
* Removes password reset token
*/

public function removePasswordResetToken()
{
$this->password_reset_token = null;
}
}



Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.