我在Laravel中创建了一个特征。
在myconstruct中,我正在调用设置('值')-由qcod/laravel-app-settings包提供。
但是在我的方法中,当我引用$ this-> token或$ this-> org_id时,它返回NULL
我知道值已设置,因为它们显示在配置中,并且也在数据库中正确设置。
我的PHP代码是:
<?php
namespace App\Traits;
use Illuminate\Support\Facades\Log;
trait PropertyBaseTrait
{
private $org_id;
private $token;
private $is_set;
public function __construct()
{
$this->org_id = setting('propertybase_org');
$this->token = setting('propertybase_token');
}
public function base_url($method)
{
return 'https://pb-integrations-api-staging.herokuapp.com/api/v1/'.$method.'/'.$this->org_id.'';
}
public function post_lead($data)
{
$lead_data = array(
'first_name' => '',
'last_name' => '',
'email' => '',
'phone1' => '',
'phone2' => '',
'phone3' => '',
'address' => '',
'city' => '',
'state' => '',
'zip_code' => '',
'country_name' => '',
'landing_page' => '',
'search_term' => '',
'referral_source' => ''
);
$object_type = 'lead';
$action_type = 'create';
dd($this->token);
$endpoint = $this->base_url('messages');
$this->post_data( $endpoint, $object_type, $action_type, json_encode($data));
}
避免在特征中编写构造函数。这就是我可以说的。
相反,您可以将它们设为普通方法,然后在类构造函数中调用它。
特质
trait Bar
{
public function init()
{
$this->org_id = setting('propertybase_org');
$this->token = setting('propertybase_token');
}
}
Class
class Foo
{
use Bar;
public function __construct()
{
$this->init();
}
}
问题是您在特质中可能已经构造了,也许在使用该特质的班级中也有构造。可能的情况:
class MyClass {
use MyTraitWithConstructor;
public function __construct(){
...
}
}
在这种情况下,特征构造器不起作用。
您可以做什么?
您可以这样重命名特征构造:
class MyClass {
use PropertyBaseTrait {
PropertyBaseTrait::__construct as private __prConstruct;
}
public function __construct(){
$this->__prConstruct();
...
}
}