ZF2用户注册和创建子域

时间:2016-02-20 11:15:33

标签: .htaccess zend-framework2 subdomain user-registration

我正在使用ZF 2框架并遵循以下方案。

  1. 公司可以注册
  2. 注册后,它会创建一个子域名(需要更改 htaccess的)
  3. 示例:

    • site.com =>前端
    • company_a.site.com =>公司前端(company_id = 1)
    • compaby_b.site.com =>公司前端(company_id = 2)

    我想要的是当用户访问company_a.site.com或company_b.site.com时,路由在应用程序中是相同的,但来自数据库的数据取决于子域名。

    我认为它必须如何运作:

    1. 用户来到company_a.site.com
    2. 在主控制器中,我将向DB发出查询,以查看是否存在名称为" company_a"如果是这样,那么分配一个 来自数据库的公司ID的全局变量。所以我可以依据 该ID加载前端的内容。

2 个答案:

答案 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

的解决方案
相关问题