2017-10-19 25 views
1

que vous avez choisi le tutoriel: https://symfony.com/doc/current/create_framework/templating.html j'ai rencontré une logique « sauter par-dessus » sur la façon dont un corps de la fonction Anonymus d'une route, peut être appelée uniquement en passant le nom de la route avec une aide de l'attribut de requête?Symfony 3/créer votre propre tutoriel cadre

'_controller'=> function ($request) { 

trouvé dans une déclaration d'itinéraire:

$routes->add('hello', new Routing\Route('/hello/{name}', array(
    'name' => 'World', 
    '_controller'=> function ($request) { 
     return render_template($request); 
    } 
))); 

et

$response = call_user_func($request->attributes->get('_controller'), 

trouvé dans un contrôleur avant:

try { 
    $request->attributes->add($matcher->match($request->getPathInfo())); 
    $response = call_user_func($request->attributes->get('_controller'), 
$request); 
} catch (Routing\Exception\ResourceNotFoundException $e) { 
    $response = new Response('Not Found', 404); 
} catch (Exception $e) { 
    $response = new Response('An error occurred', 500); 
} 

Quelqu'un prêt à expliquer ce phénomène travail ?

Thx à l'avance.

Répondre

1

Ok c'est clair maintenant, c'est le matcher qui fait le travail nécessaire.

$matcher->match($request->getPathInfo()) 

dans

try { 
    $request->attributes->add($matcher->match($request->getPathInfo())); 
    $response = call_user_func($request->attributes->get('_controller'), 
$request); 
} catch (Routing\Exception\ResourceNotFoundException $e) { 
    $response = new Response('Not Found', 404); 
} catch (Exception $e) { 
    $response = new Response('An error occurred', 500); 
}