flyo / nitro-laravel
Flyo Nitro Laravel 框架模块
Requires
- flyo/nitro-php: ^1.0
- flyo/nitro-php-bridge: ^1.2
- illuminate/support: ^11.0
- illuminate/view: ^11
- laravel/helpers: ^1.6
Requires (Dev)
- larastan/larastan: ^2.0
- laravel/pint: ^1.17
This package is auto-updated.
Last update: 2024-09-12 19:32:42 UTC
README
composer require flyo/nitro-laravel
发布配置
artisan vendor:publish
在 config/flyo.php
中调整 token
确保从
routes/web.php
中删除默认路由,这些路由可能与 cms 路由冲突。
视图
在 resources/views
中添加/调整 cms.blade.php
视图文件,这里是 cms 页面加载器开始的地方
<?php /** @var \Flyo\Model\Page */ ?> <x-flyo::page :page=$page />
现在所有组件块视图都在 ressources/views/flyo
中查找,例如,如果您有一个名为 Text 的 Flyo Nitro 组件块,视图文件将是 ressources/views/flyo/Text.blade.php
,使用以下变量
您可以使用配置文件中的
views_namespace
键调整视图命名空间。
<?php /** @var \Flyo\Model\Block $block */ print_r($block->getContent()); print_r($block->getConfig()); print_r($block->getItems()); print_r($block->getSlots()); ?>
要使块可编辑(这意味着点击块,将正确地将块添加到 cms 编辑器中),您可以使用以下 blade 指令 @editable($block)
<?php /** @var \Flyo\Model\Block $block */ ?> <div @editable($block) style="border:1px solid blue; padding:20px;"> <?php print_r($block->getContent()); ?> <div>
布局变量
为了构建菜单,api 的 $config
响应是全局可用变量,例如,这可以在布局组件中使用
/** @var \Flyo\Model\ConfigResponse $config */ <div> <?php foreach($config->getContainers()['mainnav']->getItems() as $nav): ?> <a href="<?= $nav->getHref(); ?>"><?= $nav->getLabel(); ?></a> <?php endforeach; ?> </div>
确保在布局文件的头部包含 <x-flyo::head>
组件,例如
<head> <title>My Super Website</title> <x-flyo::head /> </head>
这将添加在本地环境中重新加载和编辑块所需的javascript,并分配所有可用元信息。
一个完整的布局示例,可以放置在 resources/views/layouts/app.blade.php
<?php /** @var \Flyo\Model\ConfigResponse $config */ ?> <!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <x-flyo::head /> </head> <body> <ul> <?php foreach ($config->getContainers() as $container): ?> <li><?= $container->getLabel(); ?></li> <ul> <?php foreach ($container->getItems() as $page): ?> <li><a href="<?= $page->getHref(); ?>"><?= $page->getLabel(); ?></a></li> <?php endforeach; ?> </ul> <?php endforeach; ?> </ul> <hr/> {{ $slot }} </body> </html>
实体详情
要显示实体详情页面,您必须注册一个路由,创建一个控制器和一个视图文件
路由文件示例
<?php use App\Http\Controllers\TierController; use Illuminate\Support\Facades\Route; Route::get('/tier/{slug}', [TierController::class, 'show']);
控制器
<?php namespace App\Http\Controllers; use Flyo\Api\EntitiesApi; use Flyo\Configuration; use Illuminate\Contracts\View\Factory; class TierController extends Controller { public function __construct(public Factory $viewFactory, public Configuration $config) {} public function show(string $slug) { $api = new EntitiesApi(null, $this->config); $entity = $api->entityBySlug($slug); return $this->viewFactory->make('tier', [ 'entity' => $entity, ]); } }
以及在 resources/views
文件夹中的示例 tier.blade.php
<?php /** @var \Flyo\Model\Entity $entity */ ?> <x-layout> <h1><?= $entity->getModel()->image->source; ?></h1> </x-layout>
还有一个更通用的控制器可用于显示任何实体详情页面
Route::get('/poi/{slug}', function ($slug) { return app(Flyo\Laravel\Controllers\EntityController::class)->resolve(fn (Flyo\Api\EntitiesApi $api, $param) => $api->entityBySlug($param, 116))->render($slug, 'poi'); });
其中 resources/views
文件夹中的 poi.blade.php
文件可能看起来像这样
<?php /** @var Flyo\Model\EntityInterface $entity */ /** @var object $model */ ?> <x-layout> <?php print_r($model); ?> <?php print_r($entity); ?> </x-layout>
## 杂项
为了在您的应用程序中某处解析配置对象,您可以使用以下代码
// use DI to resolve the Configuration object public function __construct(public Flyo\Model\ConfigResponse $config) { } // or facade /** @var Flyo\Model\ConfigResponse $cfg */ $configResponse = app(Flyo\Model\ConfigResponse::class);
对页面响应也如此
// use DI to resolve the Configuration object public function __construct(public Flyo\Model\Page $page) { } // or facade /** @var Flyo\Model\Page $cfg */ $page = app(Flyo\Model\Page::class);
文档
包开发
- 检查
example-app/.env
文件以获取正确的 flyo token。 - 转到 example-app 并运行
php artisan serve
以运行示例应用程序。