PHP code example of jeyroik / extas-foundation
1. Go to this page and download the library: Download jeyroik/extas-foundation library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
jeyroik / extas-foundation example snippets
$my = new My();
$my['fieldName'] = 5;
$val = $my['fieldName'];
echo $val;// 5
isset($my['fieldName']); // true
unset($my['fieldName']);
isset($my['fieldName']); // false
foreach($this->getPluginsByStage('event.name') as $plugin)
{
$plugin($arg1, $arg2);
}
class MyPlugin extends extas\components\plugins\Plugin {}
class MyExtension extends extas\components\Extension implements IMyExtension{}
namespace my\extas;
use extas\components\Item;
class My extends Item
{
public function getName()
{
return $this->config['name'] ?? '';
}
public function setName($name)
{
$this->name = $name;
return $this;
}
protected function getSubjectForExtension(): string
{
return 'my';
}
}
$my = new my\extas\My(['name' => 'on init']);
echo $my['name']; // 'on init'
echo $my->getName(); // 'on init'
echo $my->name; // 'on init'
$my['description'] = 'Using Item example';
foreach($my as $field => $value) {
echo $field . ' = ' . $value;
}
/**
* Will output:
* name = on init
* description = Using Item example
*/
namespace my\extas;
use extas\components\Item;
class My extends Item
{
public function getName()
{
$name = $this->config['name'] ?? '';
foreach($this->getPluginsByStage('my.name.get') as $plugin) {
$plugin($name);
}
return $name;
}
public function setName($name)
{
$this->config['name'] = $name;
return $this;
}
protected function getSubjectForExtension(): string
{
return 'my';
}
}
use extas\components\Plugin;
class PluginEmptyName extends Plugin
{
public function __invoke(&$name)
{
$name = $name ?: 'Missed "name"';
}
}
// extas.storage.json/extas.app.storage.json
{
"plugins": [
{
"class": "my\\extas\\PluginEmptyName",
"stage": "my.name.get"
}
]
}
// somewhere in a code
$my = new My();
echo $my->getName(); // 'Missed "name"'
namespace my\extas;
use extas\components\Item;
class My extends Item
{
public function getName()
{
$name = $this->config['name'] ?? '';
foreach($this->getPluginsByStage('my.name.get') as $plugin) {
$plugin($name);
}
return $name;
}
public function setName($name)
{
$this->config['name'] = $name;
return $this;
}
protected function getSubjectForExtension(): string
{
return 'my';
}
}
/**
* Для расширений рекомендуется всегда подготавливать интерфейсы.
* Это помогает при разработке (подсказки) и позволяет удобнее контролировать расширения.
*/
interface IGetMutatedName
{
/**
* @return string
*/
public function getMutatedName(): string;
}
use extas\components\Extension;
class MyGetMutatedName extends Extension implements IGetMutatedName
{
public string $subject = 'my';
/**
* Последним аргументом любого метода, который является расширением,
* передаётся экземпляр сущности, которая расширяется
*
* @param null|My $my
*
* @return string
*/
public function getMutatedName(My $my = null)
{
$name = $my->getName();
return str_replace('.', '\\', $name);
}
}
// extas.storage.json/extas.app.storage.json
{
"extensions": [
{
"class": "my\\extas\\MyGetMutatedName",
"interface": "my\\extas\\IGetMutatedName",
"subject": ["my"],
"methods": ["getMutatedName"]
}
]
}
// somewhere in a code
$my = new My(['name' => 'extas.extensions.extension.example']);
echo $my->getMutatedName(); // extas\\extensions\\extension\\example