Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 试图从另一个控制器Laravel 5.3获取非对象的属性_Php_Oop_Laravel 5 - Fatal编程技术网

Php 试图从另一个控制器Laravel 5.3获取非对象的属性

Php 试图从另一个控制器Laravel 5.3获取非对象的属性,php,oop,laravel-5,Php,Oop,Laravel 5,我不认为这是一个典型的非对象错误,但希望比我有更多知识的人能够解决它 我有以下控制器: class MangopayController extends Controller { /** * @var \MangoPay\MangoPayApi */ private $mangopay; public function __construct(MangoPayApi $mangopay) { $this->mangop

我不认为这是一个典型的非对象错误,但希望比我有更多知识的人能够解决它

我有以下控制器:

class MangopayController extends Controller
{

    /**
     * @var \MangoPay\MangoPayApi
     */
    private $mangopay;

    public function __construct(MangoPayApi $mangopay)
    {
        $this->mangopay = $mangopay;
    }

    /**
     *  Add a user to mangopay. This should be done for every new user
     *
     * @return True if successful
     */

    public function addUserToMangopay($user_id)
    {
        // get the admin user object
        $user = User::where('id', $user_id)->first();
        // set fields for mangopay
        $newMangopayUser = new UserNatural();
        $newMangopayUser->Tag = $user->role;
        $newMangopayUser->FirstName = $user->first_name;
        $newMangopayUser->LastName = $user->last_name;
        $newMangopayUser->Birthday = $user->birthday;
        $newMangopayUser->Nationality = $user->nationality;
        $newMangopayUser->CountryOfResidence = $user->country_of_residence;
        $newMangopayUser->Email = $user->email;
        // add user to mango pay, should return user object if successful
        $result = $this->mangopay->Users->Create($newMangopayUser); // <-- this line is causing issues
        if (is_object($result)) {
            $user->mangopay_id = $result->Id;
            $user->save();

            return true;
        }
    }
}
但是,如果我尝试从我的RegisterController运行这个,它看起来像这样:

Route::get('/add-user-to-mangopay/{user_id}', [ 'as' => 'user_id', 'uses' => 'MangopayController@addUserToMangopay']);
class RegisterController extends MangopayController
{
    /**
     * Handle a registration request for the application.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        $result = $this->addUserToMangopay($user->id);

        if ($this->addUserToMangopay($user->id)) {
            return $this->registered($request, $user)
                ?: redirect($this->redirectPath());
        } else {
            return $this->registered($request, $user) ?: redirect($this->redirectPath()->with('alert-danger', 'There was a problem creating your account'));
        }
    }
}
然后我从MangopayController行获得错误“尝试获取非对象的属性”:

    $result = $this->mangopay->Users->Create($newMangopayUser);
我尝试了代码的各种迭代,但都没有成功

真正让人困惑的是,我已经检查了对象,该对象表示错误是使用dd()引用$newMangopayUser;就我所知,它是一个物体,所以它应该能工作

dd($newMangopayUser)


有人能帮忙吗?谢谢

这是因为没有调用父构造函数
MangopayController
(这是PHP的默认行为)。这意味着,
$mangopay
不会被注入,因此它将为
null

这意味着在表达式中,
$This->mangopay->Users->Create($newMangopayUser)
您正在访问
->用户
上的
null

所以它不是真正的
null

尝试按如下方式编辑您的
注册表控制器

class RegisterController extends MangopayController
{
  ...
  public function __construct(MangoPayApi $mangopay)
  {
    // call parent constructor explicitly
    parent::__construct($mangopay);
    ...
  }
...
}
此外,在这部分代码中,您将调用两次
addUserToMangopay()
,而不是检查
$result
(这是不必要的,但不是什么大问题)


好的,太好了,谢谢你,我有一种感觉,这可能是像这样的范围错误。还有1)我想你是指家长::u构造($mangopay),对吗?2) 底部的代码翻了一倍,因为我在玩代码尝试修复时复制并粘贴了代码-我意识到了这一点:再次感谢
class RegisterController extends MangopayController
{
  ...
  public function __construct(MangoPayApi $mangopay)
  {
    // call parent constructor explicitly
    parent::__construct($mangopay);
    ...
  }
...
}
 $result = $this->addUserToMangopay($user->id);

        if ($this->addUserToMangopay($user->id)) {
         ...
        }
 ...
 }