來源:互聯網
上載者:User
關鍵字
php架構laravel
laravel入門教程
Page 和評論將使用 Eloquent 提供的“一對多關聯性”。最終,我們將得到一個個人部落格系統的雛形,並布置一個大作業,供大家實戰練習。
1. 初識 Eloquent
Laravel Eloquent ORM 是 Laravel 中非常重要的部分,也是 Laravel 能如此流行的原因之一。中文文檔在:
1. http://laravel-china.org/docs/5.0/eloquent
2. http://www.golaravel.com/laravel/docs/5.0/eloquent/
在前面的教程中已經建立好的 learnlaravel5/app/Page.php 就是一個 Eloquent Model 類:
<?php namespace App;use Illuminate\Database\Eloquent\Model;class Page extends Model { //}
若想進一步瞭解 Eloquent,推薦閱讀系列文章:深入理解 Laravel Eloquent
2. 建立 Comment 模型
首先我們要建立一張表來儲存 Comment,命令列運行:
代碼如下:
php artisan make:model Comment
成功以後,修改 migration 檔案 learnlaravel5/database/migrations/***_create_comments_table.php 的相應位置為:
Schema::create('comments', function(Blueprint $table){ $table->increments('id'); $table->string('nickname'); $table->string('email')->nullable(); $table->string('website')->nullable(); $table->text('content')->nullable(); $table->integer('page_id'); $table->timestamps();});
之後運行:
代碼如下:
php artisan migrate
去資料庫裡瞧瞧,comments 表已經躺在那兒啦。
3. 建立“一對多關聯性”
修改 Page 模型:
<?php namespace App;use Illuminate\Database\Eloquent\Model;class Page extends Model { public function hasManyComments() { return $this->hasMany('App\Comment', 'page_id', 'id'); }}
搞定啦~ Eloquent 中模型間關係就是這麼簡單。
模型間關係中文文檔:http://laravel-china.org/docs/5.0/eloquent#relationships
4. 前台提交功能
修改 Comment 模型:
<?php namespace App;use Illuminate\Database\Eloquent\Model;class Comment extends Model { protected $fillable = ['nickname', 'email', 'website', 'content', 'page_id'];}
增加一行路由:
代碼如下:
Route::post('comment/store', 'CommentsController@store');
運行以下命令建立 CommentsController 控制器:
代碼如下:
php artisan make:controller CommentsController
修改 CommentsController:
<?php namespace App\Http\Controllers;use App\Http\Requests;use App\Http\Controllers\Controller;use Illuminate\Http\Request;use Redirect, Input;use App\Comment;class CommentsController extends Controller { public function store() { if (Comment::create(Input::all())) { return Redirect::back(); } else { return Redirect::back()->withInput()->withErrors('評論發表失敗!'); } }}
修改視圖 learnlaravel5/resources/views/pages/show.blade.php:
@extends('_layouts.default')@section('content') ⬅️返回首頁
{{ $page->title }}
{{ $page->updated_at }} {{ $page->body }}
@if (count($errors) > 0) Whoops! There were some problems with your input.
@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
@endif @foreach ($page->hasManyComments as $comment) nickname }}"> @if ($comment->website) website }}">
{{ $comment->nickname }}
@else
{{ $comment->nickname }}
@endif
{{ $comment->created_at }}
{{ $comment->content }}
回複 @endforeach @endsection
前台評論功能完成。
查看效果:
5. 後台管理功能
修改基礎視圖 learnlaravel5/resources/views/app.blade.php 為:
Laravel Toggle Navigation Learn Laravel 5
@if (Auth::guest())
- Login
- Register
@else
- {{ Auth::user()->name }}
@endif
@yield('content')
修改後台路由群組(增加了一行):
Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'middleware' => 'auth'], function(){ Route::get('/', 'AdminHomeComtroller@index'); Route::resource('pages', 'PagesController'); Route::resource('comments', 'CommentsController');});
建立 Admin\CommentsController :
代碼如下:
php artisan make:controller Admin/CommentsController
Admin/CommentsController 要有 查看所有、查看單個、POST更改、刪除四個介面:
<?php namespace App\Http\Controllers\Admin;use App\Http\Requests;use App\Http\Controllers\Controller;use Illuminate\Http\Request;use App\Comment;use Redirect, Input;class CommentsController extends Controller { public function index() { return view('admin.comments.index')->withComments(Comment::all()); } public function edit($id) { return view('admin.comments.edit')->withComment(Comment::find($id)); } public function update(Request $request, $id) { $this->validate($request, [ 'nickname' => 'required', 'content' => 'required', ]); if (Comment::where('id', $id)->update(Input::except(['_method', '_token']))) { return Redirect::to('admin/comments'); } else { return Redirect::back()->withInput()->withErrors('更新失敗!'); } } public function destroy($id) { $comment = Comment::find($id); $comment->delete(); return Redirect::to('admin/comments'); }}
接下來建立兩個視圖:
learnlaravel5/resources/views/admin/comments/index.blade.php:
@extends('app')@section('content') 管理評論
Content |
User |
Page |
編輯 |
刪除 |
@foreach ($comments as $comment)
{{ $comment->content }} |
@if ($comment->website) website }}"> {{ $comment->nickname }} @else {{ $comment->nickname }} @endif {{ $comment->email }} |
page_id) }}" target="_blank"> {{ App\Page::find($comment->page_id)->title }} |
id.'/edit') }}" class="btn btn-success">編輯 |
|
@endforeach
@endsection
learnlaravel5/resources/views/admin/comments/edit.blade.php:
@extends('app')@section('content') 編輯評論 @if (count($errors) > 0) Whoops! There were some problems with your input.
@foreach ($errors->all() as $error)
- {{ $error }}
@endforeach
@endif @endsection
後台管理功能完成,查看效果:
6. 大作業
依賴於 Page 的評論功能已經全部完成,個人部落格系統雛形誕生。在本系列教程的最後,布置一個大作業:構建出 Article 的前後台,並且加上 Article 與 Comment 的一對多關聯性,加入評論和評論管理功能。在做這個大作業的過程中,你將會反覆地回頭去看前面的教程,反覆地閱讀中文文檔,會仔細閱讀My Code,等你完成大作業的時候,Laravel 5 就真正入門啦~~
以上所述就是本文的全部內容了,希望大家能夠喜歡。