uxf/cms

维护者

详细信息

gitlab.com/uxf/cms

源代码

问题

3.50.6 2024-09-27 07:48 UTC

This package is auto-updated.

Last update: 2024-09-27 05:52:40 UTC


README

安装

$ composer require uxf/cms

配置

// config/routes/uxf.php
use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;

return static function (RoutingConfigurator $routes): void {
    $routes->import('@UXFCmsBundle/config/routes.php');
    $routes->import('@UXFSecurityBundle/config/routes.php');
    $routes->import('@UXFContentBundle/config/routes.php');
    $routes->import('@UXFDataGridBundle/config/routes.php');
    $routes->import('@UXFFormBundle/config/routes.php');
};
// config/packages/uxf.php
use UXF\CMS\Entity\User;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

return static function (ContainerConfigurator $containerConfigurator): void {
    $containerConfigurator->extension('uxf_cms', [
        'audit_token' => 'xxx', # optional
        'mailing' => [
            'email_from' => 'info@uxf.cz',
            'email_name' => 'UXF info',
            'invitation_url' => 'https://uxf.cz/renew-password/',
            'recovery_url' => 'https://uxf.cz/renew-password/',
            'cms_recovery_url' => 'https://uxf.cz/admin/cms/renew-password/',
            'tag' => env('PROJECT_TAG'),
            'email_previews' => '%kernel.project_dir%/src/EmailZone/Email',
        ],
        'storage' => [
            'default_upload_namespace' => 'cms',
        ],
        'logger' => [
            'stdout' => [
                'enabled' => true, # default false
            ],
            'sentry' => [
                'dsn' => '%env(SENTRY_DSN)%',
                'environment' => '%env(SENTRY_ENV)%',
                'release' => 'none', # optional
                'level' => 'warning', # optional
                'traces_sample_rate' => 0.5, # default 0
            ],
        ],
    ]);
};

自动完成

A) CmsMeta 属性

autocompleteFields 添加到 CmsMeta。新自动完成项将自动注册,名称通过别名指定。

#[ORM\Entity]
#[ORM\Table(name: 'users', schema: 'uxf_cms')]
#[CmsMeta(alias: 'user', title: 'User', autocompleteFields: ['name', 'email'])]
class User
{
    ...
}

B) CmsForm/CmsGrid 属性(覆盖默认自动完成)

#[CmsForm(label: 'Uživatelská role', targetField: 'title', autocomplete: 'role')]
#[CmsGrid(label: 'Uživatelská role', targetColumn: 'title', autocomplete: 'role')]
#[ORM\ManyToOne]
private Role $role;

C) 自动完成类型


final class CategoryType implements AutocompleteType
{
    public function __construct(
        private readonly EntityManagerInterface $entityManager,
    ) {
    }

    /**
     * @param mixed[] $options
     */
    public function buildAutocomplete(AutocompleteBuilder $builder, array $options = []): void
    {
        // you can use 4th $labelQuery argument - eg. '{name} {surname} ({email})'
        $autocomplete = DoctrineAutocomplete::create($this->entityManager, Category::class, ['name']);

        // you can modify QB conditions
        $autocomplete->qb->andWhere('e.id > 1');

        $builder->setAutocomplete($autocomplete);
    }

    public static function getName(): string
    {
        return 'content-category';
    }
}

D) 自动完成接口 - 完全自定义

class TestAutocomplete implements Autocomplete
{
    /**
     * @return AutocompleteResult[]
     */
    public function search(string $term, int $limit): array
    {
        ...
    }
}

安全性

use Symfony\Component\Routing\Attribute\Route;
use UXF\Core\Attribute\Security;

final readonly class TestController
{
    #[Route(path: '/api/test', name: 'test', methods: 'GET')]
    #[Security(UserRole::ROLE_PROFILE)] // use 'PUBLIC' for anonymous access, 'LOGGED' for logged user (role is ignored)
    public function __invoke(AppRequest $appRequest): mixed
    {
        ...
    }
}

电子邮件预览

在源目录 uxf_cms.mailing.email_previews 中配置的所有电子邮件预览都列在 /api/cms/email/list

final class SampleEmail extends PreviewableEmail
{
    public function __construct(
        public readonly string $url,
    ) {
        parent::__construct('/email-templates.twig');
    }

    /**
     * @return self[]
     */
    public static function getPreviewData(): array
    {
        return [
            new self('https://uxf.cz'),
        ];
    }
}

发送电子邮件预览命令

要测试电子邮件客户端,有命令

bin/console uxf:email:send-preview your-email@uxf.cz app_email-zone_email_organization-application-accepted-email

电子邮件标识符与预览 URL 相同