Tengo en la tabla de la base de datos llamada media esta tabla para las cuentas de los usuarios en las redes sociales.

Tengo que decir que cuando en la base de datos de Twitter ponga el color de Twitter así: y con este código todo es bueno, pero necesito hacerlo más corto porque. Tengo muchos enlaces, por lo que será un código duro si siempre uso elseif :

@forelse (auth()->user()->media as $media)

    <div class="col-md-6">
        <main class="social-media shadow-sm mb-3 d-flex" style="

            @if($media->name == 'Twitter')
                background-color: #1da1f2;
                color: #fff;
            @elseif($media->name == 'Facebook')
                background-color: #3b5999;
                color: #fff;
            @elseif($media->name == 'Codepen')
                background-color: red;
                color: #fff;
            @elseif($media->name == 'Behance')
                background-color: #131418;
                color: #fff;
            @endif

            ">

            <div class="media__icon">
                    {{ $media->name }}
            </div>
        </main>
    </div>

@empty

@endforelse


this means get all media of user ( belongsToMany ) 
auth()->user()->media

La pregunta ¿cómo puedo mejorar mi código if mejor que el anterior?

0
Ahmed 28 dic. 2019 a las 16:18

2 respuestas

La mejor respuesta

Parte css

.background_Facebook{
  // Style here
}

background_Twitter{
  // Style here
}

Cree una clase background_Facebook, background_Twitter, etc. Y llámalo como Parte de la cuchilla class="background_{{$media->name}}"

2
Abdul Moiz 28 dic. 2019 a las 13:54

Hmm, tema interesante. Lo primero que se me ocurre (como Laravel way - no css class way) es crear un descriptor de acceso y devolver los colores deseados desde allí (para que tenga una única fuente de verdad).

class Media extends Model {

    protected $twitter = [
        'background-color' => '#1da1f2',
        'color' => '#fff'
    ];

    public function css() {
        $colors = $this->(strtolower($this->name));

        $css = '';
        foreach ($colors as $key => $color) {
           $css .= "$key: $color;";
        }

        return $css;
    }
}

Y entonces,

@forelse (auth()->user()->media as $media)

    <div class="col-md-6">
        <main class="social-media shadow-sm mb-3 d-flex" style="{{ $media->css }}">
           <div class="media__icon">
               {{ $media->name }}
           </div>
        </main>
    </div>

@empty

@endforelse

Y, por supuesto, este es un pseudocódigo y debe agregar algunos guardias :)

Algunos guardias pueden ser:

$colors = $this->($this->name) ?? null;

if (!$colors) {
   // return dummy_colors or null;
}
1
senty 28 dic. 2019 a las 15:22