chevere / action
Object oriented convention for working with Parameter
Requires
- php: ^8.1
- chevere/message: ^1.0.0
- chevere/parameter: ^1.0.0
Requires (Dev)
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.5
- symplify/easy-coding-standard: ^11.1
README
Summary
Action provides an object oriented convention for working with Parameter.
Installing
Action is available through Packagist and the repository source is at chevere/action.
composer require chevere/action
Quick start
Implement ActionInterface by using the Action trait or by extending Action abstract.
Creating actions
Use ActionTrait
Create an action by using ActionTrait.
use Chevere\Action\Interfaces\ActionInterface; use Chevere\Action\Traits\ActionTrait; class MyAction implements ActionInterface { use ActionTrait; // ... }
Extend Action
Create an Action by extending Action.
use Chevere\Action\Action; class MyAction extends Action { // ... }
Main method
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; } }
Using actions
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');
Advanced use
Return method
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'; }
Custom main method
Override Action's mainMethod
to define a custom main
method to use.
public static function mainMethod(): string { return 'altMain'; }
Controller
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
Defining a Controller
A Controller implements the ControllerInterface
. You can extend Controller
to quick create a compliant Controller:
use Chevere\Controller\Controller; class SomeController extends Controller { // ... }
Main Parameters
Parameters are defined in the main
method but it just takes strings.
public function main( string $pepito, string $paysTwice ): array { // ... }
Parameter Attributes
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
Documentation is available at chevere.org.
License
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.