Bester方式切换案例路线

时间:2016-07-25 23:11:37

标签: symfony routing silex

是否有更好或更有效的方法从路径变量调用方法:

$app->get('/ac/{route}', function (Request $request, $route) use ($app) {

    switch ($route) {
        case 'formejur':
            $infos = $app['manager.ac']->getPropFormejur( $request->get('find') );
            break;

        case 'naf':
            $infos = $app['manager.ac']->getPropNaf( $request->get('find') );
            break;

        case 'fonction':
            $infos = $app['manager.ac']->getPropFonction( $request->get('find') );
            break;

        case 'ville':
            $infos = $app['manager.ac']->getPropVille( $request->get('find') );
            break;

        case 'dep':
            $infos = $app['manager.ac']->getPropDepartement( $request->get('find') );
            break;

        default: break;
    }

    $response = new JsonResponse();
    $response->setData($infos);

    return $response->getContent();
});

只有$ app ['manager.ac']的方法才会改变。

1 个答案:

答案 0 :(得分:3)

您可以使用call_user_func_array功能:

$map = [
    'formejur' => 'getPropFormejur',
    'naf' => 'getPropNaf',
    ...
];

if (!empty($map[$route])) {
    $infos = call_user_func_array(
        [$app['manager.ac'], $map[$route]],
        [$request->get('find')]
    );
}