strukt / framework
Strukt Framework
Requires
- php: ^8.1
- filp/whoops: ^2.14
- nunomaduro/collision: v7.x-dev
- phplucidframe/console-table: ^1.2
- psy/psysh: ^v0.11.21
- strukt/console: 1.0.0
- strukt/generator: v1.1.1-alpha
- strukt/process: v1.1.0
- strukt/router: v1.1.5-alpha
- symfony/http-foundation: ^4.3
Suggests
This package is auto-updated.
Last update: 2024-12-12 14:47:08 UTC
README
The is the package that unifies all strukt-strukt components under the framework.
Rarely should anyone use this on its own.
Getting started
echo {"minimum-stability":"dev"} > composer.json composer require "strukt/framework:1.1.7-alpha" --prefer-dist
Setup, Cache, Configuration & Environment
Cache
Always remember to clear and reload the cache when necessary
./xcli cache:clear ./xcli cache:make cli ./xcli cache:make idx
Shell
Drop into shell
./xcli shell:exec
Setting Application Type
config("app.type", "App:Idx")// for index.php, alternative App:Cli for console
Configuration
config("facet.middlewares") config("facet.providers")
Environment Setup
This class is defaultly found in strukt-commons
Strukt\Env::withFile();//default .env file in your root folder Strukt\Env::withFile(".env-dev"); env("root_dir", getcwd());//setter custom environment variable env("root_dir");//getter
Setup Packages Registry
File location ./cfg/repo.ini
repos(); //list all repositories repos("published");//list all published strukt packages repos("installed");//list all installed strukt packages
Packages
Default Package
package("core", "App:Idx")->get("settings"); //returns array of middlewares, commands and providers //below mode:App:Cli is default package("core")->get("name");//core package("core")->get("cmd:name");//null package("core")->get("files");//null package("core")->get("modules");//null package("core")->get("is:published");//true by default package("core")->get("requirements");//null or array
The above methods are in abstract class Strukt\Package\Pkg
you can use them to create your package.
Building Packages
Your first step in developing your package will require you to install strukt-framework
and execute composer exec strukt-cfg
command that will create your folder structure. You'll need to create src
and package
folders.
See structure of package below.
├── bootstrap.php ├── cfg ├── console ├── index.php ├── lib ├── tpl ├── vendor ├── composer.json ├── LICENSE ├── package #Place all your packages files here ├── README.md └── src └── Strukt └── Package └── Pkg{{Package Name}}.php #Identify your package resources here
Your package class in src/Strukt/Package/Pkg<Package Name>.php
will have methods
listed in the Default Package section that is it should implement the
interface Strukt\Contract\Package
Package Autoloading
You may require to autoload libraries both from your root directory and package resources.
$loader = require "vendor/autoload.php"; ... ... $loader->addPsr4("App\\", [ __DIR__."/lib/App", __DIR__."/package/lib/App" ]); return $loader;
Note
For packages that require installation into your app/src/{{AppName}}
folder, there
are a few tricks you could use while building your package. The publish:package
command
takes argument package
for publishing packages that are currently in development,
since your source will be in the root folder in a subfolder called package
.
This will require you to enter into your cfg/repo.php
(See Setup Packages Registry) and indicate your currently in-development package with the key/keyword package
which will allow the publisher to install files in the your app source folder app/src
.
Validator
Example
class User extends \Strukt\Contract\Form{ /** * @IsNotEmpty() * @IsAlpha() */ public string $username; /** * @IsNotEmpty() */ public string $password; }
Validator Annotations
/** * @IsNotEmpty() * @IsAlpha() * @IsAlphaNum() * @IsNumeric() * @IsEmail() * @IsDate(Y-m-d) * @IsIn(a,b,c) * @EqualTo(xyz) * @IsLen(10) */
Adding Validators
New validators can be added is in your lib/App/Validator.php
There you can find an example App\Validator::isLenGt
/** * @IsLenGt(10) */