簡體   English   中英

具有特征的Laravel控制台命令

[英]Laravel Console Command with a Trait

我為我正在處理的Trait設置了一些Config變量,其中一個是一個data_format變量,它是json或xml。

它的設置如下:

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

在Controller中,我可以運行dd($ this-> data_format)並返回:“ json

我已經把它作為一個控制台命令,但當我嘗試使用$this->data_format的dd運行控制台命令時,它返回

空值

然后我的其余代碼錯誤。

我運行了一個php artisan config:cache命令來清除緩存,但似乎控制台沒有拿起那個配置變量?

我的App\\Console\\Commands\\UpdateRightMove如下所示:

<?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();
            });
        }
    }
}

我的RightMoveTrait如下:

<?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);
    }
}

編輯看起來控制台運行正在跳過特征中的__construct 所以在Console命令( UpdateRightMove )中的construct方法內部,我添加了變量,它沒有問題。

 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 = [];
    }

不調用trait的__construct()函數,因為該類使用自己的__construct()函數。

UpdateRightmove類中:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM