Big mystery
Last time I was write a CMS in Yii2 where user have own profile with personal information and relationships to terms.
Updating user profile is not problem in Yii2 but when I want updating profile and terms relationships it was a mystery.
Simplicity is a key
So I created Yii2 model which represents user edit personal form.
To constructor I was pass User which is ActiveRecord
I want to save all user profile details, remove all terms relationships and create new ones.
class EditPersonalForm extends Model{
public $user;
public $name;
public $events;
public function __construct(User $user, $config = [])
{
parent::__construct($config);
$this->user = $user;
// user details
$this->name = $user->getName();
// terms details
$this->events = $user->getEventsList();
}
public function save($runValidation = true)
{
$userProfileUpdated = $this->updateUserProfile($runValidation);
$this->updateUserEvents();
return $userProfileUpdated;
}
public function updateUserProfile($runValidation)
{
$this->user->scenario = $this->scenario;
$this->user->load(Yii::$app->request->post(), $this->formName());
return $this->user->save($runValidation);
}
public function updateUserEvents()
{
TermRelationship::deleteAllEventsByUserID($this->user->getId());
$this->createTermRelationships($this->events, 0);
}
private function createTermRelationships($termsID, $termType)
{
foreach ($termsID as $termID){
$data = array(
'termID' => $termID,
'termType' => $termType,
'userID' => $this->user->getId()
);
(new TermRelationship($data))->save();
}
}
}
I complete the form fields by giving property value in __construct()
.
New instance of edit form model is created in controller action and passed to view.
Also what I gonna do in controller is load data from request by standard Model load()
method and save edit form hence saving user details and his relations with terms.
// standard controller action
if ($editForm->load(Yii::$app->request->post()) && $editForm->save()) {
//success message
return $this->refresh();
}
That would be enough, greetings plum!
Top comments (0)