简体   繁体   中英

Laravel Controller use same object in two functions

Is there a way to use a object variable instantiated from a class in two functions?

Here's the code I've tried, but its just returning null :

class bookAppointmentsController extends APIController
{
    private $business;  

    public funcition check($key)
    {
        $this->business = new APIClass();
        $setconnection = $this->business->connectAPI($key);
    }

    public function book()
    {
        dd($this->business) //returns null
        $this->business->book();
    }
}

I am trying to use the $business object in two functions but it does not work, when I dd($business) it returns null

Any way to do this?

Maybe the solution could be to make the variable Global

You could make the variable global:

function method( $args ) {
    global $newVar;
    $newVar = "Something";

}

function second_method() {
    global $newVar;
    echo $newVar;
}

Or you could return it from the first method and use it in the second method

public function check($key)
{
    $this->business = new APIClass();
    $setconnection = $this->business->connectAPI($key);
    return $this->business;
}

public function book()
{
   $business = check($key);
   $business->book();
}

Move the instantiation to the constructor:

public function __construct(APIClass $business)
{
    $this->business = $business;
}

However, it would be better if you make Laravel do the heavy lifting and prepare the APIClass for you.

In your AppServicePorvider under the register method, you can create the APIClass

/**
 * Register any application services.
 *
 * @return void
 */
public function register()
{
  $this->app->bind('APIClass', function ($app) {
        $api = new APIClass();
        // Do any logic required to prepare and check the api
        $key = config('API_KEY');
        $api->connectAPI($key);
        return $api;
    });

}

Check the documentations for more details.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM