数据库:
建表为tasks的迁移文件:
php artisan make:migration create_tasks_table --create=tasks
迁移文件在database/migrations中。
自带属性:自增id,时间戳。
使用迁移文件建表:
php artisan migrate
Eloquent Models:
每个表对应一个Models,用于封装所有针对表的操作。
php artisan make:model Task
Models的php文件被放置在/app目录下。名字能够自动对应。
Router:
用于将url与对应的功能关联。也方便中间件的管理。如Web中间件可以拥有session权限以及CSRF保护。
语法事例:
Route::group(['middleware' => 'web'], function () { /** * Show Task Dashboard */ Route::get('/', function () { // }); /** * Add New Task */ Route::post('/task', function (Request $request) { // }); /** * Delete Task */ Route::delete('/task/{task}', function (Task $task) { // }); });
针对post请求,我们可以使用$request代表请求。可以使用自带的验证来判断用户输入是否有效。并且可以将错误信息存入session并重定位回之前页面:
Route::post('/task', function (Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|max:255', ]); if ($validator->fails()) { return redirect('/') ->withInput() ->withErrors($validator); }
$task = new Task;
$task->name = $request->name;
$task->save();
return redirect('/');
});
通过访问$errors即可访问到返回的错误信息。并且$error是全局的,所有view都可以访问。
Blade访问例子:
@foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach
通过创建Model实例可以调用数据库操作。用save()将实例存入数据库。
接下来就是数据库的显示。例子如下:
Route::get('/', function () { $tasks = Task::orderBy('created_at', 'asc')->get(); return view('tasks', [ 'tasks' => $tasks ]); });
通过Model自带的orderBy方法,能够方便的获得结果。将结果数组进行传参可以使用view方法。view方法的第二个参数代表返回给网页的Get Parameters。
页面展示结果示例:
@if (count($tasks) > 0) <div class="panel panel-default"> <div class="panel-heading"> Current Tasks </div> <div class="panel-body"> <table class="table table-striped task-table"> <!-- Table Headings --> <thead> <th>Task</th> <th> </th> </thead> <!-- Table Body --> <tbody> @foreach ($tasks as $task) <tr> <!-- Task Name --> <td class="table-text"> <div>{{ $task->name }}</div> </td> <td> <!-- TODO: Delete Button --> </td> </tr> @endforeach </tbody> </table> </div> </div> @endif
数据删除示例:
<tr> <!-- Task Name --> <td class="table-text"> <div>{{ $task->name }}</div> </td> <!-- Delete Button --> <td> <form action="{{ url('task/'.$task->id) }}" method="POST"> {!! csrf_field() !!} {!! method_field('DELETE') !!} <button type="submit" class="btn btn-danger"> <i class="fa fa-trash"></i> Delete </button> </form> </td> </tr>
因为HTML只有POST和GET两种方法,因此DELETE方法需要{!! method_field('DELETE') !!}命令将delete方法赋给Router。
删除数据Router示例:
Route::delete('/task/{task}', function (Task $task) { $task->delete(); return redirect('/'); });
在这里使用隐式声明,function中会自动将Task中id为{task}的条目取出,并执行删除。
View:
所有视图文件被放置在resources/views/
中,可以在Router中使用方法view('tasks')来访问 resources/views/tasks.blade.php。
我们可以将页面之间共享的视图放在一个单独的模板中,将页面不同的部分填充进去即可,这里使用的是blade模板Blade templating engine。