我正在使用ZF 2框架并遵循以下方案。
示例:
我想要的是当用户访问company_a.site.com或company_b.site.com时,路由在应用程序中是相同的,但来自数据库的数据取决于子域名。
我认为它必须如何运作:
答案 0 :(得分:1)
我在当前项目中做了类似的事情。我使用服务使用基于域名的学说从MySQL数据库获取站点详细信息。
我的服务是
namespace Application\Service;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Application\Entity\Sites;
class SiteFactory implements FactoryInterface
{
/**
* @var EntityManager
*/
protected $entityManager = NULL;
/**
*
* @param \Zend\ServiceManager\ServiceLocatorInterface $serviceLocator
* @return \Application\Entity\Sites
*/
public function createService(ServiceLocatorInterface $serviceLocator)
{
$request = $serviceLocator->get('Request');
$site = new Sites();
if (method_exists($request, 'getUri')) {
$domainName = ltrim($request->getUri()->getHost(), 'www.');
$entityManager = $serviceLocator->get('entityManager');
$repository = $entityManager->getRepository('Application\Entity\Sites');
$site = $repository->findOneByDomainName($domainName);
}
return $site;
}
}
在我的module.config中,我有
'service_manager' => array(
'factories' => array(
'site' => 'Application\Service\SiteFactory',
),
),
并在我的控制器中获取该网站我使用
$this->getServiceLocator()->get('site');
如果没有找到站点,返回站点doctrine实体或空实体。
我希望这能指出你正确的方向。
答案 1 :(得分:0)
我找到了ZF 2 Route Hostname type
的解决方案