Это не работает, потому что в пользовательском плагине rainlab нет такого события, как rainlab.user.afterUpdate
. Вот список всех событий плагина пользователя rainlab .
Теперь, как вы будете это делать, если нет события?
Так что если вы запускаете такое событие только при его обновлении. Вы можете добавить еще одно скрытое поле внутри формы, как вы упомянули в вопросе о том, что вы добавили дополнительные поля в форму обновления.
Так что просто добавьте это поле
<input type="hidden" name="triggerOnUpdate" value="1">
После этого шага вы должны внести изменения в файл Plugin.php , в котором вы пытаетесь получить доступ к событию rainlab.user.afterUpdate
.
Просто добавьте условие
if(!empty(post('triggerOnUpdate'))){
ProfileModel::getFromUser($user);
}
Так что это сработает ProfileModel::getFromUser($user);
только при попытке его обновить.
Просто замените этот код
$model->bindEvent('model.afterSave', function() use ($model) {
**//it works well when registering the user at the front end**
\Event::listen('rainlab.user.register', function($user) {
ProfileModel::getFromUser($user);
});
if(!empty(post('triggerOnUpdate'))){
ProfileModel::getFromUser($user);
}
});
UserController::extendFormFields(function ($form, $model, $context) {
if (!$model instanceof UserModel)
return;
if (!$model->exists)
return;
ProfileModel::getFromUser($model);
$form->addTabFields([
'profile[skills]' => [
'label' => 'Skills',
'tab' => 'Professional',
'type' => 'text'
],
'profile[experience]' => [
'label' => 'Years of experience',
'tab' => 'Professional',
'type' => 'number'
],
'profile[address]' => [
'label' => 'Professional address',
'tab' => 'Professional',
'type' => 'text'
],
.....
]);
});
Я еще не проверял это, но я думаю, что это будет работать. Пожалуйста, прокомментируйте, если есть сомнения.