Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/daviszhto/overwrite
Seguridad iOSAnálisis de VulnerabilidadesExplotaciónPruebas de PenetraciónSeguridad Móvil
GitHubdaviszhto/overwrite

overwrite

Exploit iOS de prueba de concepto que demuestra la sobrescritura de fuentes mediante CVE-2022-46689 para investigación de seguridad y pruebas de vulnerabilidad.

Ver Repositorio
8hace 1 añoAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Laravel Nova Flexible Content

Un campo Flexible fácil y completo para Laravel Nova, perfecto para grupos de campos repetidos y flexibles.

Laravel Nova Flexible Content in action

Inicio rápido

Aquí tienes una guía muy resumida para empezar lo antes posible. Consulta la documentación completa en https://whitecube.github.io/nova-flexible-content

Instalación

root@kitploit:~
composer require whitecube/nova-flexible-content

Uso

Un campo flexible permite gestionar fácilmente grupos de campos repetibles y ordenables. A diferencia de las pocas soluciones existentes para Laravel Nova, esta no tiene restricciones sobre qué campos puedes usar dentro de estos grupos. Eso significa que puedes usar todos los tipos de campo de Laravel Nova, así como cualquier campo creado por la comunidad.

Agregando layouts

Un layout representa un grupo de campos que se pueden repetir dentro del campo Flexible. Puedes agregar tantos layouts como desees. Si solo se define un layout, el campo se comportará como un simple Repetidor, y al agregar más layouts obtendrás un Contenido Flexible. Ambos conceptos son similares a sus primos en el Plugin ACF de Wordpress.

Los layouts se pueden agregar usando el siguiente método en tus campos Flexible:

root@kitploit:~
 addLayout(string $title, string $name, array $fields)

El parámetro $name se usa para almacenar el layout elegido en el valor del campo. Elígelo con cuidado, probablemente lo usarás para identificar los layouts en tu aplicación.

root@kitploit:~
use Whitecube\NovaFlexibleContent\Flexible;

/**
 * Get the fields displayed by the resource.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function fields(Request $request)
{
    return [
        // ...

        Flexible::make('Content')
            ->addLayout('Simple content section', 'wysiwyg', [
                Text::make('Title'),
                Markdown::make('Content')
            ])
            ->addLayout('Video section', 'video', [
                Text::make('Title'),
                Image::make('Video Thumbnail', 'thumbnail'),
                Text::make('Video ID (YouTube)', 'video'),
                Text::make('Video Caption', 'caption')
            ])
    ];
}

Example of Flexible layouts

Personalizando la etiqueta del botón

Puedes cambiar el texto predeterminado del botón "Añadir layout" de la siguiente manera:

root@kitploit:~
Flexible::make('Content')
    ->button('Add something amazing!');

Add something amazing

Usando valores de Flexible en las vistas

Si estás usando Laravel 6 o versiones anteriores, o no quieres usar casts, por favor usa un accessor en tu modelo con el trait HasFlexible.

Laravel 7 trae casts personalizados, y los campos de contenido flexible son el caso de uso perfecto para ellos. El campo almacena sus valores como una única cadena JSON, lo que significa que esta cadena debe ser analizada antes de poder usarse en tu aplicación. Esto se puede hacer trivialmente usando la clase FlexibleCast de este paquete:

root@kitploit:~
namespace App;

use Illuminate\Database\Eloquent\Model;
use Whitecube\NovaFlexibleContent\Value\FlexibleCast;

class MyModel extends Model
{
    protected $casts = [
        'flexible-content' => FlexibleCast::class
    ];
}

Por defecto, la clase FlexibleCast recopilará instancias básicas de Layout. Si deseas mapear los layouts en instancias de Layout personalizadas, también es posible. Primero, crea un cast flexible personalizado ejecutando php artisan flexible:cast MyFlexibleCast. Esto creará el archivo en el directorio App\Casts.

Luego mapea fácilmente tus clases de layout personalizadas a las claves correspondientes:

root@kitploit:~
namespace App\Casts;

class MyFlexibleCast extends FlexibleCast
{
    protected $layouts = [
        'wysiwyg' => \App\Nova\Flexible\Layouts\WysiwygLayout::class,
        'video' => \App\Nova\Flexible\Layouts\VideoLayout::class,
    ]
}

Si necesitas más control, puedes sobrescribir el método getLayoutMappings en su lugar.

La colección de layouts

Las colecciones devueltas por el cast FlexibleCast y el trait HasFlexible extienden la Illuminate\Support\Collection original. Estas colecciones de layout personalizadas exponen un método find(string $name) que devuelve el primer layout que tenga el $name de layout dado.

La instancia de Layout

Los layouts son una especie de modelos falsos. Usan el trait HasAttributes de Laravel, lo que significa que puedes definir accessors y mutators para los atributos del layout. Además, también es posible acceder a las propiedades del Layout usando los siguientes métodos:

name()

Devuelve el nombre del layout.

title()

Devuelve el título del layout (tal como se muestra en Nova).

key()

Devuelve la clave única del layout (el identificador único del layout).

Ir más allá

Al usar el campo Flexible Content, te encontrarás rápidamente con algunos casos de uso donde los conceptos básicos descritos anteriormente no son suficientes. Por eso desarrollamos el paquete de manera extensible, haciendo posible agregar fácilmente comportamientos y/o capacidades personalizadas al campo y su salida.

Clases de Layout personalizadas

A veces, las definiciones de addLayout pueden volverse bastante largas, o quizás quieras que sean compartidas con otros campos Flexible. La respuesta a esto es extraer tu Layout a su propia clase. Consulta la documentación para más información.

Clases de Preset predefinidas

Además de las clases de Layout reutilizables, puedes ir un paso más allá y crear clases Preset para tus campos Flexible. Estas te permiten reutilizar todo tu campo Flexible en cualquier lugar que desees. También facilitan hacer que tus campos Flexible sean dinámicos, por ejemplo, si quieres agregar Layouts condicionalmente. Y por último, pero no menos importante, también tienen el beneficio adicional de limpiar tus clases de Recurso Nova, si tu campo Flexible tiene muchas definiciones addLayout. Consulta la documentación para más información.

Clases de Resolver personalizadas

Por defecto, el campo aprovecha una columna JSON en la tabla de tu modelo. En algunos casos, realmente te gustaría usar este campo, pero por alguna razón un atributo JSON no es el camino a seguir. Por ejemplo, podrías querer almacenar los valores en otra tabla (lo que significa que usarás el campo Flexible Content en lugar de un campo tradicional BelongsToMany o HasMany). ¡No te preocupes, te tenemos cubierto!

Dile al campo cómo almacenar y recuperar su contenido creando tu propia clase Resolver, que básicamente solo contiene dos métodos simples: get y set. Consulta la documentación para más información.

Uso con nova-page

Quizás hayas oído hablar de uno de nuestros otros paquetes, nova-page, que es una herramienta de Nova que permite editar páginas estáticas como una página "Acerca de" (o similar) sin tener que declarar un modelo para ella individualmente. La mayoría de las veces, el campo Flexible Content resulta muy útil. ¡No te preocupes, ambos paquetes funcionan bien juntos! Primero crea una plantilla de nova page y agrega un contenido flexible a los campos de la plantilla.

Como se explica en la documentación, puedes acceder al contenido estático de nova-page en tus vistas blade usando {{ Page::get('attribute') }}. Al solicitar el contenido flexible de esta manera, devuelve una cadena JSON sin procesar que describe el contenido flexible, lo que por supuesto no es muy útil. En su lugar, puedes simplemente implementar el trait Whitecube\NovaFlexibleContent\Concerns\HasFlexible en tus plantillas de página, lo que expondrá el método de fachada Page::flexible('attribute') y se encargará de la transformación del contenido flexible.

root@kitploit:~
namespace App\Nova\Templates;

// ...
use Whitecube\NovaFlexibleContent\Concerns\HasFlexible;

class Home extends Template
{
    use HasFlexible;

    // ...
}

💖 Patrocinios

Si dependes de este paquete en tus aplicaciones de producción, considera patrocinarnos. Es la mejor manera de ayudarnos a seguir haciendo lo que amamos: crear excelente software de código abierto.

Contribuir

Siéntete libre de sugerir cambios, solicitar nuevas funciones o corregir errores tú mismo. Estamos seguros de que todavía hay muchas mejoras que se pueden hacer, y estaríamos muy felices de fusionar solicitudes de extracción útiles.

¡Gracias!

Pruebas unitarias

Al agregar una nueva función o corregir un error, agrega las pruebas unitarias correspondientes. El conjunto actual de pruebas es limitado, pero cada prueba unitaria agregada mejorará la calidad del paquete.

Ejecuta PHPUnit llamando a composer test.

Hecho con ❤️ para código abierto

En Whitecube usamos mucho software de código abierto como parte de nuestro trabajo diario. Por lo tanto, cuando tenemos la oportunidad de devolver algo, ¡estamos súper emocionados!

Esperamos que disfrutes esta pequeña contribución de nuestra parte y nos encantaría saber de ti si la encuentras útil en tus proyectos. ¡Síguenos en Twitter para más actualizaciones!

Descargar herramienta