开发
<h2><strong>创建扩展</strong></h2>
<p>在扩展管理中使用 <code>创建扩展</code> 来生成一个扩展的骨架。</p>
<p>配置相应的报名及命名空间,然后点击 <code>确认</code> 即可。</p>
<h3><strong>格式</strong></h3>
<ul>
<li>包名: 作者名/扩展名 (例如: slowlyo/banner)</li>
<li>命名空间: 作者名\扩展名 (例如: Slowlyo\Banner)</li>
</ul>
<p>扩展包创建完成后,会在 <code>extensions</code> 目录下生成一个扩展包的骨架,目录结构如下:</p>
<pre><code> ├── .gitignore
├── composer.json # composer配置文件, 需要自行配置alias/authors/description等信息, 用于展示
├── README.md # 扩展说明文档, 可以在扩展管理中查看
├── database
│ └── migrations # 数据库迁移文件, 与laravel的迁移文件一致
├── public
│ └── extensions # 扩展前端文件, 会发布到 public/extensions 目录下
│ └── slowlyo
│ └── banner
└── src
├── BannerServiceProvider.php # 扩展服务提供者
└── Http
├── routes.php # 扩展路由
├── Middleware # 扩展中间件
└── Controllers # 扩展控制器
└── BannerController.php</code></pre>
<p><br></p>
<h2><strong>配置</strong></h2>
<h3><strong>logo</strong></h3>
<p>在插件根目录下添加 <code>logo.png</code> 文件,用于在扩展管理中展示。</p>
<h3><strong>文档</strong></h3>
<p>根目录的 <code>README.md</code> 文件, 会在扩展管理中展示。</p>
<h3><strong>composer.json</strong></h3>
<table>
<thead>
<tr>
<th>字段</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>alias</td>
<td>扩展名称(在扩展管理中以这个为主)</td>
</tr>
<tr>
<td>authors</td>
<td>作者信息</td>
</tr>
<tr>
<td>description</td>
<td>描述信息</td>
</tr>
<tr>
<td>version</td>
<td>版本号</td>
</tr>
<tr>
<td>homepage</td>
<td>扩展主页</td>
</tr>
</tbody>
</table>
<p><br></p>
<h2><strong>功能开发</strong></h2>
<h3><strong>路由</strong></h3>
<p>你可以在 <code>extensions/扩展名/src/Http/routes.php</code> 文件中定义扩展的路由。
> 注意避免重复</p>
<h3><strong>菜单</strong></h3>
<p>在<code>src/BannerServiceProvider.php</code> 中添加 <code>$menu</code> 属性:</p>
<pre><code class="language-php">protected $menu = [
[
'parent' =&gt; '',
'title' =&gt; '轮播',
'url' =&gt; '/banner',
'url_type' =&gt; '1',
'icon' =&gt; 'fa fa-users',
],
[
'parent' =&gt; '轮播', // 此处父级菜单根据 title 查找
'title' =&gt; '子菜单',
'url' =&gt; '/banner/child',
'url_type' =&gt; '1',
'icon' =&gt; 'fa fa-users',
],
];</code></pre>
<h3><strong>语言包</strong></h3>
<p>在扩展目录下创建 <code>lang</code> 目录, 逻辑与laravel的语言包一致, 例如:</p>
<pre><code> ├── lang
│ ├── zh-CN
│ │ └── banner.php
│ └── en
│ └── banner.php</code></pre>
<p>在控制器中可以通过下面的方法访问语言包内容,关于多语言的更多用法可以参考 laravel 官方文档</p>
<pre><code class="language-php">use Slowlyo\Banner\BannerServiceProvider;
BannerServiceProvider::trans('title');</code></pre>
<h3><strong>前端</strong></h3>
<p>你可以在服务提供者中使用 <code>Admin::js()</code> 方法来动态加载你的前端文件 [<code>register()</code> / <code>init()</code>]</p>
<h3><strong>中间件</strong></h3>
<p>在<code>src/BannerServiceProvider.php</code> 中添加 <code>$middleware</code> 属性:</p>
<pre><code class="language-php">protected $middleware = [
LogOperation::class,
// ...
];</code></pre>
<h3><strong>扩展配置</strong></h3>
<p>在<code>src/BannerServiceProvider.php</code> 中有以下方法, 依葫芦画瓢即可:</p>
<pre><code class="language-php">public function settingForm()
{
return $this-&gt;baseSettingForm()-&gt;body([
TextControl::make()-&gt;name('value')-&gt;label('Value')-&gt;required(true),
// 继续添加你的配置项
]);
}</code></pre>
<p>你可以使用 <code>setting</code> 方法来获取配置项的值:</p>
<pre><code class="language-php">use Slowlyo\Banner\BannerServiceProvider;
// 读取配置参数
$except = BannerServiceProvider::setting('except');
// 支持多级配置
$except = BannerServiceProvider::setting('except.value');</code></pre>
<h3><strong>数据库迁移</strong></h3>
<p>在 <code>extensions/扩展名/database/migrations</code> 目录下创建迁移文件</p>
<p>扩展启用时会自动执行迁移文件, 卸载时会自动回滚</p>
<h3><strong>其他</strong></h3>
<p>基础的服务提供者中提供了 <code>customInitBefore</code> 和 <code>customInitAfter</code> 两个方法, 用于扩展的自定义初始化操作</p>
<h3><strong>发布到 Packagist.org</strong></h3>
<p>参考 <a href="https://learnku.com/docs/composer/2018">Packagist 中文文档</a></p>