На Framework Foton при передаче в сигнатуры метода типа контракта соответствие класса контракту определяется самостоятельно, однако иногда возникает необходимость жестко закрепить определенные контракты в зависимости от состояния, тогда на помощь приходит DI Foton.
Перейдите в файл /dev/di.php
Вы увидите готовый пример такого контракта
<?php
namespace Dev;
class DI{
public $namespaces;
public function __construct(){
$this->namespaces = [
'\Foton\Module\Operation' => 'operation'
];
}
function operation(){
global $FotonAuth;
if($FotonAuth){
return new \Foton\Module\Operation\Admin();
}
else{
return new \Foton\Module\Operation\Base();
}
}
}
Вы можете добавить свой элемент в массив namespaces
Для этого ключом укажите полное название интерфейса, а значением название метода обработки.
Ниже напишите свой метод, который в зависимости от условий будет выдавать в return ссылку на ту или иную реализацию контракта, это обязательно должен быть объект.
Далее перейдите в командную строку в корне вашего проекта и введите php foton di
Теперь вы можете использовать общий контракт с префиксом DI и система самостоятельно подставит нужную реализацию в зависимости от ваших условий.
<?php
$crud = new \DI\Foton\Module\Operation();
$arr = $crud->getlist([
'table'=>'mapofsite'
]);
FotonArr($arr);