# 应用入门开发教程
以一个博客管理的后台增删改查页面为例,完成博客的管理。
# 数据库迁移文件
在数据库迁移目录增加数据库迁移文件,内容如下
文件路径:database/migrations/2021_01_12_000000_create_blog.php
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
class CreateBlog extends Migration
{
public function up()
{
Schema::create('blog', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->string('title', 200)->nullable()->comment('标题');
$table->string('cover', 200)->nullable()->comment('封面');
$table->string('summary', 200)->nullable()->comment('摘要');
$table->text('content')->nullable()->comment('内容');
});
}
public function down()
{
// 数据库回滚是比较危险的操作,推荐使用人工代替
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
完成,在命令行运行迁移文件脚本
php artisan migrate
1
执行成功会提示 Migrated: 2021_01_12_000000_create_blog
# 增加路由和菜单导航
增加后台管理控制器路由( 文件 app/Admin/routes.php
)
<?php
Route::group(
[
'prefix' => env('ADMIN_PATH', '/admin/'),
'middleware' => ['admin.bootstrap', 'admin.auth'],
'namespace' => '\App\Admin\Controller',
], function () {
Route::match(['get', 'post'], '', 'IndexController@index');
// 增加路由开始
Route::match(['get', 'post'], 'blog', 'BlogController@index');
Route::match(['get', 'post'], 'blog/add', 'BlogController@add');
Route::match(['get', 'post'], 'blog/edit', 'BlogController@edit');
Route::match(['get', 'post'], 'blog/delete', 'BlogController@delete');
Route::match(['get', 'post'], 'blog/show', 'BlogController@show');
// 增加路由结束
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
增加导航菜单( 文件 app/Admin/Core/ModuleServiceProvider.php
)
// ...
public function boot(Dispatcher $events)
{
AdminMenu::register(function () {
return [
[
'title' => '系统概况',
'icon' => 'home',
'sort' => 50,
'url' => '\App\Admin\Controller\IndexController@index',
],
// 增加导航开始
[
'title' => '博客管理',
'icon' => 'list',
'sort' => 150,
'url' => '\App\Admin\Controller\BlogController@index',
]
// 增加导航结束
];
});
}
// ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 编写CRUD逻辑
创建博客增删改查页面,实现逻辑(文件 app/Admin/Controller/BlogController.php
)
<?php
namespace App\Admin\Controller;
use Illuminate\Routing\Controller;
use ModStart\Admin\Concern\HasAdminCRUD;
use ModStart\Detail\Detail;
use ModStart\Form\Form;
use ModStart\Grid\Grid;
class BlogController extends Controller
{
use HasAdminCRUD;
public function grid()
{
$grid = Grid::make('blog');
$grid->id('id', 'ID');
$grid->text('title', '标题');
$grid->image('cover', '封面');
$grid->textarea('summary', '摘要');
$grid->richHtml('content', '内容');
$grid->display('created_at', '创建时间');
$this->pageTitle('博客管理');
return $grid;
}
public function form()
{
$form = Form::make('blog');
$form->text('title', '标题');
$form->image('cover', '封面');
$form->textarea('summary', '摘要');
$form->richHtml('content', '内容');
return $form;
}
public function detail()
{
$detail = Detail::make('blog');
$detail->id('id', 'ID');
$detail->display('created_at', '创建时间');
$detail->text('title', '标题');
$detail->image('cover', '封面');
$detail->textarea('summary', '摘要');
$detail->richHtml('content', '内容');
return $detail;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
以上三步,即可实现博客的基础增删改查操作。
grid
方法对应数据的表格
页,参考数据表格来实现列表页的相关功能逻辑。
detail
方法对应数据的详情
页,在列表页操作列的查看
按钮点击进入,参考数据详情来实现详情页的相关功能逻辑。
form
方法对应数据的创建
和编辑
页,参考数据表单来实现数据创建和编辑页的相关功能逻辑。
# 成果预览
# 后台博客管理页面
# 博客增加/编辑页面
# 博客查看页面
# 应用Api接口开发
使用 ModStart 可以很方便的进行接口开发
# 定义接口路由
文件 app/Api/routes.php
// 新增以下路由接口
Route::match(['post'], 'xxxx/paginate', 'XxxController@paginate');
Route::match(['post'], 'xxxx/get', 'XxxController@get');
1
2
3
2
3
# 开发接口逻辑
文件 app/Api/Controller/XxxController.php
<?php
namespace App\Api\Controller;
use Illuminate\Routing\Controller;
use ModStart\Core\Dao\ModelUtil;
use ModStart\Core\Input\InputPackage;
use ModStart\Core\Input\Response;
class XxxController extends Controller
{
public function paginate()
{
$input = InputPackage::buildFromInput();
$page = $input->getPage();
$pageSize = $input->getPageSize();
$option = [];
$paginateData = ModelUtil::paginate('xxx', $page, $pageSize, $option);
return Response::generateSuccessData([
'page' => $page,
'pageSize' => $pageSize,
'total' => $paginateData['total'],
'records' => $paginateData['records'],
]);
}
public function get()
{
$input = InputPackage::buildFromInput();
$id = $input->getInteger('id');
$record = ModelUtil::get('xxx', $id);
return Response::generateSuccessData([
'record' => $record,
]);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35