Вход и регистрация ссылок в макете - PullRequest
0 голосов
/ 11 февраля 2019

Может кто-нибудь объяснить, как я могу добавить ссылки “Log in” и “Register” в свой макет, которые меняются на ссылки ‘Log Out’ и ‘My Account’ после входа в систему?

Я пыталсяследующий код, но он не работает.

  {% if is_granted('ROLE_USER') %}
    <a class="dark-grey-small bold" href="{{ path('sylius_shop_account_dashboard') }}">{{ 'sylius.ui.my_account'|trans }}</a>
    <a class="dark-grey-small bold" href="{{ path('sylius_shop_logout') }}">{{ 'sylius.ui.logout'|trans }}</a>
  {% else %}
    <a class="dark-grey-small bold" href="{{ path('sylius_shop_login') }}">{{ 'sylius.ui.login'|trans }}</a>
    <a class="dark-grey-small bold" href="{{ path('sylius_shop_register') }}">{{ 'sylius.ui.register'|trans }}</a>
  {% endif %}

Моя домашняя страница действует следующим образом:

/*
 * This file is part of the Sylius package.
 *
 * (c) Paweł Jędrzejewski
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

declare(strict_types=1);

namespace Sylius\Bundle\ShopBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

final class HomepageController
{
    /** @var EngineInterface */
    private $templatingEngine;

    public function __construct(EngineInterface $templatingEngine)
    {
        $this->templatingEngine = $templatingEngine;
    }

    public function indexAction(Request $request): Response
    {
        return $this->templatingEngine->renderResponse('@SyliusShop/Homepage/index.html.twig');
    }
}

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Я использую это {% if is_granted('IS_AUTHENTICATED_FULLY') %}.Для меня проверка ROLE_USER не всегда работает.Обратите внимание, что is_granted использует роли в текущем сеансе: поэтому, если у вас есть новая роль и вы не вошли / не вышли, она не будет работать.Обратите внимание, что, как говорится в документации:

IS_AUTHENTICATED_FULLY не является ролью, но она действует как единое целое, и каждый зарегистрированный пользователь будет иметь это

0 голосов
/ 12 февраля 2019

Что ж, спасибо @hoover_D и @ 113408 за ваши ответы, но после большого количества проб и ошибок мне удалось их решить.

В моем файле security.yml я изменил

sylius.security.shop_regex: '^/(?!admin|api/.*|api$|media/.*)[^/]++'

до

sylius.security.shop_regex: '/'

и теперь is_granted ('ROLE_USER') работает на каждой странице, включая домашнюю страницу.

0 голосов
/ 11 февраля 2019

Вы были почти там.

Я считаю, что ваш код будет работать, если вы назначите ROLE_USER при регистрации пользователей.

Если вы просто хотите проверить, вошел ли пользователь в систему, вы можетеиспользование:

{% if app.user %}
    # user is logged in
 {% else %}
    # user is not logged in
 {% endif %}
...