zend expressive - zend db

3
我正在尝试使用Zend Expressive,现在正在学习如何处理数据库。我看了一下这个网站,但是不太清楚。我使用composer安装了zend-db,并添加了一个依赖项的全局php文件,在工厂类中使用容器来获取适配器。但是在实际操作类中没有详细说明如何访问它,因为适配器对象与其他类不在同一个范围内,所以我不知道发生了什么。

有谁能提供一个清晰明了的从头开始连接和查询SQL的示例吗?


你有没有得到任何将Zend/Db与Expressive集成的示例?这可能会很有帮助,因为我也在处理同样的主题。 - Leo
1个回答

1
尝试通过工厂注入您的db类,按照骨架应用程序上的示例进行操作,您可以像这样做:
HomePageFactory.php

    public function __invoke(ContainerInterface $container)
{
    $router   = $container->get(RouterInterface::class);
    $template = $container->has(TemplateRendererInterface::class) ? $container->get(TemplateRendererInterface::class) : null;

    $adapter    = $container->get( Adapter::class );
    $usersTable = $container->get( Table\UsersTable::class );


    return new HomePageAction($router, $template,$adapter,$usersTable);
}

HomePageAction.php

class HomePageAction implements ServerMiddlewareInterface
{
/**
 * @var Router\RouterInterface
 */
private $router;

/**
 * @var null|Template\TemplateRendererInterface
 */
private $template;

/**
 * @var Adapter
 */
private $dbAdapter;

/**
 * @var UsersTable
 */
private $usersTable;

/**
 * HomePageAction constructor.
 * @param Router\RouterInterface $router
 * @param Template\TemplateRendererInterface|null $template
 * @param Adapter $adapter
 * @param UsersTable $usersTable
 */
public function __construct( Router\RouterInterface $router, Template\TemplateRendererInterface $template = null, Adapter $adapter, Table\UsersTable $usersTable )
{
    $this->router     = $router;
    $this->template   = $template;
    $this->dbAdapter  = $adapter;
    $this->usersTable = $usersTable;

}

在您的配置提供程序中,您需要将依赖项配置为工厂,例如:在您的表所在的配置提供程序上。

'factories'  => [

            Table\UsersTable::class => function($container) {
                $dbAdapter          = $container->get( AdapterInterface::class );
                $resultSetPrototype = new ResultSet();
                $resultSetPrototype->setArrayObjectPrototype( new Model\Users() );
                $tableGateway       = new TableGateway('users', $dbAdapter, null, $resultSetPrototype);
                return new Table\UsersTable($tableGateway);
            },

        ],

通过这个实现,UserTable.php必须在App/src/models/中创建才能提供,对吗? - Leo
1
你想在哪里呢:),但是是的。 - rafaelphp
你能否更新一下你的回答并提供一个UsersTable类和User模型的例子?还有如何处理一个简单的查询?我已经尝试了很多次让框架工作,但都失败了。 - Leo
是的,我可以给你一个带有示例的表现丰富的应用程序。 - rafaelphp
1
在GitHub上,这里是:https://github.com/rafaelphp/zf-expressive-db-tutorial-stackoverflow - rafaelphp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接