博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Laravel5.0学习--02 实例进阶
阅读量:6515 次
发布时间:2019-06-24

本文共 9397 字,大约阅读时间需要 31 分钟。

本文以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

get(); //需要return return view('blog.index', ['list' => $list]); }}

视图

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

    
Laravel
@yield('content')

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

@extends('blog.layout')@section('content')    @foreach($list as $blog)        

{
{$blog->title}}

{

{$blog->content}}

@endforeach@endsection

路由

基础路由:

Route::get('blog', 'BlogController@index');Route::get('blog/info', 'BlogController@info'); //get请求Route::post('blog/info', 'BlogController@info'); //post请求Route::any('blog/info', 'BlogController@info'); //'GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE'请求均可Route::match(['get', 'post'], 'blog/info', 'BlogController@info'); //'get', 'post'请求Route::get('blog', ['uses' => 'BlogController@index']);Route::get('blog/info/{id}', ['uses' => 'BlogController@info'])->where('id', '[0-9]+'); //匹配正则Route::get('blog/tag/{name}', ['uses' => 'BlogController@tag'])->where('name', '\w+');

访问

http://localhost/laravel5/public/index.php/blog

即可。

隐式控制器路由

注意:laravel5.2已废弃该方法。

默认的,每新增一个方法,需要写一条路由,比较繁琐。Laravel支持针对一个控制器里所有方法仅写一条路由。需要遵循的规则是:

1) 方法的名称应由它们所响应的 HTTP 动词作为开头,紧跟着首字母大写的 URI 所组成:控制器里方法必须以getpost开头
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

路由组:

Route::controllers([    'blog' => 'BlogController',    'user' => 'UserController']);

资源控制器路由

资源控制器会创建多个路由,用来处理各式各样和相片资源相关的的 RESTful 行为。例如:

Route::resource('photos', 'PhotosController');

该路由会根据HTTP动作及路径自动对应方法名:

动词          路径          行为(方法)      路由名称GET         /photos                 index       photos.indexGET         /photos/create          create      photos.createPOST        /photos                 store       photos.storeGET         /photos/{photo}         show        photos.showGET         /photos/{photo}/edit    edit        photos.editPUT/PATCH   /photos/{photo}         update      photos.updateDELETE      /photos/{photo}         destroy     photos.destroy

声明资源路由时,你可以指定让此路由仅处理一部分的行为:

Route::resource('photos', 'PhotosController',                ['only' => ['index', 'show']]);Route::resource('photos', 'PhotosController',                ['except' => ['create', 'store', 'update', 'destroy']]);

路由组

Route::group(['prefix'=>'admin','middleware'=>'auth'],function(){    Route::any('/','backend\HomeController@index');    Route::resource('home', 'backend\HomeController');    Route::resource('cate','backend\CateController');    Route::controllers([        'system'=>'backend\SystemController',        'upload'=>'backend\UploadFileController'    ]);});

该路由组前缀是admin,及url里admin开头的都会调用该路由组。使用了中间件auth进行验证身份。

新增文章详情页

控制器新增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)        

{
{$blog->title}}

{

{$blog->content}}

@endforeach @endsection

新增文章详情视图页blog/detail.blade.php:

@extends('blog.layout')@section('content')    

{
{$blog->title}}

{

{$blog->content}}

@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:

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

控制器里使用模型

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

$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页面看看吧!

新增博客

建立新视图:blog/add.blade.php:

@extends('blog.layout')@section('content')    
新增博客
@if (count($errors) > 0)
输入不正确! 输入的格式不正确!
    @foreach ($errors->all() as $error)
  • { { $error }}
  • @endforeach
@endif
@endsection

在首页blog/layout.blade.php新增一个新增按钮:

    
Laravel
@yield('content')

控制器新增:

/*** 显示新增页面*/public function getAdd() {    return view('blog.add');}/*** 执行新增动作*/public function postAdd(Request $request) {    //执行表单验证 http://laravel-china.org/docs/5.0/validation    $this->validate($request,  [        'title' => 'required|max:255',        'content' => 'required',    ]);            //如何获取post过来的title和content等字段信息?        //方法一:使用传统方法    // $data = $_POST;        //方法二:通过 Facade Request。必须导入 Illuminate\Support\Facades\Request    // $title = \Illuminate\Support\Facades\Request::input('title');        //方法三:依赖注入,需导入Illuminate\Http\Request    // $data = $request->all();    // $title = $request->input('title');    //或者:    // $title = $request->title;            //方法四:使用Facade Input。必须导入 Illuminate\Support\Facades\Input    // $data = Input::get();    $blog = new Blog;    $blog->title = Input::get('title');    $blog->content = Input::get('content');    $blog->uid = 1;    //保存数据    if ($blog->save()) {        //重定向,需要先导入Illuminate\Support\Facades\Redirect        return Redirect::to('blog');    } else {        return Redirect::back()->withInput()->withErrors('保存失败!');    }}

点击新增按钮,就可以新增一篇博客了!

在上面代码里面,演示了多种途径获得post过来的数据,大家可以一一尝试。

小技巧:可以使用dd()var_dump()方法打印。

输出json

1、建立 JSON 响应

json 方法会自动将响应头的 Content-Type 配置为 application/json:

return response()->json(['name' => 'Abigail', 'state' => 'CA']);

2、建立 JSONP 响应#

return response()->json(['name' => 'Abigail', 'state' => 'CA'])                 ->setCallback($request->input('callback'));

这里用到了Laravel的下列知识点:

  1. 表单验证:http://laravel-china.org/docs/5.0/validation
  2. 请求:http://laravel-china.org/docs/5.0/requests
  3. Facades:http://laravel-china.org/docs/5.0/facades
  4. 响应http://laravel-china.org/docs/5.0/responses

辅助工具

给IDE添加智能提示

Laravel里很多类没有提示,如Route类。 扩展包能让你的 IDE ( PHPStorm, Sublime ) 实现自动完成、代码智能提示和代码跟踪等功能,大大提高你的开发效率。

安装

1)使用 Composer 安装该扩展包:

composer require barryvdh/laravel-ide-helper

2)安装完成后,在 config/app.php 添加以下内容到 providers 数组。

Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,

3)接下来运行以下命令生成代码对应文档:

php artisan ide-helper:generate

由于使用此扩展包会生成相应的代码结构文件, 这些文件可能只有当前的开发者的 IDE 需要, 因此需要添加对应配置到.gitignore 文件中:

.idea_ide_helper.php

到此,此拓展包即安装成功。

页面调试工具栏

用于直观的显示调试及错误信息,提高开发效率。

安装

1)使用 Composer 安装该扩展包:

composer require barryvdh/laravel-debugbar

2)安装完成后,修改 config/app.php 在 providers 数组内追加 Debugbar 的 Provider

'providers' => [    Barryvdh\Debugbar\ServiceProvider::class,],

同时在 aliases 数组内追加如下内容

'aliases' => [    'Debugbar' => Barryvdh\Debugbar\Facade::class,]

3)接下来运行以下命令生成此扩展包的配置文件 config/debugbar.php:

php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"

打开 config/debugbar.php,将 enabled 的值设置为:

'enabled' => env('APP_DEBUG', false),

修改完以后, Debugbar 分析器的启动状态将由 .env文件中 APP_DEBUG 值决定。

页面刷新后, 看到下图即表示运行成功。

更多:

summerblue/laravel-package-top-100:
https://github.com/summerblue/laravel-package-top-100

转载于:https://www.cnblogs.com/52fhy/p/5277622.html

你可能感兴趣的文章
FLIF:自由的无损图像格式
查看>>
《计算机系统:核心概念及软硬件实现(原书第4版)》——3.7 总结
查看>>
Google开源Inception-ResNet-v2,提升图像分类水准
查看>>
《我的视频我做主:Premiere Pro CS5实战精粹》——1.4 Adobe Premiere Pro CS5介绍
查看>>
Opera 出售细节曝光:昆仑出资1.68亿美元
查看>>
CentOS 5.3 下快速安装配置 PPTP ××× 服务器
查看>>
产品经理学习总结之技术和设计篇
查看>>
vue之组件认知
查看>>
23种设计模式(15):备忘录模式
查看>>
java基础学习总结——IO流
查看>>
iOS获取APP ipa 包以及资源文件
查看>>
类加载器总结
查看>>
Python WEB开发环境搭建及配置一之Centos 6.4
查看>>
IOS TCP通讯
查看>>
开博纪念
查看>>
linux关机和重启命令
查看>>
CPU存储电路之寄存器——《30天自制操作系统》笔记
查看>>
我的友情链接
查看>>
两款实现一键安装WordPress的程序
查看>>
淘宝评论关键词提取方案
查看>>