Cette traduction peut être obsolète.

Utilisation du guard

Pour vérifier le projet par rapport aux règles dans mago.toml :

mago guard

Pour vérifier un seul répertoire ou fichier :

mago guard src/Domain
mago guard src/UI/Controller/UserController.php

Les chemins passés sur la ligne de commande remplacent les paths de mago.toml pour cette exécution.

Lecture de la sortie

Le guard signale deux types de problèmes : les violations de frontière du guard de périmètre et les défauts structurels du guard structurel.

Violation de frontière

Étant donné cette règle :

[[guard.perimeter.rules]]
namespace = "App\\Domain\\"
permit = ["@self", "@native"]

Et ce code :

namespace App\Domain\Model;

use App\Infrastructure\Doctrine\Orm\Entity;

class User extends Entity {}

Le guard signale :

error[disallowed-use]: Illegal dependency on `App\Infrastructure\Doctrine\Orm\Entity`
 ┌─ src/Domain/Model/User.php:4:5
 │
4 │ use App\Infrastructure\Doctrine\Orm\Entity;
 │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This `use` statement is not allowed by the architectural rules
 │
 = Breach occurred in namespace `App\Domain\Model`.
 = Dependency forbidden by architectural rules
 = The following rule(s) were evaluated but none permitted this dependency: `App\Domain\\`.
 = Help: Update your guard configuration to allow this dependency or refactor the code to remove it.

Défaut structurel

Étant donné cette règle :

[[guard.structural.rules]]
on = "App\\UI\\**\\Controller\\**"
target = "class"
must-be-final = true
reason = "Controllers should be final to prevent extension."

Et ce code :

namespace App\UI\Controller;

class UserController
{
}

Le guard signale :

error[must-be-final]: Structural flaw in `App\UI\Controller\UserController`
 ┌─ src/UI/Controller/UserController.php:3:7
 │
 3 │ class UserController
 │ ^^^^^^^^^^^^^^ This must be declared as `final`
 │
 = Controllers should be final to prevent extension.
 = Help: Declare this class as `final`.

Chaque rapport identifie le symbole, l'emplacement, la violation exacte et la reason de la configuration lorsqu'elle a été fournie.

↳ Modifier cette page →