2012-05-03 38 views
5

Tôi muốn hiển thị một cái gì đó như thế:Symfony2: Cách hiển thị tên tài khoản quản trị trong khi mạo danh tài khoản người dùng?

Trường hợp 1: "đăng nhập như USER"

@ UserName [logout]

Không có vấn đề ở đây, tôi chỉ cần làm:

@ {{app.user.use rname}} [< a href = "{{path (" logout ")}}" > logout </A >]

Trường hợp 2: "đăng nhập như ADMIN"

@ AdminName [logout]

Các công trình tương tự ở đây:

@ {{app.user.username}} [< a href = "{{path (" logout ")}}" > logout </A >]

Trường hợp 3: "đăng nhập như ADMIN mạo nhận một USER"

AdminName @ UserName [trở lại]

Bây giờ, đó là sự cố:

{{?? .. ở đây .. ??}} @ {{app.user.username}} [< a href = "{{(app.request.getRequestUri ~ '? _switch_user = _exit')}}" > trở </A >]

này là giải pháp duy nhất mà tôi biết ... có vẻ như rất nhiều mã cho một sipmle hiển thị username:/

{# iterating through user roles to find ROLE_PREVIOUS_ADMIN #} 
{% for role in app.security.token.roles %} 
    {% if role.source is defined %} 
    {{ role.source.user.username }} 
{% endif %} 
{% endfor %} 
@ {{ app.user.username }} [ <a href="{{ (app.request.getRequestUri ~ '?_switch_user=_exit') }}">return</a> ] 

có cách nào khác? Tôi cần một giải pháp TWIG tinh khiết -> đây là một phần của mẫu chính của tôi (được mở rộng bởi tất cả các mẫu khác) -> Tôi không thể thêm mã điều khiển vào tất cả các hành động, chỉ để hiển thị tên người dùng.

+0

Bạn có biết cách thực hiện điều này trong Symfony3 không? Biến app.security đã được [không dùng nữa kể từ v2.6 và đã bị xóa trong v3] (http://symfony.com/doc/2.8/reference/twig_reference.html#app). – user128216

Trả lời

4

Với ý tưởng bạn đã đề xuất ở trên, .. bạn không chỉ có thể tạo tiện ích mở rộng tùy chỉnh bao gồm logic của bạn từ mẫu ghép để bạn có thể gọi myCustomTwigFunction trong mẫu ghép và nó sẽ xuất tên người dùng ban đầu ?

Xem http://symfony.com/doc/current/cookbook/templating/twig_extension.html để biết thêm về tiện ích cành lá tùy chỉnh

Mã bạn muốn có trong tập tin mở rộng Twig của bạn sẽ là ...

$roles = $this->container->get('security.context')->getToken()->getRoles(); 
foreach ($roles as $role) { 
    if (method_exists($role, 'getSource')) { 
     return ($role->getSource()->getUser()->getUsername()); 
    } 
} 

đâu $ container là một biến lớp học của DI Thùng chứa trên lớp mở rộng cành cây của bạn

+0

cảm ơn giải quyết được sự cố của tôi – loostro

Các vấn đề liên quan