承接 wixiweb/wixiweb-laravel 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

wixiweb/wixiweb-laravel

Composer 安装命令:

composer require wixiweb/wixiweb-laravel

包简介

Package pour configurer simplement une application laravel avec nos bonnes pratiques.

README 文档

README

Package pour configurer simplement une application laravel avec nos bonnes pratiques.

Installation

composer require wixiweb/wixiweb-laravel

Publier le fichier de configuration

php artisan vendor:publish --tag=wixiweb-config

Fonctionnalités

Redirection des envois de mail

APP_MAIL_TO et APP_MAIL_BCC sont les variables d'environnement à configurer. Les deux variables prennent une liste d'adresses mail séparées par des virgules.

Il est possible de mettre des adresses mail dans la variable APP_MAIL_WHITELIST, les mails pour ces adresses ne seront pas redirigés.

Gestion de tag pour mailpit

Il faut simplement mettre vos tags dans la variable d'environnement dans APP_MAIL_TAGS.

Possibilité d'envoyer des exceptions par mail

Toutes les exceptions qui implémentent l'interface \Wixiweb\WixiwebLaravel\Exceptions\MailableException seront envoyées par mail aux addresses fournies dans la variable d'environnement LOG_MAIL_RECIPIENTS.

Filtrage du contexte des logs

Le package ajoute automatiquement le contexte de la requête (HTTP), de l'utilisateur (AUTH), de la commande artisan (CLI), etc. à chaque log. Ces données peuvent contenir des informations sensibles (mots de passe, jetons, clés d'API…).

Ce filtrage est appliqué automatiquement à deux endroits :

  • Les logs fichiers : via un ContextLogProcessor qui remplace celui de Laravel.
  • Les mails d'exception : le contexte joint au mail est filtré avant l'envoi.

Aucune intervention n'est nécessaire : le filtrage est actif dès l'installation du package.

Masquer des champs (hidden_fields)

La configuration se fait dans le fichier config/wixiweb.php, sous la clé logging.context.hidden_fields. Le filtrage utilise la dot-notation sur un chemin exact : seule la valeur située exactement à ce chemin est masquée (remplacée par ***).

// config/wixiweb.php
'logging' => [
    // ...
    'context' => [
        'hidden_fields' => [
            'HTTP.POST.password',
            'HTTP.POST.password_confirmation',
            'HTTP.POST.current_password',
            'HTTP.POST._token',
            'HTTP.GET.password',
            'HTTP.GET.password_confirmation',
            'HTTP.GET.current_password',
        ],
        'filters' => [],
    ],
],

Points importants :

  • Le chemin est exact : HTTP.POST.password masque uniquement cette position, et pas HTTP.POST.profile.password par exemple.
  • Une valeur « vide » (null, '', 0, false) n'est pas masquée.
  • Pour masquer un champ ailleurs dans le contexte, ajoutez simplement son chemin complet (ex. APP.api_key).

Ajouter des filtres personnalisés (filters)

Pour transformer le contexte au-delà du simple masquage (ajout, suppression, anonymisation…), créez une classe implémentant \Wixiweb\WixiwebLaravel\Logging\ContextFilterInterface et déclarez-la dans logging.context.filters.

namespace App\Filters;

use Wixiweb\WixiwebLaravel\Logging\ContextFilterInterface;

class AppendRequestIdFilter implements ContextFilterInterface
{
    public function filter(array $context): array
    {
        $context['request_id'] = request()->header('X-Request-Id');

        return $context;
    }
}
// config/wixiweb.php
'logging' => [
    // ...
    'context' => [
        'hidden_fields' => [/* ... */],
        'filters' => [
            \App\Filters\AppendRequestIdFilter::class,
        ],
    ],
],

Les filtres sont exécutés après le masquage des hidden_fields, dans l'ordre de déclaration. Ils s'appliquent à la fois aux logs fichiers et aux mails d'exception.

Models stricts

Voir https://laravel.com/docs/11.x/eloquent#configuring-eloquent-strictness. Configurable dans le fichier de config dans la clé strict_model. Strict par défaut.

Gestion des transactions orpheline pour le système de queue

Voir https://laravel.com/docs/11.x/queues#job-events. Rien à faire dans vos projets, c'est géré automatiquement.

Ajoute une commande artisan wixiweb:db:create {dbname?}

Cette commande sert à créer une base de donnée si celle-ci n'existe pas. Par défaut prend la base configurée par défaut. Il est possible de passer en argument le nom de la base de donnée.

Ajoute une classe de réponse pour les gates et policies

Voir documentation officielle => https://laravel.com/docs/12.x/authorization#policy-responses

La classe surcharge celle de laravel pour permettre de mettre un message non technique affichable aux utilisateurs.

 Response::deny(message: 'Ceci est un message technique', humanReadableMessage: 'Ceci est un message pour être vu par les utilisateurs.');
 Response::denyWithStatus(400, message: 'Ceci est un message technique', humanReadableMessage: 'Ceci est un message pour être vu par les utilisateurs.');
 Response::denyAsNotFound(message: 'Ceci est un message technique', humanReadableMessage: 'Ceci est un message pour être vu par les utilisateurs.');
 Response::allow(message: 'Ceci est un message technique', humanReadableMessage: 'Ceci est un message pour être vu par les utilisateurs.');

Pour afficher le message :

$response = Gate::inspect('test');

echo $response->humanReadableMessage();

Ajoute un middleware pour faire de l'authentification HTTP basic

Pour configurer les identifiants il faut configurer deux variables d'environnement APP_BASIC_AUTH_USERNAME et APP_BASIC_AUTH_PASSWORD.

// Protéger des routes
Route::middleware(BasicHttpAuthMiddleware::class)->group(static function () {
   Route::get('/ma-route-protegee',  [AuthController::class, 'maRouteProtegee'])->name('maRouteProtegee');
});

Utilisation dans vos projets

Dans le fichier bootstrap/app.php ajouter :

->withExceptions(function (Exceptions $exceptions) {
    Wixiweb::configureExceptionHandler($exceptions); // ← ligne à ajouter
})

Il est possible de spécifier des classes d'exception ou interfaces qui seront également envoyées par mail dans le fichier de configuration.

Le reste des fonctionnalités sont gérées automatiquement via la classe \Wixiweb\WixiwebLaravel\WixiwebServiceProvider.

Fonctions helper

trans_plural

Cette fonction simplifie la traduction des formes singulier/pluriel. Utilise trans_choice().

trans_plural(string $singular, string $plural, int $count, array $replace = [], $locale = null) : string

Exemples d'utilisation :

// Forme de base
trans_plural('article', 'articles', 1); // Retourne 'article'
trans_plural('article', 'articles', 2); // Retourne 'articles'

// Avec le compteur
trans_plural('article :count', 'articles :count', 1); // Retourne 'article 1'
trans_plural('article :count', 'articles :count', 2); // Retourne 'articles 2'

// Avec des variables personnalisées
trans_plural('article de :name', 'articles de :name', 1, ['name' => 'Jean']); // Retourne 'article de Jean'

trans_plural_map

Cette fonction permet des formes plurielles plus complexes en acceptant un tableau de chaînes associées à des compteurs spécifiques. Utilise trans_choice().

trans_plural_map(array $strings, int $count, array $replace = [], $locale = null) : string

Exemples d'utilisation :

// Forme de base
trans_plural_map([
    '0,1' => 'article',
    '2,*' => 'articles',
], 1); // Retourne 'article'

// Avec le compteur
trans_plural_map([
    '0,1' => 'article :count',
    '2,*' => 'articles :count',
], 2); // Retourne 'articles 2'

// Avec des variables personnalisées
trans_plural_map([
    '0,1' => 'article de :name',
    '2,*' => 'articles de :name',
], 1, ['name' => 'Jean']); // Retourne 'article de Jean'

// Cas plus complexes
trans_plural_map([
    '0' => 'Aucun article',
    '1' => 'Un article',
    '2,3,4' => ':count articles',
    '5,*' => 'Beaucoup d\'articles (:count)',
], 3); // Retourne '3 articles'

Développement

  1. Installer les dépendances
    docker run -v .:/app -w /app composer install
  2. Jouer les tests
    chmod u+x ./run-tests.sh
    ./run-tests.sh

wixiweb/wixiweb-laravel 适用场景与选型建议

wixiweb/wixiweb-laravel 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 532 次下载、GitHub Stars 达 1, 最近一次更新时间为 2025 年 02 月 17 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 wixiweb/wixiweb-laravel 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 wixiweb/wixiweb-laravel 我们能提供哪些服务?
定制开发 / 二次开发

基于 wixiweb/wixiweb-laravel 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 532
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 4
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-02-17