strategio / megio-starter
Boilerplate for Megio apps & webs
Installs: 32
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:project
Requires
- php: ^8.3
- strategio/megio-core: ^0.9.5
README
Skeleton for your apps, webs & APIs built on Megio.
- Docs: https://megio.dev
- Installation: https://megio.dev/docs/getting-started/installation
Template rendering
class ArticleController extends Controller { public function list(EntityManager $em, int $page): Response { $articles = $em->getRepository(Article::class)->findBy(['page' => $page]) return $this->render(Path::viewDir() . '/controller/article.latte', [ 'articles' => $articles ]); } }
API request handling
class DownloadRequest extends Request { // Inject custom dependencies here public function __construct(protected readonly EntityManager $em) { } // Add request validations public function schema(array $data): array { return [ 'invoice' => Expect::structure([ 'type' => Expect::anyOf( 'invoice', 'proforma', 'invoice-annul', 'proforma-annul' ), 'number' => Expect::string()->required(), 'issue_date' => Expect::string()->required(), 'due_date' => Expect::string()->required(), 'currency' => Expect::string()->required(), 'items_text' => Expect::string(), 'footer_text' => Expect::string(), ])->required()->castTo('array') ]; } // Process validated data public function process(array $data): Response { $invoice = new Invoice(); $invoice->setType($data['invoice']['type']) ... $this->em->persist($invoice) $this->em->flush() return $this->json(['id' => $invoice->getId()]); } }
Routing
return static function (RoutingConfigurator $routes): void { $routes->add('download', '/api/invoice/download') ->methods(['POST']) ->controller(\App\Http\Request\Invoice\DownloadRequest::class) ->options(['auth' => false]); $routes->add('article', '/article/{page}') ->methods(['GET']) ->controller([\App\Http\Controller\ArticleController::class, 'list']) ->requirements(['page' => '\d+']) ->defaults(['page' => 1]) ->options(['auth' => false]); };