Action provides an object oriented convention for working with Parameter.
Action is available through Packagist and the repository source is at chevere/action.
composer require chevere/action
Implement ActionInterface by using the Action trait or by extending Action abstract.
Create an action by using ActionTrait.
use Chevere\Action\Interfaces\ActionInterface;
use Chevere\Action\Traits\ActionTrait;
class MyAction implements ActionInterface
{
use ActionTrait;
// ...
}
Create an Action by extending Action.
use Chevere\Action\Action;
class MyAction extends Action
{
// ...
}
Use the main
method to determine your action's main logic. Use attributes from chevere/parameter on arguments and method return to add validation rules.
- Before validation rules:
class MyAction
{
protected function main(
string $value
): int
{
return mb_strlen($value) * 5;
}
}
- After validation rules:
use Chevere\Action\Action;
use Chevere\Parameter\Attributes\IntAttr;
use Chevere\Parameter\Attributes\ReturnAttr;
use Chevere\Parameter\Attributes\StringAttr;
class MyAction extends Action
{
#[ReturnAttr(
new IntAttr(min: 0, max: 100)
)]
protected function main(
#[StringAttr('/^ok/')]
string $value
): int {
return mb_strlen($value) * 5;
}
}
Invoke action's main logic passing the arguments you would pass to main
. Action internal runtime will validate arguments and return against all defined rules.
💡 You can toy with this by running php demo/demo.php
$action = new MyAction();
$result = $action('ok muy bueno');
For validating return
beyond the limitations of PHP's attributes you can define Action's return()
method. In this context you can use and remix any Parameter function.
use Chevere\Action\Interfaces\ParameterInterface;
use function Chevere\Parameter\string;
public static function return(): ParameterInterface
{
return string();
}
You can also forward parameter resolution to a callable by using CallableAttr
:
use Chevere\Action\Attributes\CallableAttr;
use Chevere\Action\Attributes\ReturnAttr;
use function Chevere\Parameter\string;
function myCallable(): StringParameterInterface
{
return string();
}
#[ReturnAttr(
new CallableAttr('myCallable')
)]
protected function main(): string
{
return 'chevere';
}
Override Action's mainMethod
to define a custom main
method to use.
public static function mainMethod(): string
{
return 'altMain';
}
The Controller component is a special type of Action in charge of handling incoming instructions. Its main
method only takes parameters of type string
.
Controller is intended to use them wired to:
- Web Servers
- CLI applications
- Application runners
A Controller implements the ControllerInterface
. You can extend Controller
to quick create a compliant Controller:
use Chevere\Controller\Controller;
class SomeController extends Controller
{
// ...
}
Parameters are defined in the main
method but it just takes strings.
public function main(
string $pepito,
string $paysTwice
): array
{
// ...
}
Use StringAttr
to validate a string:
use Chevere\Attributes\StringAttr;
public function main(
#[StringAttr('/^[a-z]$/')]
string $pepito,
#[StringAttr('/^[a-zA-Z]+$/')]
string $paysTwice
): array
{
// ...
}
Documentation is available at chevere.org.
Copyright Rodolfo Berrios A.
Chevere is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.