Laravel 5 架構入門(四)完結篇_PHP

來源:互聯網
上載者: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 }}
    • Logout
  • @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')          管理評論        
  @foreach ($comments as $comment) 
    @endforeach 
  
Content User Page 編輯 刪除
{{ $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">編輯
@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 就真正入門啦~~

以上所述就是本文的全部內容了,希望大家能夠喜歡。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.