切换路线的最佳方式

Bester way to switch case a route

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

$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']的方法改变了。

您可以使用 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')]
    );
}