PHPackages                             mawena/maravel-xy - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Templating &amp; Views](/categories/templating)
4. /
5. mawena/maravel-xy

ActiveProject[Templating &amp; Views](/categories/templating)

mawena/maravel-xy
=================

Template d'application Laravel + Vue 3 (Vuetify) avec authentification Sanctum, gestion des utilisateurs (CRUD) et système de rôles/permissions via Maravel.

v1.1.3(4w ago)010MITVuePHP ^8.2

Since Jun 15Pushed 4w agoCompare

[ Source](https://github.com/mawena/maravel-xy)[ Packagist](https://packagist.org/packages/mawena/maravel-xy)[ Docs](https://github.com/mawena/maravel-xy)[ RSS](/packages/mawena-maravel-xy/feed)WikiDiscussions main Synced 2w ago

READMEChangelogDependencies (11)Versions (7)Used By (0)

Maravel XY
==========

[](#maravel-xy)

[![Version](https://camo.githubusercontent.com/9a2bbe7cf36418ce7fce90ac8271f99bfc890f7080d448f0f33dcddbbdbec90e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f76657273696f6e2d312e312e332d626c75652e737667)](https://github.com/mawena/maravel-xy/releases)[![PHP](https://camo.githubusercontent.com/38db6e59e2b3b5169bd1aba5ff029b639e6246a3e64d07f8821c954a1202c3eb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e322d3737374242342e737667)](https://camo.githubusercontent.com/38db6e59e2b3b5169bd1aba5ff029b639e6246a3e64d07f8821c954a1202c3eb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7068702d253545382e322d3737374242342e737667)[![Laravel](https://camo.githubusercontent.com/216a23783c8eacfa5e67200a93ad38d38f74d9a26208fb56c286889a60f6fd52/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d25354531322e302d4646324432302e737667)](https://camo.githubusercontent.com/216a23783c8eacfa5e67200a93ad38d38f74d9a26208fb56c286889a60f6fd52/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c61726176656c2d25354531322e302d4646324432302e737667)[![Vue](https://camo.githubusercontent.com/f857a4a23762a6eb6fa06cceab320a8e300410eb6bf98d11a981610e3c2f00e5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7675652d332e782d3446433038442e737667)](https://camo.githubusercontent.com/f857a4a23762a6eb6fa06cceab320a8e300410eb6bf98d11a981610e3c2f00e5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7675652d332e782d3446433038442e737667)[![License](https://camo.githubusercontent.com/8bb50fd2278f18fc326bf71f6e88ca8f884f72f179d3e555e20ed30157190d0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e2e737667)](https://camo.githubusercontent.com/8bb50fd2278f18fc326bf71f6e88ca8f884f72f179d3e555e20ed30157190d0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e2e737667)

Un template minimaliste conçu pour faciliter le démarrage rapide de nouvelles applications web avec une gestion utilisateurs complète et une authentification sécurisée.

Table des matières
------------------

[](#table-des-matières)

- [Maravel XY](#maravel-xy)
    - [Table des matières](#table-des-mati%C3%A8res)
    - [Caractéristiques](#caract%C3%A9ristiques)
    - [Structure du Projet](#structure-du-projet)
    - [Installation](#installation)
        - [Prérequis](#pr%C3%A9requis)
        - [Setup](#setup)
    - [Développement](#d%C3%A9veloppement)
        - [Démarrer le serveur de développement](#d%C3%A9marrer-le-serveur-de-d%C3%A9veloppement)
        - [Identifiants de test](#identifiants-de-test)
    - [Ajouter une nouvelle fonctionnalité](#ajouter-une-nouvelle-fonctionnalit%C3%A9)
        - [1. Backend (API)](#1-backend-api)
        - [2. Frontend (Vue)](#2-frontend-vue)
        - [3. Liste avec filtres + formulaire dynamique](#3-liste-avec-filtres--formulaire-dynamique)
    - [Gestion globale des erreurs API](#gestion-globale-des-erreurs-api)
    - [Build pour la production](#build-pour-la-production)
    - [Tests](#tests)
    - [Publier une nouvelle version](#publier-une-nouvelle-version)
    - [Ressources](#ressources)
    - [Support](#support)
    - [Changelog](#changelog)
    - [License](#license)

Caractéristiques
----------------

[](#caractéristiques)

- ✅ **Authentification sécurisée** avec Laravel Sanctum
- ✅ **Gestion des utilisateurs** complète (CRUD)
- ✅ **Système de rôles et permissions** avec CASL
- ✅ **Frontend moderne** avec Vue 3 + Vuetify
- ✅ **Tableaux** avec recherche/tri/pagination 100% frontend (`VDataTableServer` + `useClientTable`), bouton de rechargement manuel et animation de suppression de ligne
- ✅ **Formulaires d'ajout/édition** générés dynamiquement à partir d'une liste de champs (`FieldRenderer`)
- ✅ **Backend robuste** avec Laravel
- ✅ **Base de données** avec migrations
- ✅ **API RESTful** prête à l'emploi

Structure du Projet
-------------------

[](#structure-du-projet)

```
├── app/
│   ├── Http/Controllers/Admin/  # Contrôleurs API
│   ├── Models/                   # Modèles Eloquent
│   └── Providers/                # Service providers
├── database/
│   ├── migrations/               # Migrations de base de données
│   └── seeders/                  # Seeders pour les données initiales
├── resources/
│   └── js/
│       ├── pages/                # Pages Vue (routing automatique)
│       ├── components/           # Composants réutilisables
│       ├── layouts/              # Layouts de l'application
│       └── stores/               # État (Pinia)
├── routes/api.php                # Routes API
└── public/                        # Fichiers publics

```

Installation
------------

[](#installation)

### Prérequis

[](#prérequis)

- PHP 8.2+
- Node.js 18+
- Composer
- npm/pnpm/yarn

### Setup

[](#setup)

```
# Installer les dépendances PHP
composer install

# Installer les dépendances JavaScript
pnpm install

# Copier le fichier d'environnement
cp .env.example .env

# Générer la clé d'application
php artisan key:generate

# Exécuter les migrations
php artisan migrate

# Seeder les utilisateurs de test
php artisan db:seed
```

Développement
-------------

[](#développement)

### Démarrer le serveur de développement

[](#démarrer-le-serveur-de-développement)

```
# Terminal 1: Backend (Laravel)
php artisan serve

# Terminal 2: Frontend (Vite)
pnpm dev
```

L'application sera accessible à `http://localhost:5173`

### Identifiants de test

[](#identifiants-de-test)

- **Admin:**

    - Email: `admin@example.com`
    - Password: `password`
- **User:**

    - Email: `user@example.com`
    - Password: `password`

Ajouter une nouvelle fonctionnalité
-----------------------------------

[](#ajouter-une-nouvelle-fonctionnalité)

### 1. Backend (API)

[](#1-backend-api)

Créer un nouveau modèle et contrôleur:

```
php artisan make:model Produit -m
php artisan make:controller Api/ProduitController --model=Produit --api
```

Ajouter les routes dans `routes/api.php`:

```
Route::apiResource('produits', ProduitController::class);
```

### 2. Frontend (Vue)

[](#2-frontend-vue)

Créer une nouvelle page dans `resources/js/pages/admin/produits.vue`:

```

definePage({
  meta: {
    action: 'manage',
    subject: 'all',
  },
})

const produits = ref([])

onMounted(async () => {
  const { data } = await useApi('/admin/produits')
  produits.value = data
})

```

Le routing est automatique basé sur le chemin du fichier!

### 3. Liste avec filtres + formulaire dynamique

[](#3-liste-avec-filtres--formulaire-dynamique)

Les pages `admin/users`, `admin/roles` et `admin/permissions` montrent le pattern à reproduire pour une nouvelle ressource :

- **Liste** : un seul appel API avec `paginate: false` au montage, puis un `computed` qui applique la recherche/les filtres, et le composable `useClientTable(filteredItems)` pour le tri/la pagination (alimente `VDataTableServer` via `page`, `itemsPerPage`, `updateOptions`, `paginatedItems`, `totalItems` — aucun appel réseau supplémentaire).
- **Formulaire** : une liste de champs (`value_key`, `type`, `label`, `required`, `cols`, `data`, `show`) rendue avec `` dans une boucle `v-for` sur `VCol`, plutôt que des champs Vuetify codés en dur. Types supportés : `text`, `number`, `email`, `password`, `textarea`, `tiptap`, `date`, `lov` (liste de valeurs/autocomplete), `select`, `boolean`, `checkbox`, `file`.
- **Rechargement + animation de suppression** : un bouton "Recharger" (`:loading="loading"` + `@click="fetchX"`) relance le chargement de la liste. À la suppression, l'id de la ligne est ajouté à un `Set` réactif `deletingIds`, exposé au tableau via `:row-props` (classe CSS `row-removing` définie dans le `` du composant) ; le rechargement de la liste est différé de la durée de l'animation (`ROW_REMOVE_ANIMATION_DURATION`) pour laisser la ligne disparaître en fondu avant de retirer la donnée.

Gestion globale des erreurs API
-------------------------------

[](#gestion-globale-des-erreurs-api)

Les deux clients HTTP du frontend — `$api` (`resources/js/utils/api.js`, basé sur ofetch) et `useApi`(`resources/js/composables/useApi.js`, basé sur `createFetch` de VueUse) — partagent une gestion centralisée des erreurs via `handleApiError(status, errors)` exportée par `resources/js/utils/api.js` :

- **401 Non authentifié** : la session locale est purgée (cookies `accessToken`, `userData`, `userAbilityRules`) et l'utilisateur est redirigé vers la page de connexion (`/login`). La page en cours est conservée dans le paramètre `?to=` afin d'y revenir automatiquement après reconnexion.
- **403 avec `errors.password_change_required`** (`sub_code` `002`, renvoyé par le middleware `AccountStatusMiddleware` du package Maravel) : l'utilisateur est redirigé vers la page de changement de mot de passe (`/account/security`), seule page — avec la déconnexion — autorisée par le backend tant que le mot de passe n'a pas été changé. Le cookie `userData` est mis à jour (`password_change_required: true`) pour que l'interface reflète cet état.

Les redirections utilisent l'instance `router` importée depuis `@/plugins/1.router` (et non `useRouter()`, qui n'est pas disponible hors du contexte d'un composant).

Les hooks d'erreur définis localement sur un appel (par exemple `onResponseError` pour afficher les erreurs de validation d'un formulaire) restent exécutés : ofetch ≥ 1.4 chaîne les hooks globaux et locaux au lieu de les remplacer.

Build pour la production
------------------------

[](#build-pour-la-production)

```
# Compiler et minifier
pnpm build

# Build du backend
```

Tests
-----

[](#tests)

```
# Tests PHP
php artisan test

# Tests JavaScript
pnpm test
```

Publier une nouvelle version
----------------------------

[](#publier-une-nouvelle-version)

1. Mettre à jour [CHANGELOG.md](CHANGELOG.md) avec une entrée `## [x.y.z] - AAAA-MM-JJ`.
2. Lancer le script de publication, qui commit/push les changements puis crée et push le tag `vx.y.z` :

```
./pusher.sh 1.2.0 "Description du changement"
```

Ressources
----------

[](#ressources)

- [Documentation Laravel](https://laravel.com/docs)
- [Documentation Vue 3](https://vuejs.org/)
- [Documentation Vuetify](https://vuetifyjs.com/)
- [Documentation Vite](https://vitejs.dev/)

Support
-------

[](#support)

Pour des questions ou des problèmes, consultez la page d'accueil de l'application qui contient un guide complet d'implémentation.

Changelog
---------

[](#changelog)

Voir [CHANGELOG.md](CHANGELOG.md) pour l'historique des versions.

License
-------

[](#license)

MIT

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance94

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~3 days

Total

6

Last Release

28d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/57989130?v=4)[Charles](/maintainers/mawena)[@mawena](https://github.com/mawena)

---

Top Contributors

[![mawena](https://avatars.githubusercontent.com/u/57989130?v=4)](https://github.com/mawena "mawena (10 commits)")

---

Tags

laraveltemplatesanctumpermissionsrbacstarter-kitvuevuetify

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/mawena-maravel-xy/health.svg)

```
[![Health](https://phpackages.com/badges/mawena-maravel-xy/health.svg)](https://phpackages.com/packages/mawena-maravel-xy)
```

###  Alternatives

[unopim/unopim

UnoPim Laravel PIM

10.5k2.4k](/packages/unopim-unopim)[hasinhayder/tyro

Tyro - The ultimate Authentication, Authorization, and Role &amp; Privilege Management solution for Laravel 12 &amp; 13

6765.1k6](/packages/hasinhayder-tyro)[codewithdennis/larament

Larament is a time-saving starter kit to quickly launch Laravel 13.x projects. It includes FilamentPHP 5.x pre-installed and configured, along with additional tools and features to streamline your development workflow.

3991.8k](/packages/codewithdennis-larament)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
