1. Go to this page and download the library: Download matheus-rosa/php-interactor 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/ */
matheus-rosa / php-interactor example snippets
class SaveUser
{
}
use MatheusRosa\PhpInteractor\Interactable;
use MatheusRosa\PhpInteractor\Context;
class SaveUser
{
use Interactable;
protected function execute(Context $context)
{
// When using the Interactable trait, the execute method
// needs to be implemented.
}
}
use MatheusRosa\PhpInteractor\Interactable;
use MatheusRosa\PhpInteractor\Context;
class SaveUser
{
use Interactable;
protected function execute(Context $context)
{
// All values passed to SaveUser::call are accessible here
// within the current context object.
var_dump($context->name, $context->email);
// You can even create brand-new values and assign them to the current context
$context->currentTime = time();
$context->user = new User($context->name, $context->email);
$context->user->save();
}
}
$context = SaveUser::call([
'name' => 'John Doe',
'email' => '[email protected]',
]);
$context->success(); // returns either true or false
use MatheusRosa\PhpInteractor\Interactable;
use MatheusRosa\PhpInteractor\Context;
class SaveUser
{
use Interactable;
protected function execute(Context $context)
{
$context->user = new User($context->name, $context->email);
if (!$context->user->save()) {
$context->fail('custom error message | model error message');
}
// some other cool code
// it will be unreachable if the $context->fail() was invoked
}
}
use \MatheusRosa\PhpInteractor\Interactable;
use \MatheusRosa\PhpInteractor\Context;
class SaveUser
{
use Interactable;
protected function around(Context $context)
{
// If the `around` method returns false
// the `execute` method will not even start
if (empty($context->user->email)) {
return false;
}
// you can do whatever you want from this point forward,
// like creating new variables to the $context or even adding new guards
}
protected function execute(Context $context)
{
if ($context->user->save()) {
$context->fail('error message');
}
}
}
use \MatheusRosa\PhpInteractor\Interactable;
use \MatheusRosa\PhpInteractor\Context;
class SaveUser
{
use Interactable;
protected function before(Context $context)
{
// The `before` method will execute before the `execute` method.
// Unlike the `around` method, it can't stop the execution flow of the current Interactor.
// It comes more handy to initialize new variables.
$context->currentTime = time();
}
protected function execute(Context $context)
{
if ($context->user->save()) {
$context->fail('error message');
}
}
}
use \MatheusRosa\PhpInteractor\Interactable;
use \MatheusRosa\PhpInteractor\Context;
class SaveUser
{
use Interactable;
protected function after(Context $context)
{
// this will execute after what's defined in your `execute` method
$context->endTime = time();
}
protected function execute(Context $context)
{
if ($context->user->save()) {
$context->fail('error message');
}
}
use \MatheusRosa\PhpInteractor\Interactable;
use \MatheusRosa\PhpInteractor\Context;
class YourClazz
{
use Interactable;
protected function around(Context $context)
{
$context->number += 1;
echo "around | number: {$context->number}\n";
}
protected function before(Context $context)
{
$context->number += 1;
echo "before | number: {$context->number}\n";
}
protected function execute(Context $context)
{
$context->number += 1;
echo "execute | number: {$context->number}\n";
}
protected function after(Context $context)
{
$context->number += 1;
echo "after | number: {$context->number}\n";
}
}
YourClass::call(['number' => 0]);
use \MatheusRosa\PhpInteractor\Organizable;
class YourClazz
{
use Organizable;
protected function organize()
{
// when using the Organizable trait,
// the organize method needs to be implemented.
}
}
use \MatheusRosa\PhpInteractor\Organizable;
class YourOrganizedClazz
{
use Organizable;
protected function organize()
{
return [
FirstInteractor::class,
SecondInteractor::class,
ThirdInteractor::class,
];
}
}
$context = YourOrganizedClazz::call(['foo' => 'bar']);
// you can do the same context operations
$context->success(); // returns boolean
$context->failure(); // returns boolean
$context->errors(); // returns an array of errors
use \MatheusRosa\PhpInteractor\Organizable;
use \MatheusRosa\PhpInteractor\Context;
class YourOrganizedClazz
{
use Organizable;
protected function around(Context $context)
{
// implement an around logic.
// You can stop this organizer pipeline
// by returning false.
}
protected function before(Context $context)
{
// implement a before logic
}
protected function after(Context $context)
{
// implement an after logic
}
protected function organize()
{
return [
FirstInteractor::class,
SecondInteractor::class,
ThirdInteractor::class,
];
}
}
use \MatheusRosa\PhpInteractor\Interactable;
use \MatheusRosa\PhpInteractor\Context;
class CreateUser
{
use Interactable;
public function rollback(Context $context)
{
$this->user->destroy();
}
protected function execute(Context $context)
{
if ($context->user->save()) {
$context->fail('error message');
}
}
}
use \MatheusRosa\PhpInteractor\Organizable;
use \MatheusRosa\PhpInteractor\Context;
class YourOrganizedClazz
{
use Organizable;
protected function continueOnFailure()
{
return true;
}
protected function organize()
{
return [
FirstInteractor::class,
SecondInteractor::class,
ThirdInteractor::class,
];
}
}
shell
composer
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.