简体   繁体   中英

Laravel Console Command with a Trait

I've set some Config Variables for a Trait I'm working on, One of them is a data_format variable which is either json or xml.

It's set like so :

$this->data_format = config('rightmove.FORMAT');

In a Controller, I can run a dd($this->data_format) and it returns : " json "

I've made this a console command, But when I try to run the console command with a dd of $this->data_format it returns

NULL

and subsequently the rest of my code errors.

I've run a php artisan config:cache command to clear the cache down, But it seems the console is not picking up that config variable?

My App\\Console\\Commands\\UpdateRightMove looks as follows :

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Traits\RightMoveTrait;
use App\Property;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
use QCod\AppSettings\Setting\AppSettings;


class UpdateRightmove extends Command
{
    use RightMoveTrait;

    private $is_set;

    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'rightmove:update';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Updates Rightmove - Creates / Updates and Deletes properties from the Rightmove API';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();

        $this->is_set = setting('rightmove');
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {

        if($this->is_set == 1)
        {
            // Rightmove is Enabled via settings (Run Command)...
            $now = Carbon::now();

            // Check App Cache for Last Time RightMove Artisan Command was Ran...
            //$last_ran = cache('rightmove_update');
            $last_ran = '2019-06-07 14:52:40';

            if($last_ran == NULL)
            {
                // Send ALL Properties to Rightmove, First Time Ran....
                $properties = Property::whereNotNull('ref')
                    ->where('beds', '>', 0 )
                    ->where('price', '>', 0)
                    ->where('name', '!=', '')
                    ->where('city', '!=', '')
                    ->whereRaw('LENGTH(postcode) >= 5')
                    ->get();
            }
            else
            {
                $from_date = Carbon::now();

                // Get a Difference between last ran and now...
                $time_diff = $from_date->diffInHours($last_ran);

                // This will run and get properties that have changed since the last task ran
                $to_date = Carbon::now()->subHours($time_diff);

                // Get Filtered Properties & One's added / updated in last 12 hours...
                $properties = Property::whereNotNull('ref')
                    ->where('beds', '>', 0 )
                    ->where('price', '>', 0)
                    ->where('name', '!=', '')
                    ->where('city', '!=', '')
                    ->whereRaw('LENGTH(postcode) >= 5')
                    ->whereBetween('created_at', [$to_date, $from_date])
                    ->orWhereBetween('updated_at', [$to_date, $from_date])
                    ->get();
            }

            // Get Settings....
            if(setting('overseas') == 0)
            {
                // UK Based....
                $this->update_feed_uk($properties);
            }
            else
            {
                // Overseas....
            }

            Cache::rememberForever('rightmove_update', function()
            {
                return now()->toDateTimeString();
            });
        }
    }
}

My RightMoveTrait is as follows :

<?php

namespace App\Traits;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use App\Property;
use App\PropertyType;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;

trait RightMoveTrait
{
    private $network_id;
    private $branch_id;
    private $data_format;
    private $environment;
    private $allow_delete;
    private $current_time;

    public function __construct()
    {
        $this->network_id = config('rightmove.NETWORK_ID');
        $this->branch_id = config('rightmove.BRANCH_ID');
        $this->data_format = config('rightmove.FORMAT');
        $this->allow_delete = config('rightmove.ALLOW_DELETE');
        $this->environment = config('rightmove.ENVIRONMENT');

        $now = Carbon::now();
        $this->current_time = $now;

        $this->refs = [];
    }

    function update_feed_uk($properties)
    {
        dd($this->data_format);
    }
}

Edit It looks like the console run is skipping past the __construct in the trait. So inside of the construct method in the Console command ( UpdateRightMove ), I've added the variables and it works without issue.

 public function __construct()
    {
        parent::__construct();

        $this->is_set = setting('rightmove');

        $this->network_id = config('rightmove.NETWORK_ID');
        $this->branch_id = config('rightmove.BRANCH_ID');
        $this->data_format = config('rightmove.FORMAT');
        $this->allow_delete = config('rightmove.ALLOW_DELETE');
        $this->environment = config('rightmove.ENVIRONMENT');

        $now = Carbon::now();
        $this->current_time = $now;

        $this->refs = [];
    }

The __construct() function of your trait is not called, because the class uses its own __construct() function.

In your UpdateRightmove class:

use RightMoveTrait {
    RightMoveTrait::__construct as private _rightMoveTraitConstruct;
}

public function __construct()
{
    parent::__construct();
    $this->_rightMoveTraitConstruct();

    $this->is_set = setting('rightmove');
}

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