mustafarefaey/laravel-hybrid-spa

此包已被废弃且不再维护。未建议替代包。

Laravel 混合 SPA 响应助手。

v1.0.3 2021-01-10 21:29 UTC

This package is auto-updated.

Last update: 2021-03-10 22:00:11 UTC


README

Latest Version on Packagist Tests Total Downloads

Laravel HTTP 响应类,帮助你构建混合 SPA!

内容表

安装

您可以通过 composer 安装此包

composer require mustafarefaey/laravel-hybrid-spa

您可以使用以下命令发布配置文件

php artisan vendor:publish --provider="MustafaRefaey\LaravelHybridSpa\LaravelHybridSpaServiceProvider" --tag="config"

这是发布配置文件的内容

return [
    /**
     * This should be a full HTTP/HTTPS URL to your JS app.
     * Example: 'https://example.com/app.js'
     */
    'js-app-url' => '',

    /**
     * This should be an array of full HTTP/HTTPS URLs to your stylesheets.
     * Example: ['https://example.com/app.css']
     */
    'stylesheets' => [],

    /**
     * This should be the ID of the element that mounts the JS app.
     * Example: 'app'
     */
    'js-app-id' => '',

    /**
     * This must be a full qualified class path, that implements
     * `MustafaRefaey\LaravelHybridSpa\RetrievesSharedState` interface
     */
    'shared-state-handler' => '\\MustafaRefaey\\LaravelHybridSpa\\SharedState',

    /**
     * This is the name of the global JS variable, that will be injected with the shared state
     * Example: '__SHARED_STATE__', will be exposed as `window.__SHARED_STATE__`
     */
    'shared-state-variable' => '__SHARED_STATE__',

    /**
     * This is the name of the global JS variable, that will be injected with the page state
     * Example: '__PAGE_STATE__', will be exposed as `window.__PAGE_STATE__`
     */
    'page-state-variable' => '__PAGE_STATE__',

    /**
     * This is an array of arrays, to describe favicons
     * Must be in this format:
     *  [
     *      ['href' => '', 'sizes' => '', 'type' => ''],
     *      ['href' => '', 'sizes' => '', 'type' => ''],
     *  ]
     *
     */
    'favicons' => [],
];

artesaos/seotools 包用于设置元标签。请查看他们的 配置文档

ApiResponse

在控制器动作中使用此类以返回一致的 JSON 响应。

use MustafaRefaey\LaravelHybridSpa\ApiResponse;

成功响应

返回成功响应时使用 success 方法。

return ApiResponse::success();

成功响应可选参数

data:任何数据的数组,这将被 json 编码。

messages:任何消息的数组,这将被 json 编码。

HTTP 状态码:默认为 200,除非你指定。

return ApiResponse::success(array $data = [], array $messages = [], int $code = 200);

成功响应格式

{
    "status": true,
    "data": [],
    "success_messages": []
}

失败响应

返回失败响应时使用 fail 方法。

return ApiResponse::fail();

失败响应可选参数

data:任何数据的数组,这将被 json 编码。

messages:任何消息的数组,这将被 json 编码。

HTTP 状态码:默认为 400,除非你指定。

return ApiResponse::fail(array $data = [], array $messages = [], int $code = 400);

失败响应格式

{
    "status": false,
    "data": [],
    "error_messages": []
}

HybridResponse

在控制器动作中使用此类以返回一个加载 js 应用并传递初始页面状态的 HTML 页面。

如果请求期望 JSON 响应,它将以 ApiResponse 的形式返回页面的状态。

use MustafaRefaey\LaravelHybridSpa\HybridResponse;
return HybridResponse::make(array $pageState = []);

HTML 响应内容

  • head 标签内
    1. 通常需要的元标签:
      <meta charset="utf-8" />
      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      <meta name="viewport" content="width=device-width, initial-scale=1" />
      <meta name="csrf-token" content="{{ csrf_token() }}" />
    2. favicon:您可以在配置文件中设置它们。
    3. SEO 元标签:此包使用 artesaos/seotools 包来设置元标签。请查看他们的 文档
  • body 标签内
    1. 将要挂载JS应用的Div元素:您可以在配置文件中设置其ID。
    2. 5个全局JS变量:
      1. window.__SHARED_STATE__:共享状态注入的位置。
        • 您可以在配置文件中重命名此变量。
        • 要控制其值,您可以创建一个扩展MustafaRefaey\LaravelHybridSpa\RetrievesSharedState接口的类,然后根据需要更新配置文件中的shared-state-handler
      2. window.__PAGE_STATE__:页面状态注入的位置。
        • 您可以在配置文件中重命名此变量。
      3. window.__SKIP_LOADING_PAGE_STATE_ONCE__:此变量用于帮助JS应用跳过调用后端进行页面状态,并直接使用window.__PAGE_STATE__。其初始值为true,您一旦使用window.__PAGE_STATE__,就应该将其设置为false
      4. window.__SESSION_SUCCESS_MESSAGES__:会话成功消息注入的位置。
      5. window.__SESSION_ERROR_MESSAGES__:会话错误消息注入的位置。
    3. JS应用脚本:您可以在配置文件中设置其URL。

测试

composer test

变更日志

请参阅CHANGELOG以获取最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

鸣谢

此包使用artesaos/seotools包来设置元标签。

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件