Closure in plugin class/ saving and passing a public property 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-&gt;sender;
            $customerId        = $this-&gt;getCustomerId();

            // on every page reload it does get reset to the default var, what is not wanted
            $order-&gt;customerId = $customerId;
        } );
    }

    public function setUser( $userId ) {

        self::$plugin = $this;

        // get userModel by userId
        $userModel = Craft::$app-&gt;users-&gt;getUserById( $userId );

        // check if  commerce record for craft user exists
        if ( ! $this-&gt;customers-&gt;getCustomerByUserId( $userId ) ) {

            // create and save new customer
            $newCustomer       = new Customer();
            $newCustomer-&gt;user = $userModel;
            $this-&gt;customers-&gt;saveCustomer( $newCustomer, false );
        }

        // store customerId
        $customerId = $this-&gt;customers-&gt;getCustomerByUserId( $userId )-&gt;id;

       // sets the new and wanted it wich gets overwritten by page reload
        $this-&gt;setCustomerId( $customerId );

    }

    public function setCustomerId( $customerId ) {
        $this-&gt;customerId = $customerId;
    }

    public function getCustomerId() {
        return $this-&gt;customerId;
    }
}
I figured that i could just use Craft::$app-&gt;getSession()-&gt;set( 'key', $value ); to store the vars in the craft session.

class somePlugin extends Plugin {

    public function init() {

        parent::init();
        self::$plugin = $this;

        Event::on( Order::class, Order::EVENT_BEFORE_COMPLETE_ORDER, function( Event $e ) {
            $order             = $e-&gt;sender;
            $order-&gt;customerId = $this-&gt;getCustomerId();
        } );
    }

    public function setUser( $userId ) {

        self::$plugin = $this;

        // get userModel by userId
        $userModel = Craft::$app-&gt;users-&gt;getUserById( $userId );

        // check if  commerce record for craft user exists
        if ( ! $this-&gt;customers-&gt;getCustomerByUserId( $userId ) ) {

            // create and save new customer
            $newCustomer       = new Customer();
            $newCustomer-&gt;user = $userModel;
            $this-&gt;customers-&gt;saveCustomer( $newCustomer, false );
        }

        // get and store customerId
        $customerId = $this-&gt;customers-&gt;getCustomerByUserId( $userId )-&gt;id;
        $this-&gt;setCustomerId( $customerId );

    }

    public function setCustomerId( $customerId ) {
        Craft::$app-&gt;getSession()-&gt;set( 'customerId', $customerId );
    }

    public function getCustomerId() {
        return Craft::$app-&gt;getSession()-&gt;get( 'customerId' );
    }
}