0

アプリケーションでリクエストをリダイレクトする際に問題があります。

私のルール:

  • employee.domain.com -雇用主のページを指す必要があります -デフォルトのモジュールを使用します
  • employee.domain.com/panel/ - 特定の雇用主の管理ページを指す必要があります -ダッシュボードモジュールを使用します
  • www.domain.com - すべての雇用主を集約したページを指す必要があります -デフォルトのモジュールを使用します

多くの異なるルートをテストしましたが、1 つのルートが機能すると、他のルートが壊れます。また、多くの場合、ルートパスに対してのみ機能しますが、コントローラーとアクションへの呼び出しを追加するとクラッシュします。たぶん、カスタム コントローラー プラグインを作成する必要がありますか? どう思いますか?

これが私の現在の構成です。めちゃくちゃですが、ばかげた間違いを見つけるのに役立つかもしれません。

// 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));
4

1 に答える 1

0
// 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)。

于 2011-10-03T12:42:11.707 に答える