teknoo / states-bundle
Symfony bunde to create PHP classes following the State pattern in PHP. This can be a cleaner way for an object to change its behavior at runtime without resorting to large monolithic conditional statements and thus improve maintainability. (Build on the Teknoo Software States library)
Installs: 2 768
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 4
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: ~7.0
- container-interop/service-provider: ^0.3.0
- teknoo/states: ^3.0.0
Requires (Dev)
- doctrine/mongodb-odm: ^1.0.0
- doctrine/orm: ~2.2
- pdepend/pdepend: ~2.5
- phploc/phploc: ~3.0
- phpmd/phpmd: ~2.6
- phpunit/phpunit: ~5.4
- sebastian/phpcpd: ~3.0
- squizlabs/php_codesniffer: ~2.8
- symfony/framework-bundle: ~2.8||~3.0,<3.4
- teknoo/states-life-cycle: ^2.0.0
- dev-master
- 3.0.2
- 3.0.1
- 3.0.0
- 3.0.0-beta1
- 3.0.0-alpha8
- 3.0.0-alpha7
- 3.0.0-alpha6
- 3.0.0-alpha5
- 3.0.0-alpha4
- 3.0.0-alpha3
- 3.0.0-alpha2
- 3.0.0-alpha1
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 2.0.0-rc6
- 2.0.0-rc5
- 2.0.0-rc4
- 2.0.0-rc3
- 2.0.0-rc2
- 2.0.0-rc1
- 2.0.0-beta2
- 1.1.3
- 1.1.2
- 1.1.0
- 1.1.0-beta6
- 1.1.0-beta5
- 1.1.0-beta4
- 1.1.0-beta3
- 1.1.0-beta2
- 1.1.0-beta1
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.9.1-rc
- dev-next
- dev-statesBundle-3.0
- dev-statesBundle-2.0
- dev-legacy
This package is not auto-updated.
Last update: 2022-02-01 12:52:27 UTC
README
States allows you to create PHP classes following the State Pattern in PHP. This can be a cleaner way for an object to change its behavior at runtime without resorting to large monolithic conditional statements and this improve maintainability.
This package is bundle to adapt the library States
to Symfony 2+.
Short Example
/**
* File States/English.php
*/
class English extends \Teknoo\States\State\AbstractState
{
public function sayHello(): string
{
return 'Good morning, '.$this->name;
}
public function displayDate(\DateTime $now): string
{
return $now->format('%m %d, %Y');
}
}
/**
* File States/French.php
*/
class French extends \Teknoo\States\State\AbstractState
{
public function sayHello(): string
{
return 'Bonjour, '.$this->name;
}
public function displayDate(\DateTime $now): string
{
return $now->format('%d %m %Y');
}
}
/**
* File MyClass.php
*/
class MyClass extends \Teknoo\Bundle\StatesBundle\Entity\IntegratedEntity
{
/**
* @ORM\Column(type="string", length=250)
* @var string
*/
private $name;
/**
* @param string $name
* @return self
*/
public function setName(string $name): MyClass
{
$this->name = $name;
return $this;
}
}
$frenchMan = new MyClass();
$frenchMan->switchState('French');
$frenchMan->setName('Roger');
$englishMan = new MyClass();
$englishMan->switchState('Enflish');
$englishMan->setName('Richard');
$now = new \DateTime('2016-07-01');
foreach ([$frenchMan, $englishMan] as $man) {
echo $man->sayHello().PHP_EOL;
echo 'Date: '.$man->displayDate($now);
}
//Display
Bonjour Roger
Date: 01 07 2016
Good morning Richard
Date: 07 01, 2016
Installation & Requirements
This library requires :
* PHP 7+
* Composer
* States 2+
* Symfony 2.7+
Instruction to install the States bundle with Symfony 2+ : Install.
This library support Doctrine, but Doctrine is not mandatory. (Stated classes can be use without Doctrine)
* Doctrine (Orm or Odm/Mongo)
Symfony Use
For main States's features, the bundle is transparent :
- States bundle's services are private and are not available. Only the loader is accessible via :
@teknoo.states.loader
- Your Symfony's Doctrine entity (ORM) must use the trait
Teknoo\Bundle\StatesBundle\Entity\IntegratedTrait
.- Alternative, you can inherits
Teknoo\Bundle\StatesBundle\Entity\IntegratedEntity
.
- Alternative, you can inherits
- Your Symfony's Doctrine document (ODM) must use the trait
Teknoo\Bundle\StatesBundle\Document\IntegratedTrait
.- Alternative, you can inherits
Teknoo\Bundle\StatesBundle\Entity\IntegratedDocument
.
- Alternative, you can inherits
With the extension States Life cyclable :
- Observer instance to register a stated class and observe it :
@teknoo.states.lifecyclable.service.observer
- Manager to register scenarii about stated class:
@teknoo.states.lifecyclable.service.manager
- Prototype to create a new Yaml Scenario Builder
@teknoo.states.lifecyclable.prototype.scenario_yaml_builder
- Prototype to create a new Scenario Builder
@teknoo.states.lifecyclable.prototype.scenario_builder
- prototype to create a new Scenario :
@teknoo.states.lifecyclable.prototype.scenario
Documentation to use States with Symfony 2+ : Symfony.
Quick startup
Quick How-to to learn how use this library : Startup.
Example
An example of using this library is available in the folder : Demo.
API Documentation
Generated documentation from the library with PhpDocumentor : Open.
Behavior Documentation
Documentation to explain how this library works : Behavior.
Credits
Richard Déloge - richarddeloge@gmail.com - Lead developer. Teknoo Software - http://teknoo.software
About Teknoo Software
Teknoo Software is a PHP software editor, founded by Richard Déloge. Teknoo Software's DNA is simple : Provide to our partners and to the community a set of high quality services or software, sharing knowledge and skills.
License
States is licensed under the MIT and GPL3+ Licenses - see the licenses folder for details
Contribute :)
You are welcome to contribute to this project. Fork it on Github