Pckg Documentation
Pckg Documentation
  • About
  • Concept
  • Start
  • Deployment
  • Tests
  • Ecosystem
    • Docker images
    • Skeleton
  • Core packages
    • Auth
    • Cache
    • Collection
    • Concept
    • Database
      • Repository
        • Driver
      • Entity
        • Relations
        • Query
      • Record
        • Fields
        • Model
      • Events
      • Extensions
    • Framework
      • Environment
        • Console
        • Development
        • Production
        • Test
      • Application
      • Providers
      • Config
      • Router
      • Request
      • Response
      • Controller
        • Middleware
        • Afterware
      • View
      • Events
      • Exception
    • Generic
      • Dynamic
      • Generic
      • Maestro
    • Htmlbuilder
      • Elements
        • Form
        • Fields
      • Datasources
      • Validators
      • Decorators
    • Locale
    • Mail
      • Drivers
      • Template
      • Mail
    • Manager
      • Asset manager
      • SEO manager
      • Meta manager
      • Upload manager
      • Vue manager
      • Job manager
      • Locale manager
      • Page manager
    • Migrator
      • Migrations
      • Fields
    • Queue
      • Driver
      • Publisher
      • Subscriber
    • Storage
      • Driver
      • Media
    • Translator
  • More packages
    • API
    • HTTP QL
      • Read
      • Write
      • Uploads
    • Task
      • Async
    • Websocket
      • Server
      • Client
  • Frontend
    • Helpers JS
    • Helpers CSS
  • Extras
    • Parser
    • Payment
    • Tenant
Powered by GitBook
On this page
  • Directory/File organization
  • App and Provider
  • Routing
  • Controller and Action

Was this helpful?

Start

In this tutorial you will learn about the most common aspects of the framework:

  • register new Provider in your App and declare all features

  • create routes for GET, POST and DELETE requests

  • implement Controller actions for all routes

  • configure database connection

  • create new database migration using Migration

  • extend Entity and Record classes for ORM

  • implement Resolver for resolving objects based on request parameters

  • create Form for request validation

  • create Middleware and Afterware as before- and after- request handlers

  • learn about Event and Handler

  • create your first console Command and Job for cronjob

Prerequisites:

  • create your project composer create-project pckg-skeleton,

  • optionally install your frontend dependencies - pnpm i,

  • initialize the project - console project:init

  • bootstrap your app - console app:create

Directory/File organization

./app/foo/
├── config
│   ├── database.php
├── src
│   ├── Foo.php # 1. Registers MyBaseProvider
│   ├── YourVendor/Foo
│   │   ├── Afterware
│   │   │   ├── LogResponseLength.php
│   │   ├── Controller
│   │   │   ├── MyController.php
│   │   ├── Console
│   │   │   ├── PrintDatetime.php
│   │   ├── Form
│   │   │   ├── CreateDummy.php
│   │   ├── Handler
│   │   │   ├── LogInserting.php
│   │   ├── Middleware
│   │   │   ├── LogResolved.php
│   │   ├── Migration
│   │   │   ├── CreateDummyTables.php
│   │   ├── Provider
│   │   │   ├── MyBaseProvider.php
│   │   ├── Entity
│   │   │   ├── Dummies.php
│   │   ├── Record
│   │   │   ├── Dummy.php
│   │   ├── Resolver
│   │   │   ├── Dummy.php

Notes:

  • App Foo registers YourVendor\Foo\Provider\MyBaseProvider

  • Provider MyBaseProvider registers:

    • routes from MyController optionally validated by CreateDummy request/form and resolved by Dummy record resolver,

    • console command PrintDatetime

    • LogResolved middleware, LogResponseLength afterware and LogInserting event handler

  • Records and entities are auto-wired or resolved by the framework

App and Provider

Create new provider and register it in your base app class.

app/foo/src/Foo.php
<?php

use Pckg\Framework\Provider;
use YourVendor\Foo\Provider\MyBaseProvider;

class Foo extends Provider
{
    public function providers()
    {
        return [
            \Pckg\Migrator\Provider\Migrator::class, // for running migrations
            \Pckg\Framework\Provider\Framework::class, // for running console commands
            // \Pckg\Manager\Provider\Manager::class, // for asset management
            MyBaseProvider::class,
        ];
    }
}
app/foo/src/YourVendor/Foo/Provider/MyBaseProvider.php
<?php

namespace YourVendor\Foo\Provider;

use Pckg\Framework\Provider;

class MyBaseProvider extends Provider {
}

Routing

Register a new route in your provider:

app/foo/src/YourVendor/Foo/Provider/MyBaseProvider.php
<?php

use YourVendor\Foo\Controller\MyController;

...
    public function routes() {
        return [
            'index' => route('/', 'index', MyController::class),
            /*
            routeGroup([
                'controller' => MyController::class,
                // 'urlPrefix' => '',
                // 'namePrefix' => '',
            ], [
                'index' => route('/'),
            ]),
            */
        ];
    }
...

Controller and Action

Create a controller and action:

app/foo/src/YourVendor/Foo/Controller/MyController.php
<?php

namespace YourVendor\Foo\Controller;

class MyController {
    public function getIndexAction() {
        return [
            'foo' => 'bar',
        ];
    }
}
```

</div>

Now open your browser at https://localhost/

```json
{"foo":"bar"}
PreviousConceptNextDeployment

Last updated 9 months ago

Was this helpful?