将DB类注入Abstract Class中的__constructor变量

时间:2014-08-20 00:45:48

标签: php laravel laravel-4

无法将Laravel的DB类注入位于另一个命名空间文件夹中的抽象类。

获取错误“调用未定义的方法Illuminate \ Support \ Facades \ DB :: table()”


- 检查:Working- 的 FrontController.php

<?php
use MyProject\MainPages\Front;

    class indexController extends \BaseController {

        /**
         * @var Front
         */
        private $Front;

        /**
         * @param ProductRepository $productRepo
         */
        function __construct(Front $Front)
        {
            //Test 
            //$this->Front = $Front->goSetup();
        }
    }

- 检查:Working- 的 Front.php

<?php namespace MyProject\MainPages;

use MyProject\MainPages\NavigationSkeleton;

class Front extends NavigationBluPrint {

    /**
     * Begins the process, Step 1
     */
    protected function goSetup() {
        // $this->DB->table() etc
    }
}

- 不工作 - 的 NavigationBluPrint.php

<?php namespace MyProject\MainPages;

use \DB;

abstract class NavigationBluPrint {

    /**
     * @var DB Laravel Database connection
     */
    protected $dB;

    public function __construct(DB $dB)
    {
        // SetDB so when extended it's already set for extended classes
        $this->dB = $dB;
        // Test below
        $x = $this->dB->table('products')->get(); //Error: Call to undefined method Illuminate\Support\Facades\DB::table()
        echo '<pre>';
        print_r($x);
        echo '<pre>';
    }
}

如果我需要使用App ::做一些工作,我不明白它是如何完成的。谢谢


找到解决方案:如果其他人遇到同样的问题。

在抽象类“NavigationBluPrint.php”

我取代了\ DB;与=&GT;使用\ Illuminate \ Database \ DatabaseManager作为DB;

似乎解决了这个问题,虽然我不确定它是从开始实例化新数据库还是使用相同的数据库。如果是前者那么它会失败的目的。

2 个答案:

答案 0 :(得分:0)

您键入了为DB类设置外观,而不是DB类本身。

答案 1 :(得分:0)

通过对象使用静态方法的想法是错误的,这是不可能的。

你应该为数据库操作创建存储库,然后你可以大大注入它们。

创建Eloquent存储库或数据库存储库的说明:

我在这里找到了great article来做这件事。