> 백엔드 개발 > PHP 튜토리얼 > Laravel5.0学习02 实例进阶

Laravel5.0学习02 实例进阶

WBOY
풀어 주다: 2016-06-23 13:14:16
원래의
976명이 탐색했습니다.

本文以laravel5.0.22为例。

本节以新建一个简单的博客作为实例。

准备工作

数据库配置

.env文件(也可以直接修改config/database.php)

DB_HOST=localhostDB_DATABASE=myblogDB_USERNAME=rootDB_PASSWORD=123456
로그인 후 복사

数据库表:

CREATE TABLE `blog` (                                    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,         `uid` int(11) NOT NULL DEFAULT '0',                    `title` varchar(50) NOT NULL DEFAULT '',               `content` text NOT NULL,                               `flag` tinyint(2) NOT NULL DEFAULT '1',                `create_time` int(11) NOT NULL DEFAULT '0',            `update_time` int(11) NOT NULL DEFAULT '0',            PRIMARY KEY (`id`)                                   ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8  
로그인 후 복사

开始

这里暂时不使用Eloquent ORM,直接使用DB类。

控制器

新建一个控制器:app/Http/Controllers/BlogController.php

<?phpnamespace App\Http\Controllers;use Illuminate\Support\Facades\DB;/** * * @author YJC *         */class BlogController extends Controller{        public function index() {                $list = DB::table('blog')->get();                //需要return        return view('blog.index', ['list' => $list]);    }}
로그인 후 복사

视图

新建一个母版视图:resources/views/blog/layout.blade.php

<!DOCTYPE html><html lang="en"><head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1">    <title>Laravel</title>    <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css"></head><body>        @yield('content')    <!-- Scripts -->    <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>    <script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script></body></html>
로그인 후 복사

新建一个普通视图:resources/views/blog/index.blade.php

@extends('blog.layout')@section('content')    @foreach($list as $blog)        <div>          <h1>{{$blog->title}}</h1>          <p>{{$blog->content}}</p>        </div>    @endforeach@endsection
로그인 후 복사

路由

Route::get('blog', 'BlogController@index');
로그인 후 복사

访问

http://localhost/laravel5/public/index.php/blog
로그인 후 복사

即可。

路由技巧

默认的,每新增一个方法,需要写一条路由,比较繁琐。Laravel支持针对一个控制器里所有方法仅写一条路由。需要遵循的规则是:
1) 控制器里方法必须以get、post开头。
2) Route::get()改成Route::controller()。

示例:上面的index方法我们需要改成getIndex,路由这样写:

Route::controller('blog', 'BlogController');
로그인 후 복사

这样,Blog控制器所有的方法都能被路由匹配。例如,有如下方法:

public function getIndex(){}public function getDetail(){}public function postAdd(){}
로그인 후 복사

都可以被匹配。访问的时候直接:

http://localhost/laravel5/public/index.php/blog/indexhttp://localhost/laravel5/public/index.php/blog/detail/2http://localhost/laravel5/public/index.php/blog/add
로그인 후 복사

新增文章详情页

控制器新增getDetail()方法:

public function getDetail($id) {    $blog = DB::table('blog')->find($id);        return view('blog.detail', ['blog' => $blog]);}
로그인 후 복사

更改index.blade.php:

@extends('blog.layout')@section('content')    @foreach($list as $blog)        <div>          <h1><a href="{{url('blog/detail/'.$blog->id)}}">{{$blog->title}}</a></h1>          <p>{{$blog->content}}</p>        </div>    @endforeach    @endsection
로그인 후 복사

新增文章详情试图页detail.blade.php:

@extends('blog.layout')@section('content')    <div class="jumbotron">      <h1>{{$blog->title}}</h1>      <p>{{$blog->content}}</p>    </div>@endsection
로그인 후 복사

更改路由:

//对应blog/indexRoute::get('blog', 'BlogController@index'); //对应blog里任何方法,注意方法要加get或者postRoute::controller('blog', 'BlogController');
로그인 후 복사

使用Eloquent ORM

上面我们一直用的是DB类。接下来我们将使用Eloquent ORM代替DB类。

Laravel 的 Eloquent ORM 提供了更优雅的ActiveRecord 实现来和数据库的互动。 每个数据库表对应一个模型文件。

模型(Model)

在app下新建Blog.php:

<?phpnamespace App;use Illuminate\Database\Eloquent\Model;/**  * @author YJC *  */class Blog extends Model{        //指定表名,不指定系统会默认自动对应名称为「类名称的小写复数形态」的数据库表    protected $table = 'blog';        //指定主键,默认就是id    protected $primaryKey = 'id';        //默认情况下,在数据库表里需要有 updated_at 和 created_at 两个字段。如果您不想设定或自动更新这两个字段,则将类里的 $timestamps 属性设为 false即可    public $timestamps = false;    }
로그인 후 복사

提示:所有DB类里查询构造器里的方法,查询 Eloquent 模型时也可以使用。

控制器里使用模型

复制BlogController.php为BlogController.php.bak,清空原BlogController.php里面内容,改为如下内容:

<?phpnamespace App\Http\Controllers;//需要use模型use App\Blog;/** * * @author YJC *         */class BlogController extends Controller{        public function index() {                $list = Blog::all();                return view('blog.index', ['list' => $list]);    }        public function getDetail($id) {        $blog = Blog::find($id);                return view('blog.detail', ['blog' => $blog]);    }}
로그인 후 복사

Eloquent ORM提供了很多易用的方法来操作数据库。例如:

在Blog.php模型文件里,我们可以使用以下查询方法(Eloquent ORM同时支持$this和静态方式调用):

//取出所有记录,all()得出的是对象集合,可以遍历$this->all()->toArray();//根据主键取出一条数据$one = $this->find('2');return array(  $one->id,  $one->title,  $one->content,);//查找id=2的第一条数据$this->where('id', 2)->first()->toArray();//查找id>0的所有数据$this->where('id', '>', '0')->get()->toArray();//查找id>0的所有数据,降序排列$this->where('id', '>', '0')->orderBy('id', 'desc')->get()->toArray();//查找id>0的所有数据,降序排列,计数$this->where('id', '>', '0')->orderBy('id', 'desc')->count();//offset,limit$this->where('id', '>', '0')->orderBy($order[0], $order[1])->skip($offset)->take($limit);//等同于$this->where('id', '>', '0')->orderBy($order[0], $order[1])->offset($offset)->limit($limit);
로그인 후 복사

更多操作方法详见:http://www.golaravel.com/laravel/docs/5.0/eloquent/

访问http://localhost/laravel5/public/index.php/blog页面看看吧!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿