Zend Framework 2 を初めて使用するのですが、質問が 1 つあります。
2 つのコントローラーをビューと呼ぶには?
例: モジュール "Retarifacao": Retarifacao\Controller\RetarifacaoController; があります。Retarifacao\Model\RetarifacaoTable; Retarifacao\Model\Retarifacao.
このモジュール内には、他のコントローラー、テーブル、およびモデルがあります: Retarifacao\Controller\CCustosController; Retarifacao\Model\CCustosTable; Retarifacao\Model\CCustos.
それぞれの名前空間で、RetarifacaoController で呼び出される indexAction アクションがあります。そこで、CCustosTable に含まれるメソッドを呼び出す必要があります。これは、私の indexAction で RetarifacaoController が設定された getFixoLocal() です。
モジュール.php
<?php
namespace Retarifacao;
use Retarifacao\Model\Retarifacao;
use Retarifacao\Model\RetarifacaoTable;
use Retarifacao\Model\CCustos;
use Retarifacao\Model\CCustosTable;
use Zend\Db\ResultSet\ResultSet;
use Zend\Db\TableGateway\TableGateway;
class Module
{
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getServiceConfig()
{
return array(
'factories' => array(
'Retarifacao\Model\RetarifacaoTable' => function($sm) {
$tableGateway = $sm->get('RetarifacaoTableGateway');
$table = new RetarifacaoTable($tableGateway);
return $table;
},
'RetarifacaoTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Retarifacao());
return new TableGateway('vc_tarifas', $dbAdapter, null, $resultSetPrototype);
},
'Retarifacao\Model\CCustosTable' => function($sm) {
$tableGateway = $sm->get('CCustosTableGateway');
$table = new CCustosTable($tableGateway);
return $table;
},
'CCustosTableGateway' => function ($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Retarifacao());
return new TableGateway('ccustos', $dbAdapter, null, $resultSetPrototype);
},
),
);
}
}
module.config.php
<?php
return array(
'controllers' => array(
'invokables' => array(
/**
* NAMESPACES DA TABELA
*/
'Retarifacao\Controller\Retarifacao' => 'Retarifacao\Controller\RetarifacaoController',
'Retarifacao\Controller\CCustos' => 'Retarifacao\Controller\CCustosController',
),
),
'router' => array(
'routes' => array(
'retarifacao' => array(
'type' => 'segment',
'options' => array(
'route' => '/retarifacao[/][:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Retarifacao\Controller\Retarifacao',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'retarifacao' => __DIR__ . '/../view',
),
),
);
Retarifacao\Model\CCustosTable.php に含まれているこのメソッドを呼び出す必要があります。
public function getFixoLocal(){
$rowset = $this->tableGateway->select(array('tipo_fixo' => 'fixo_local'));
$row = $rowset->current();
if($row)
return $row;
else
return false;
}
私のRetarifacao\view\retarifacao\retarifacao\index.phtmlにあります。
PS: 私の英語は下手です、私は学生です!!! ;)