从父类访问数据库

时间:2018-03-15 22:08:09

标签: php pdo

我是Slim Framework的新手,我正在尝试构建一个与PDO连接的简单webapp到MySQL数据库(以及Twig / Bootstrap UI)。

我尝试从名为" PagesController"的控制器访问数据库。 :

#include <shlobj.h>

TCHAR szFolderPath[MAX_PATH];

if (SHGetSpecialFolderPath(NULL, szFolderPath, CSIDL_LOCAL_APPDATA, FALSE))
{
    cout << szFolderPath << endl;

}

但我只能从index.php调用我的PDO对象,或者从名为&#34的父抽象类中调用;控制器&#34;

class PagesController extends Controller {
    public function getLieu(RequestInterface $request, ResponseInterface $response) {
        // this two lines crash :
        $lieux = $this->$database->query('SELECT * FROM Lieu');
        var_dump($lieux);

        $this->render($response, 'pages/lieu.twig');
    }
}

这里有人可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

使database属性受保护

另外:$this->$database错了。正确是$this->database

请注意,您的课程设计基于服务定位器反模式。例如。您将整个容器传递给控制器​​,以便从中获取数据库对象。不要这样做!仅注入类所需的资源。例如。您的控制器应该只接收数据库实例作为依赖项。请查看thisthisthis,尤其是this

您实际上并不想要注入数据库实例。你应该把它注入适当的data mappers。并且数据映射器应该注入控制器。原则上,从持久层访问数据的过程是更多MVC组件的责任。阅读thisthis。此系列涉及域对象,数据库适配器,数据映射器,存储库和服务的代码示例:Part 1Part 2Part 3Part 4

注意:在Slim中你可以使用Eloquent ORM。请参阅this

建议:您应该在开始(使用)MVC之前学习OOP并熟悉SOLID principles

class Controller {

    private $container;
    protected $database;

    public function __construct($container) {
        $this->container = $container;
        $this->database = $this->container->get('db');

        $lieux = $this->database->query('SELECT * FROM Lieu');
        var_dump($lieux);
    }

    public function render(ResponseInterface $response, $file) {
        $this->container->view->render($response, $file);
    }

}

class PagesController extends Controller {

    public function getLieu(RequestInterface $request, ResponseInterface $response) {
        $lieux = $this->database->query('SELECT * FROM Lieu');
        var_dump($lieux);

        $this->render($response, 'pages/lieu.twig');
    }

}