Nette est un framework d'application web open source basé sur le langage PHP. L'une de ses fonctionnalités principales est le conteneur Inversion of Control (IoC), qui nous permet de gérer des objets et de découpler les composants de notre application via l'injection de dépendances.
Dans cet article, nous allons approfondir le conteneur IoC de Nette Framework et apprendre à l'utiliser dans vos applications pour améliorer la qualité et la maintenabilité du code.
Première étape : Configurer le conteneur IoC
Dans le framework Nette, le fichier de configuration du conteneur IoC se trouve par défaut dans app/config/config.neon. Nous devons définir nos services dans ce fichier puis les référencer ailleurs dans l'application.
Voici un exemple simple qui définit un service appelé logger :
services:
logger: class: AppLogger
Ici, nous définissons un service avec le nom de classe AppLogger. Il n'est pas nécessaire de l'instancier ici car le conteneur IoC l'instanciera automatiquement en cas de besoin. Il nous suffit de le définir dans le conteneur de services et nous pouvons l'utiliser.
Étape 2 : Accéder au service
Il existe deux manières d'accéder aux services dans le conteneur IoC. La première façon est d'injecter le service dans le constructeur du contrôleur, comme ceci :
use NetteApplicationUIController; #
private $logger; public function __construct(AppLogger $logger) { $this->logger = $logger; } public function renderDefault() { $this->logger->log('Hello, world!'); }
Ici, nous injectons le service logger via le constructeur du contrôleur. Nous pouvons l'utiliser comme un objet normal.
La deuxième façon consiste à utiliser la fonction d'injection automatique du framework Nette. Il nous suffit de marquer le service comme paramètre du constructeur pour l'injection automatique, et le conteneur d'injection de dépendances l'injectera automatiquement. Ceci peut être réalisé avec :
use NetteApplicationUIController;
class SampleController extends Controller
{/** @var AppLogger @inject */ public $logger; public function renderDefault() { $this->logger->log('Hello, world!'); }
# 🎜 🎜#Ici, nous avons marqué l'attribut $logger de type AppLogger et utilisé la balise @Inject pour indiquer au framework Nette de l'injecter.
logger: class: AppLogger database: class: AppDatabase calculator: class: AppCalculator arguments: - @logger - @database
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!