flyo/nitro-laravel

Flyo Nitro Laravel 框架模块

dev-main 2024-09-12 19:32 UTC

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);

文档

在文档中阅读更多

包开发

  1. 检查 example-app/.env 文件以获取正确的 flyo token。
  2. 转到 example-app 并运行 php artisan serve 以运行示例应用程序。