I am struggling with closure and saving a variable.
In my class somePlugin
i do have a public var $customerId
, which should be updated after i execute my setUser()
function. To do so i have a setter and getter function. In my init()
function i do want to use the new var on a later EVENT_BEFORE_COMPLETE_ORDER
event. However the variable $customerId
does get reset to the default value after page reload.
How would i avoid that?
I tried using session but it seems like the session has been overwritten on reload as well
class somePlugin extends Plugin {
public $customerId = '1234';
public function init() {
parent::init();
self::$plugin = $this;
Event::on( Order::class, Order::EVENT_BEFORE_COMPLETE_ORDER, function( Event $e ) {
$order = $e->sender;
$customerId = $this->getCustomerId();
// on every page reload it does get reset to the default var, what is not wanted
$order->customerId = $customerId;
} );
}
public function setUser( $userId ) {
self::$plugin = $this;
// get userModel by userId
$userModel = Craft::$app->users->getUserById( $userId );
// check if commerce record for craft user exists
if ( ! $this->customers->getCustomerByUserId( $userId ) ) {
// create and save new customer
$newCustomer = new Customer();
$newCustomer->user = $userModel;
$this->customers->saveCustomer( $newCustomer, false );
}
// store customerId
$customerId = $this->customers->getCustomerByUserId( $userId )->id;
// sets the new and wanted it wich gets overwritten by page reload
$this->setCustomerId( $customerId );
}
public function setCustomerId( $customerId ) {
$this->customerId = $customerId;
}
public function getCustomerId() {
return $this->customerId;
}
}