2
respostas

Desafio para não exibir o botão de Entrar na tela de login

Essa foi a solução que encontrei:

@if(!Route::is('login') && Auth::guest())
    <a href="{{ route('login') }}">Entrar</a>
@endif
2 respostas

Legal Guilherme! Gostei.

Uma possibilidade interessante seria usar diretivas do Blade. Dá mais trabalho, escreve mais, porém fica bem elegante. Abaixo vou compartilhar pra que você comente o que achou:

1 - Crie um arquivo chamado AuthDirectives.php na pasta app/Providers. 2 - Adicione o seguinte código no arquivo:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Blade;

class AuthDirectives
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        Blade::if('guest', function () {
            return Auth::guest();
        });
    }
}

3 - Adicione o seguinte código no arquivo config/app.php no array de providers:

    App\Providers\AuthDirectives::class,

4 - Agora você pode usar a diretiva personalizada @guest na sua view.

    @guest
        <a href="{{ route('login') }}">Entrar</a>
    @endguest

5 - Agora você pode remover a verificação de Route::is('login') e Auth::guest() na sua view, pois a diretiva personalizada @guest cuidará disso para você.

Teste aqui e conferi na documentação e o AuthDirectives ficou assim:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\ServiceProvider;

class AuthDirectives extends ServiceProvider
{
    public function register()
    {
        Blade::if('guest', function () {
            return !Route::is('login') && Auth::guest();
        });
    }
}

Tinha faltado estender o ServiceProvider (de onde vem o método register que sobrescrevemos) e a condição de verificar a rota para não mostrar o botão entrar na tela te login.

Valeu pela dica aprendi algo novo! = )