Демо блог на Yii2
Демо блог на Yii2
Привет всем!
Собственно, хочу поделится ссылкой на статью: http://habrahabr.ru/post/185236/
Надеюсь будет полезно и интересно!
Сильно не критикуйте, времени на знакомство было мало. Полно работы сейчас.
От себя хочу пожелать команде разработчиков успехов, и терпение, в развитие такого хорошего продукта.
UPD:
Ссылка на Github
Ссылка на демо
Собственно, хочу поделится ссылкой на статью: http://habrahabr.ru/post/185236/
Надеюсь будет полезно и интересно!
Сильно не критикуйте, времени на знакомство было мало. Полно работы сейчас.
От себя хочу пожелать команде разработчиков успехов, и терпение, в развитие такого хорошего продукта.
UPD:
Ссылка на Github
Ссылка на демо
Последний раз редактировалось vova07 2014.01.25, 12:14, всего редактировалось 3 раза.
Re: Демо блог на Yii2
конечно прочитаем на досуге.
надеюсь дадут Вам инвайт, который Вы так хотели )
надеюсь дадут Вам инвайт, который Вы так хотели )
Re: Демо блог на Yii2
Спасибо!
Последний раз редактировалось vova07 2013.07.01, 18:23, всего редактировалось 1 раз.
Re: Демо блог на Yii2
расскажите как они его дают. статья - по любому инвайт ? или еще что то...
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Демо блог на Yii2
Спасибо за статью.
futbolim
Хорошая статья — с большой вероятностью инвайт. Если, конечно, он есть у тех, кто её прочитает. У меня вот все кончились пару лет назад, а новые дают только за суперстатьи, которые я пиши редко.
futbolim
Хорошая статья — с большой вероятностью инвайт. Если, конечно, он есть у тех, кто её прочитает. У меня вот все кончились пару лет назад, а новые дают только за суперстатьи, которые я пиши редко.
Нравится Yii? Давайте сделаем его лучше!.
Re: Демо блог на Yii2
futbolim
В правилах хабра всё более менее подробно написано. Можно получить несколькими путями.
1) Если статья действительно хорошая (в песочнице) то модератор (он же НЛО) может сам перевести вас из Рид Онли.
2) Если кому-то из читателей у кого есть инвайт и кого вы удивите статьёй, то он может вам подарить его (применяется в настройках учётки)
3) Раньше давался инвайт если статья набирала вроде бы 50 кармы, сейчас не знаю работает ли это правило.
Моя статья про домашнюю мини-климат-контроль систему понравилась модераторам, поэтому меня НЛО заапрувил, к примеру.
В правилах хабра всё более менее подробно написано. Можно получить несколькими путями.
1) Если статья действительно хорошая (в песочнице) то модератор (он же НЛО) может сам перевести вас из Рид Онли.
2) Если кому-то из читателей у кого есть инвайт и кого вы удивите статьёй, то он может вам подарить его (применяется в настройках учётки)
3) Раньше давался инвайт если статья набирала вроде бы 50 кармы, сейчас не знаю работает ли это правило.
Моя статья про домашнюю мини-климат-контроль систему понравилась модераторам, поэтому меня НЛО заапрувил, к примеру.
Re: Демо блог на Yii2
благодарю
Re: Демо блог на Yii2
суховато для статьи
события плохо раскрыты
события плохо раскрыты
Re: Демо блог на Yii2
Про статью не спорю.
А почему события плохо раскрыты? Я не спорю, я это делал в свободное время, хотя в новой версии с событиями работать то очень просто, и раскрывать там особо нечего.
А почему события плохо раскрыты? Я не спорю, я это делал в свободное время, хотя в новой версии с событиями работать то очень просто, и раскрывать там особо нечего.
Re: Демо блог на Yii2
Код: Выделить всё
файл app\modules\users\models\User
...
public function afterSave($insert)
{
// Создаём событие
$event = new ModelEvent;
$this->trigger(self::EVENT_NEW_USER, $event);
parent::afterSave($insert);
}
...
файл app\modules\users\controllers\DefaultController
...
public function actionSignup()
{
$model = new User();
$model->scenario = 'signup';
if ($model->load($_POST)) {
if (!$this->module->activeAfterRegistration)
// Задаём наш обработчик событий, для события [[EVENT_NEW_USER]]
$model->on($model::EVENT_NEW_USER, array($this->module, 'onNewUser'));
if ($model->save()) {
Yii::$app->session->setFlash('success');
return Yii::$app->response->refresh();
}
} else {
echo $this->render('signup', array('model' => $model));
}
}
...
Re: Демо блог на Yii2
Из конкретно данного примера согласен что для новичков что-то возможно непонятно, но если честно за основу, статья берет готовый блог, где все это можно подсмотреть, по этому кода так мало. Это больше обзор, чем руководство.
Но раз уж возникают вопросы, напишу более подробно, маленькую инструкцию.
Итак, чтобы добавить своё событие в Yii 2, нам нужно сделать следующие вещи:
1) Определить событие - подразумевается определение момента когда событие должно сработать.
2) В нужном месте повесить на наше событие, обработчик.
3) Написать логику самого обработчика. (Хотя это уже не относится к событиям как таковы)
Все!
Теперь на простом примере все разберём. (Пример берём из демо приложения)
Задача: При регистрации нового пользователя, нужно отправлять код для подтверждения электронного адреса. Письмо должно отправятся моментально.
1) Определяем событие:
На этом все с определением события. переходим к следующему пункту.
2) Подключение обработчика для нашего события:
Есть несколько способов привязки обработчика:
3) Описание самого обработчика:
На этом все. Теперь при создании нового пользователя, на его почту, будет отправлен код активации. (В нашем примере, это случится если параметр $activeAfterRegistration = true)
Надеюсь так более понятно и удобно для всех.
Спасибо!
Но раз уж возникают вопросы, напишу более подробно, маленькую инструкцию.
Итак, чтобы добавить своё событие в Yii 2, нам нужно сделать следующие вещи:
1) Определить событие - подразумевается определение момента когда событие должно сработать.
2) В нужном месте повесить на наше событие, обработчик.
3) Написать логику самого обработчика. (Хотя это уже не относится к событиям как таковы)
Все!
Теперь на простом примере все разберём. (Пример берём из демо приложения)
Задача: При регистрации нового пользователя, нужно отправлять код для подтверждения электронного адреса. Письмо должно отправятся моментально.
1) Определяем событие:
Код: Выделить всё
Файл модель пользователя: \app\modules\users\models\User
...
const EVENT_NEW_USER = 'newUser'; // Просто определяем имя нашего события в виде константы. По принципу Yii 2. (Это можно не делать на простых проектах)
...
// Сообщение мы будем отправлять после того как пользователь был добавлен в базу. таким образом событие добавляется в функцию: afterSave()
public function afterSave($insert)
{
$event = new ModelEvent; // Тут мы определяем параметр нашего события. То что мы передаём. В данном случае передаётся значение $this, то есть текущая сущность модели (новый юзер) со всеми сохранными полями
$this->trigger(self::EVENT_NEW_USER, $event); // Тут мы вызываем непосредственно наше событие а именно EVENT_NEW_USER что = "newUser", и передаём наш $event параметр, который можно будет потом использовать в обработчике событий.
parent::afterSave($insert); // Вызываем родительскую функцию afterSave()
}
2) Подключение обработчика для нашего события:
Код: Выделить всё
// Файл контроллера: \app\modules\users\controllers\DefaultController
public function actionSignup()
{
$model = new User();
$model->scenario = 'signup';
if ($model->load($_POST)) {
if (!$this->module->activeAfterRegistration)
$model->on($model::EVENT_NEW_USER, array($this->module, 'onNewUser')); // Тут мы задаём непосредственно обработчик для нашего события. $model::EVENT_NEW_USER это у нас та же константа что мы объявили в нашей модели пользователей, что снова = "newUser". array($this->module, 'onNewUser') это у нас конкретно обработчик. Есть несколько возможностей его назначать. Смотрите ниже или на хабре. В данном случае, массив параметр означает, что нужно брать метод: "onNewUser", из модуля к которому относится наш текущий класс. В нашем примере это: \app\modules\users\Users
if ($model->save()) {
Yii::$app->session->setFlash('success');
return Yii::$app->response->refresh();
}
} else {
echo $this->render('signup', array('model' => $model));
}
}
Код: Выделить всё
function ($event) { ... } // Анонимная функция
array($object, 'handleClick') // $object->handleClick()
array('Page', 'handleClick') // Page::handleClick()
'handleClick' // глобальная функция handleClick()
Код: Выделить всё
//Файл нашего модуля: \app\modules\users\Users
// В нем мы создаём наш метод, который мы определили как обработчик
public function onNewUser($event) // у обработчика должен быть задан аргумент, который хранит в себе переданный объект события
{
$model = $event->sender; // Как и в первой версии, мы должны обработать наше событие, чтобы объект можно было использовать. После этого просто выполняем нужные нам действия.
$url = Yii::$app->urlManager->createAbsoluteUrl('users/default/activation', array('username' => $model['username'], 'key' => $model['activkey']));
$message = 'Thank you for registering. Your activation <a href="' . $url . '">url</a>.';
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
return mail($model['email'], 'Email confirmation', $message, $headers);
}
Надеюсь так более понятно и удобно для всех.
Спасибо!
- lancecoder
- Сообщения: 2532
- Зарегистрирован: 2012.06.26, 17:16
Re: Демо блог на Yii2
я проще опишу, события как в Yii, только теперь объявляем как в Jquery через on, а вызываем trigger
Re: Демо блог на Yii2
Я так и написал на хабре, кроме Jquery, но наверное не совсем понятно новичкам, нужно пощупать, чтобы все понять. )lancecoder писал(а):я проще опишу, события как в Yii, только теперь объявляем как в Jquery через on, а вызываем trigger
Re: Демо блог на Yii2
согласен что лучше бы в начале блока упомянуть про аналогию с jqueryvova07 писал(а):Я так и написал на хабре, кроме Jquery, но наверное не совсем понятно новичкам, нужно пощупать, чтобы все понять. )lancecoder писал(а):я проще опишу, события как в Yii, только теперь объявляем как в Jquery через on, а вызываем trigger
а вот еще не совсем понятная строка, с оборотом "в нужном месте"
Для того чтобы определить событие достаточно в нужном месте вызвать «trigger()» функцию, а уже потом в нужном месте задать для события обработчик.
Re: Демо блог на Yii2
Если заговорили про Jquery, то то что непонятно в данной строке можно объяснить так: все похоже на Jquery.kukuruku писал(а):а вот еще не совсем понятная строка, с оборотом "в нужном месте"
Определить место события - подразумевает, определить для себя когда это событие должно сработать. Перед сохранением, после сохранения, возможно нам нужно перед валидацией. То есть мы просто определяем "когда" это событие будет срабатывать, а в кодовом формате это "где".
Тоже самое с обработчиком - мы определяем когда он будет вызван, при регистрации, после авторизации, после добавления поста, это снова "когда" будет срабатывать, но в коде это "где".
Спасибо!
Re: Демо блог на Yii2
а как вам удалось сделать структуру приложения с модулями?
как то сходу в доке не нашёл.
или вы структуру модулей вручную создавали?
а вроде дошло, там же gii генерирует модули
как то сходу в доке не нашёл.
или вы структуру модулей вручную создавали?
а вроде дошло, там же gii генерирует модули
Re: Демо блог на Yii2
Все создавал вручную, по комментам фрейма. На момент когда я делал обзор, небыло ни gii ничего, хотя и сейчас он только на WIP стадии, так что еще рано его юзать.
Сейчас сильных различий между модульной структурой первой версии и второй почти нет, так что вполне можно руководится интрукцией первой весии.
Сейчас сильных различий между модульной структурой первой версии и второй почти нет, так что вполне можно руководится интрукцией первой весии.
Re: Демо блог на Yii2
Что-то не срабатывает этот триггер, вываливается в ошибку.
/common/modules/users/models/User.php
/common/modules/users/Users.php
Ошибка:
PHP Warning – yii\base\ErrorException
call_user_func() expects parameter 1 to be a valid callback, first array member is not a valid class name or object
в:
/vendor/yiisoft/yii2/yii/base/Component.php
/common/modules/users/models/User.php
Код: Выделить всё
const EVENT_NEW_USER = 'newUser';
/**
* It's just an exemple of an own event. In realy app you can use [[self::EVENT_AFTER_INSERT]]
*/
public function afterSave($insert)
{
$event = new ModelEvent;
$this->trigger(self::EVENT_NEW_USER, $event);
parent::afterSave($insert);
}
Код: Выделить всё
namespace common\modules\users;
use Yii;
use yii\base\Module;
class Users extends Module
{
/**
* If is false, after user registration wi'll be send a confirmation email.
*/
public $activeAfterRegistration = false;
/**
* @var integer number of records per page
*/
public $recordsPerPage = 10;
/**
* This method is called after new user inserting. This is an exemple of [[Event]] $hendler
* @param ActiveRecord app\modules\users\models\User $event
* @return boolean or mail() error
*/
public function onNewUser($event)
{
$model = $event->sender;
$url = Yii::$app->urlManager->createAbsoluteUrl('users/activation', array('username' => $model['username'], 'key' => $model['auth_key']));
$message = 'Thank you for registering. Your activation <a href="' . $url . '">url</a>.';
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
return mail($model['email'], 'Email confirmation', $message, $headers);
}
}
PHP Warning – yii\base\ErrorException
call_user_func() expects parameter 1 to be a valid callback, first array member is not a valid class name or object
в:
/vendor/yiisoft/yii2/yii/base/Component.php
Re: Демо блог на Yii2
Если честно не могу точно ответить чем вызвана данная проблема, но могу сказать одно: код очень устарел и сейчас он уже не правильный с учетом новых коммитов.
По просьбам многих пользователей я начал собирать новое демо приложение, оно будет готово примерно через 2-3 дня. На данный момент могу сказать что новое приложение будет содержать готовый модуль пользователей, блог с категорийми, и комментарии с ajax поддержкой + для всего этого админка. Если есть время подождите пожалуйста пару дней, пока соберу приложение, после смогу ответить на все вопросы.
Спасибо!
По просьбам многих пользователей я начал собирать новое демо приложение, оно будет готово примерно через 2-3 дня. На данный момент могу сказать что новое приложение будет содержать готовый модуль пользователей, блог с категорийми, и комментарии с ajax поддержкой + для всего этого админка. Если есть время подождите пожалуйста пару дней, пока соберу приложение, после смогу ответить на все вопросы.
Спасибо!
Re: Демо блог на Yii2
Да я уже понял, что код старый в блоге, т.к. при запуске там пошли ошибки сразу же.
Я начал собирать на Advanced сборке. И вот при использовании модуля users из блоговой сборки происходят такие штуки.
Хотя в Advanced уже есть авторизация и регистрация.
Я начал собирать на Advanced сборке. И вот при использовании модуля users из блоговой сборки происходят такие штуки.
Хотя в Advanced уже есть авторизация и регистрация.