私はラミナに比較的慣れていないので、ラミナでどのように処理する必要があるかが非常に複雑に見えます。私の場合、DB アダプターのインスタンスが必要です。
プロジェクトは次のようになります。
メール クラスのインスタンスを (ポスト リクエストの場合に) 作成する IndexController (およびファクトリ) があり、そのメール クラスは MailQueueTable にデータを追加することになっています。しかし、MailQueueTable で DB アダプターを取得する方法がわかりません
ソースコードは次のとおりです。
IndexControllerFactory.php
<?php
declare(strict_types=1);
namespace Test\Controller\Factory;
use Interop\Container\ContainerInterface;
use Laminas\ServiceManager\Factory\FactoryInterface;
use Test\Controller\IndexController;
class IndexControllerFactory implements FactoryInterface
{
public function __invoke(ContainerInterface $container, $requestName, array $options = null)
{
return new IndexController(
$container->get('ApplicationConfig')
);
}
}
IndexController.php
<?php
declare(strict_types=1);
namespace Test\Controller;
use Laminas\Config\Config;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
use Mail\Model\Mail;
class IndexController extends AbstractActionController
{
private $config;
public function __construct(array $config)
{
$this->config = $config;
}
public function indexAction()
{
$request = $this->getRequest();
if ($request->isPost()) {
$Mail = new Mail();
$Mail->send();
}
}
}
}
メール.php
<?php
namespace Mail\Model;
use Laminas\View\Model\ViewModel;
use Mail\Model\Table\MailQueueTable;
class Mail {
public function send()
{
$MailQueueTable = new MailQueueTable();
$MailQueueTable->add();
}
}
MailQueueTable.php
<?php
declare(strict_types=1);
namespace Mail\Model\Table;
use Laminas\Db\Adapter\Adapter;
use Mail\Model\Mail;
class MailQueueTable extends AbstractTableGateway
{
protected $adapter;
protected $table = 'mail_queue';
public function __construct(Adapter $adapter)
{
// Here starts the problem...
// As far as I understand, I have to inject
// the DB Adapter in the Construct of the
// AbstractTableGateway Class...
// But no idea how to get it here...
$this->adapter = $adapter;
$this->initialize();
}
public function add()
{
// SQL Insert Statement would be here
}
}
MailQueue テーブルコードは、私が読んだチュートリアルに基づいて、コンストラクターなどに関するものです。ご覧のとおり、コンストラクトにはアダプターが必要です。しかし、この時点でアダプターを取得する方法がわかりません。
今まで読んだ限りでは、インデックス コントローラー ファクトリに DB アダプターを挿入する必要があります。次に、インデックス コントローラーのアクションから新しく作成されたメール インスタンスに挿入し、そこから MailQueue テーブルに挿入する必要があります。
これが正しい解決策だとは思いません-ラミナを使用する前に、私はただ書くことができました
global $DB;
そして、DBを利用できるようにしました。