Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
overwrite — Proof-of-concept приложение для перезаписи шрифтов на iOS с использованием CVE-2022-46689. | Kitploit
Инструменты/GitHubGitHub/daviszhto/overwrite
Безопасность iOSАнализ уязвимостейЭксплуатацияТестирование на ПроникновениеМобильная безопасность
GitHubdaviszhto/overwrite

overwrite

Proof-of-concept приложение для перезаписи шрифтов на iOS с использованием CVE-2022-46689.

Репозиторий
только чтоЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Laravel Nova Flexible Content

Простое и полное гибкое поле для Laravel Nova, идеально подходящее для повторяющихся и гибких групп полей.

Laravel Nova Flexible Content в действии

Быстрый старт

Вот краткое руководство, чтобы начать как можно скорее. Полную документацию смотрите на https://whitecube.github.io/nova-flexible-content

Установка

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

Использование

Гибкое поле позволяет легко управлять повторяемыми и упорядочиваемыми группами полей. В отличие от некоторых существующих решений для Laravel Nova, это не накладывает ограничений на то, какие поля можно использовать внутри этих групп. Это означает, что вы можете использовать все типы полей Laravel Nova, а также поля, созданные сообществом.

Добавление макетов

Макет представляет собой группу полей, которую можно повторять внутри гибкого поля. Вы можете добавить столько макетов, сколько захотите. Если определен только один макет, поле будет вести себя как простой повторятель, а при добавлении других макетов вы получите гибкий контент. Обе концепции похожи на их аналоги в плагине ACF для WordPress.

Макеты можно добавить с помощью следующего метода для ваших гибких полей:

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

Параметр $name используется для сохранения выбранного макета в значении поля. Выбирайте его с умом, вы, вероятно, будете использовать его для идентификации макетов в вашем приложении.

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')
            ])
    ];
}

Пример гибких макетов

Настройка метки кнопки

Вы можете изменить текст кнопки «Добавить макет» следующим образом:

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

Add something amazing

Использование гибких значений в представлениях

Если вы используете Laravel 6 и ниже или не хотите использовать приведение типов, пожалуйста, используйте аксессор на вашей модели с трейтом HasFlexible.

Laravel 7 представляет пользовательские приведения типов, и поля гибкого контента — идеальный случай для их использования. Поле хранит свои значения в виде одной JSON-строки, то есть эту строку нужно разобрать, прежде чем использовать в приложении. Это легко сделать с помощью класса FlexibleCast из этого пакета:

root@kitploit:~
namespace App;

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

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

По умолчанию класс FlexibleCast собирает базовые экземпляры Layout. Если вы хотите сопоставить макеты с пользовательскими экземплярами макетов, это также возможно. Сначала создайте пользовательское гибкое приведение, выполнив php artisan flexible:cast MyFlexibleCast. Это создаст файл в папке App\Casts.

Затем легко сопоставьте ваши пользовательские классы макетов с соответствующими ключами:

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,
    ]
}

Если вам нужно больше контроля, вы можете вместо этого переопределить метод getLayoutMappings.

Коллекция макетов

Коллекции, возвращаемые приведением FlexibleCast и трейтом HasFlexible, расширяют исходный Illuminate\Support\Collection. Эти пользовательские коллекции макетов предоставляют метод find(string $name), который возвращает первый макет с заданным именем $name.

Экземпляр макета

Макеты — это своего рода фиктивные модели. Они используют трейт HasAttributes из Laravel, что означает, что вы можете определять аксессоры и мутаторы для атрибутов макета. Кроме того, можно получить доступ к свойствам макета с помощью следующих методов:

name()

Возвращает имя макета.

title()

Возвращает название макета (как показано в Nova).

key()

Возвращает уникальный ключ макета (уникальный идентификатор макета).

Дальнейшие шаги

При использовании поля «Гибкий контент» вы быстро столкнетесь с некоторыми случаями, когда описанных выше основ недостаточно. Вот почему мы разработали пакет расширяемым образом, позволяя легко добавлять пользовательские поведения и/или возможности в поле и его вывод.

Пользовательские классы макетов

Иногда определения addLayout могут стать довольно длинными, или, возможно, вы захотите использовать их совместно с другими полями Flexible. Ответ на это — извлечь ваш макет в собственный класс. Подробнее см. в документации.

Предопределенные классы пресетов

В дополнение к повторно используемым классам макетов, вы можете пойти дальше и создать классы Preset для ваших гибких полей. Они позволяют повторно использовать всё гибкое поле где угодно. Они также упрощают создание динамических гибких полей, например, если вы хотите добавлять макеты условно. И последнее, но не менее важное: они также помогают очистить ваши классы ресурсов Nova, если ваше гибкое поле содержит много определений addLayout. Подробнее см. в документации.

Пользовательские классы резолверов

По умолчанию поле использует JSON-столбец в таблице вашей модели. В некоторых случаях вам действительно хотелось бы использовать это поле, но по какой-то причине JSON-атрибут не подходит. Например, вы могли бы захотеть хранить значения в другой таблице (то есть использовать поле «Гибкий контент» вместо традиционных полей BelongsToMany или HasMany). Не волнуйтесь, мы вам поможем!

Укажите полю, как хранить и извлекать его содержимое, создав свой собственный класс Resolver, который в основном содержит два простых метода: get и set. Подробнее см. в документации.

Использование с nova-page

Возможно, вы слышали об одном из наших других пакетов, nova-page, который является инструментом Nova, позволяющим редактировать статические страницы, такие как страница «О нас» (или подобные), без необходимости объявлять для них отдельную модель. Чаще всего поле «Гибкий контент» оказывается очень кстати. Не волнуйтесь, оба пакета отлично работают вместе! Сначала создайте шаблон страницы nova-page и добавьте гибкий контент в поля шаблона.

Как объясняется в документации, вы можете получить доступ к статическому содержимому nova-page в ваших Blade-представлениях, используя {{ Page::get('attribute') }}. При таком запросе гибкого контента возвращается необработанная JSON-строка, описывающая гибкий контент, что, конечно, не очень полезно. Вместо этого вы можете просто реализовать трейт Whitecube\NovaFlexibleContent\Concerns\HasFlexible в ваших шаблонах страниц, который откроет фасадный метод Page::flexible('attribute') и позаботится о преобразовании гибкого контента.

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

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

class Home extends Template
{
    use HasFlexible;

    // ...
}

💖 Спонсорство

Если вы зависите от этого пакета в своих рабочих приложениях, подумайте о спонсировании нас! Это лучший способ помочь нам продолжать заниматься тем, что мы любим: создавать отличное программное обеспечение с открытым исходным кодом.

Вклад в развитие

Не стесняйтесь предлагать изменения, запрашивать новые функции или исправлять ошибки самостоятельно. Мы уверены, что еще есть много возможностей для улучшения, и мы будем очень рады объединить полезные pull request'ы.

Спасибо!

Модульные тесты

При добавлении новой функции или исправлении ошибки, пожалуйста, добавьте соответствующие модульные тесты. Текущий набор тестов ограничен, но каждый добавленный модульный тест улучшит качество пакета.

Запустите PHPUnit, вызвав composer test.

Сделано с ❤️ для открытого исходного кода

В Whitecube мы ежедневно используем много программного обеспечения с открытым исходным кодом. Поэтому, когда у нас есть возможность отдать что-то взамен, мы очень рады!

Мы надеемся, что вам понравится этот небольшой вклад от нас, и будем рады услышать от вас, если вы найдете его полезным в своих проектах. Следите за нами в Twitter, чтобы быть в курсе новостей!

Скачать инструмент