Как перенаправить запросы на www.example.com/admin в другой модуль в Zend - PullRequest
0 голосов
/ 03 октября 2011

У меня проблема с перенаправлением запросов в моем приложении.

Мои правила:

  • Employee.domain.com - должен указывать на страницу работодателя - использует по умолчанию модуль
  • Employee.domain.com / Panel / - должен указывать на страницу администрирования конкретного работодателя - использует панель инструментов модуль
  • www.domain.com - должен указывать на страницу агрегирования всех работодателей - использует по умолчанию модуль

Я тестировал много разных маршрутов, но когда один маршрут работает, другой ломается. Также часто это работает только для корневых путей, но когда я добавляю вызов к некоторому контроллеру и действию - он вылетает. Может быть, я должен написать собственный плагин контроллера? Что ты думаешь?

Вот моя текущая конфигурация. Это беспорядок, но, возможно, это поможет поймать какую-то глупую ошибку.

// employer.domain.com/panel
$pathRoute_panel = new Zend_Controller_Router_Route(
    ':panel/:controller/:action/:id/',
    array(
        'panel' => '',
        'module' => 'dashboard',
        'controller' => 'index',
        'action' => 'index',
        'id' => '',
    ),
    array(
        'panel' => 'panel'
    )
);

$subdomainRoute = new Zend_Controller_Router_Route_Hostname(
    ':employer.'.$config['host'],
    null,
    array(
        'employer' => '([a-z0-9]+)',
    )
);
$router->addRoute('employer_panel', $subdomainRoute->chain($pathRoute_panel));


// employer.domain.com - main employer page
$pathRoute_panel = new Zend_Controller_Router_Route(
    '',
    array(
        'module' => 'default',
        'controller' => 'vcard',
        'action' => 'index',
        'id' => '',
    )
);

$subdomainRoute = new Zend_Controller_Router_Route_Hostname(
    ':employer.'.$config['host'],
    null,
    array(
        'employer' => '([a-z0-9]+)',
    )
);
$router->addRoute('employer_vcard', $subdomainRoute->chain($pathRoute_panel));


// domain.com/
$pathRoute = new Zend_Controller_Router_Route_Module(
    array(
        'module' => 'default',
        'controller' => 'index',
        'action' => 'index',
    ),
    $dispatcher,
    $request
);

$route = new Zend_Controller_Router_Route_Hostname($config['host']);
$router->addRoute('default', $route->chain($pathRoute));

// www.domain.com/
$pathRoute = new Zend_Controller_Router_Route_Module(
    array(
        'module' => 'default',
        'controller' => 'index',
        'action' => 'index',
    ),
    $dispatcher,
    $request
);

$route = new Zend_Controller_Router_Route_Hostname('www.'.$config['host']);
$router->addRoute('default_www', $route->chain($pathRoute));

РЕДАКТИРОВАТЬ: Это мое решение:

// employer.domain.com
$pathRoute_panel = new Zend_Controller_Router_Route_Module(
    array(
        'module' => 'default',
        'controller' => 'vcard',
        'action' => 'index',
        'id' => '',
    )
);

$subdomainRoute = new Zend_Controller_Router_Route_Hostname(
    ':employer.'.$config['host'],
    null,
    array(
        'employer' => '([a-z0-9]+)',
    )
);
$router->addRoute('employer_vcard', $subdomainRoute->chain($pathRoute_panel));

// employer.domain.com/panel/
$pathRoute_panel = new Zend_Controller_Router_Route(
    'panel/:controller/:action/:id/',
    array(
        'panel' => 'panel',
        'module' => 'dashboard',
        'controller' => 'index',
        'action' => 'index',
        'id' => '',
    )
);

$subdomainRoute = new Zend_Controller_Router_Route_Hostname(
    ':employer.'.$config['host'],
    null,
    array(
        'employer' => '([a-z0-9]+)',
    )
);
$router->addRoute('employer_panel', $subdomainRoute->chain($pathRoute_panel));

1 Ответ

0 голосов
/ 03 октября 2011
// Enforce Subdomain usage
// Will match employer.domain.com/*
$subdomainRoute = new Zend_Controller_Router_Route_Hostname(
    'employer.'.$config['host'] . '/*'
);


// Will match /panel/{id, required}/{controller, optional}/{action, optional}/{further parameters, optional}
$pathRoute_panel = new Zend_Controller_Router_Route(
    'panel/:id/:controller/:action/*',
    array(
        'module' => 'dashboard',
        'controller' => 'index',
        'action' => 'index'
    ),
    array(
        'id' => '\d+'
    )
);

// employer.domain.com - main employer page
// will match everything not matched before!
$pathRoute_page = new Zend_Controller_Router_Route(
    '*',
    array(
        'module' => 'default',
        'controller' => 'vcard',
        'action' => 'index'
    )
);

// You can add several routes to one chain ;) The order does matter.
$subDomainRoute->chain($pathRoute_page);
$subDomainRoute->chain($pathRoute_panel);
$router->addRoute($subDomainRoute);

Аннотации в коде.Вы можете использовать подстановочный знак (*), чтобы соответствовать чему-либо еще!Маршрут default_www не нужен - это просто поведение по умолчанию (маршрут по умолчанию теперь будет соответствовать каждому поддомену, но работодателю, так как он subDomainRoute).

...