数据库:

建表为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>&nbsp;</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

 

posted on 2016-03-12 23:10  小虾ff  阅读(350)  评论(0编辑  收藏  举报