超简单的Laravel新手入门教程

Until Next Time, Goodbye!

此课程是收费课程,请先购买或加入会员后再访问。

recap 一下

回顾一下 超简单的laravel新手入门教程,到底都做了哪些内容。你和我一起实现了一个真正的Web App,虽然局部的功能还是可以进一步增强。

时区

如果你的项目中,所有的时间都出现问题,可能少了8个小时或者其他情况,那么你需要去config/app.php中,设置一下时区,问题就解决了。

'timezone' => 'PRC',

laravel常用命令

laravel的命令有挺多的,不过常用的也就是那么几条,我们这次课程也都基本用到了。

常用的命令和意义我都列出来了,如果记不住,可以将下面的表格截图保存一份,照着多打个几次,慢慢就都记住了。

命令 意义
php artisan make:controller IssuesController 新建控制器
php artisan make:controller IssuesController -r 新建控制器并自动生成对应 RESTful风格路由相关CURD方法
php artisan make:migration create_issues_table --create=issues 新建一个迁移文件
php artisan migrate 运行迁移,将迁移文件的内容写入数据库中
php artisan migrate:rollback 回滚上一次迁移的内容
php artisan make:model Models/Issue 新建模型
php artisan make:model Models/Issue -m 同时生成模型和对应的迁移文件
php artisan tinker 使用命令行来调试Laravel、操作模型等
php artisan route:list 打印出所有的路由

控制器

作用就是整个程序的逻辑部分,可以调用模型做一些数据处理,还可以显示模板,发送数据到模板,跳转等等。
如果需要发送多个数据到模板,那么可以使用compact函数来简化代码。

模型

模型一般都放在App\Models中。初学模型,暂时也不用太深入,知道我们是使用模型来操作数据库的就好。 目前需要掌握的也只有定义 白名单关联。我们实现了issuescomments一对多关联,comments表中一定要有issue_id来做对应。模型的关联除了咱们这次课用到的一对多外,还有一对一多对多,这些我会在后续的课程再跟大家介绍。

这里还是用 php artisan tinker来看一下这两个例子。

//通过$issue,查询对应的所有comments。
$issue = Issue::find(13)
$issue->comments
//通过comment,查询所属的issue。
$comment = Comment::find(1)
$comment->issue

除此外也可以在模型中自定义一些方法来调用。

迁移

数据库中,有一个migrations表,这里记录的是所有已经跑过的迁移列表,如果这里已经有记录了,那你再跑php artisan migrate,他是不会重复执行的。换句话说,就是只会运行之前从没有跑过的迁移文件。

如果你觉得迁移用的不习惯,觉得直接动手使用sequal pro或者navicat这类软件建表更方便,那其实也完全没有任何问题的,laravel一样可以用的好好的。

布局模板

再来看模板部分,将页面相同的公共部分,抽离出来,放在layout/app.blade.php,并且加上@yield('content')

其他的页面

@extends('layouts.app')
@section('content')
    <!-- 不同的部分 -->
@endsection

这样就简简单单的实现完成了。

子视图模板

在首页里,我们使用 子视图模板,现在来说一下为什么要使用这么个东东?
其实最主要的作用也是为了处理一些重复的页面片段。另一个是可以分离出去一部分页面,让页面整体结构更清晰

实践子视图

我这么说,你可能还是不明白,那么我们来实际操作一下。
观察welcome/_issue_list.blade.phpissues/index.blade.php这两个文件,你会发现foreach部分的代码几乎一模一样的。

那么这里就可以使用子视图模板来处理了,对于这种公共的片段,我们一般会在views里面建一个shared文件夹,表示他是公共的,然后将welcome/_issue_list.blade.php移动进去。

再到 issues/index.blade.php中 ,将 {{ $issues->links() }} 拿到页面最下面,然后用将 整个foreach用这一行代替

@include('shared._issue_list')
{{ $issues->links() }}

welcome/index.blade.php中,也稍微调整下路径@include('shared._issue_list')
再来访问,所有的功能都可以正常使用,这样就实现了 Don't Repeat Yourself

修复评论数量

还有一个要注意的是,上一集我们添加了评论功能,但是首页和活动页面,评论的数量我们忘记处理了。现在就顺便来修复下这个问题。

shared/_issue_list.blade.php中,将评论数量部分改为

<a href="{{route('issues.show', $issue->id)}}">{{$issue->comments->count()}}</a>

csrf

csrf是一种常见的安全攻击,在这里两句话说不清楚,有兴趣的同学可以自行了解一下。
对于我们初学者来说,只要记得在所有的表单中,都加上这一段代码就好

<form>
    {{ csrf_field() }}
</form>

路由

路由是laravel学习的重中之重了,初学者觉得最困难的也是这个地方。你需要知道的是,路由就是为了定义 请求地址控制器方法的对应关系的。

restful 与 resource

Verb URI Action Route Name 作用
GET /issues index issues.index 列表显示所有的issues
GET /issues/create create issues.create 显示新增issue的表单
POST /issues store issues.store 真正执行新增操作,插入数据库
GET /issues/{issue} show issues.show 显示一条issue
GET /issues/{issue}/edit edit issues.edit 显示编辑issue的表单
PUT/PATCH /issues/{issue} update issues.update 真正执行更新操作,修改数据库
DELETE /issues/{issue} destory issues.destroy 删除issue

先来回顾一下resource路由,如果你需要对数据库的一个资源做curd,那就可以直接使用resource路由

需要注意的是uri部分,这里有很多路径是一模一样的,这就是restful的规范了,例如issues.show issues.update issues.destroy,他们三个的路径就是完全一模一样。传统的一些框架,是只能支持get post的,对于这样的路径地址就无法区分了。

在laravel,可以使用不同的动词,虽然都是相同的路径,issues.show 使用getissues.update使用putissues.destroy使用delete。这样就可以实现相同的访问地址,对应控制器中的不同方法。但是除了浏览器默认支持的getpost外,其他请求不要忘记使用method_field来伪造。

参数

路由中的issues.show的对应的uri包含了这样一个有大括号的路径,/issues/{issue},那么超链接那里就可以写{{route('issues.show', 10)}},这个10,就会替换掉{issue},生成的路径也就是/issues/10

除此外,在控制器的方法中,直接可以就可以使用这个$id,也就是传过来的10,而不用像其他框架那样要用$_GET['id']来取值了。

function show($id) {
    return $id;
}

顺序

路由的顺序是非常重要了,一定要记得是从上向下执行的。如果resource路由提供的curd方法,依然不能满足项目需求,往往还会自定义一些新的方法,这时一定要写在resource路由的上方,这个我们后期项目中碰到,到时再细说。

api.php

routes文件夹中,除了web.php外,还有个api.php,这个是做接口使用的。区别是会去掉session cookie等相关中间件,路径上会自动添加/api前缀。这个目前也暂时不需要了解太多。后面的项目我们碰到做接口再细说了。

单复数

laravel中对单复数要求的非常严格,有的地方是单数有的是复数,初学者很容易被搞晕。这里我做了个统计表,一看便知。

控制器的命名是复数
模型的命名是单数,但数据库中的表都是复数形式。
资源路由也是复数,对应的uri,一般也是复数
查询的多条数据,是复数单条数据就是单数了。
模型的关联中,has_many,因为有很多,是复数belongs_to,只属于某一个,所以是单数了。

命令 意义
控制器 复数
模型 单数
数据库中的表 复数
资源路由 复数
uri 复数
多条数据 复数
单条数据 单数
has_many 复数
belongs_to 单数

下一步要学习的内容

  1. 用户管理功能,也就是 loginsignup,还有验证码,发送邮件找回密码功能。
  2. 再看这里的删除编辑按钮也需要加上一定的权限控制。
  3. 评论提交过程目前会全页面刷新,可以通过 ajax 的形式来达成不刷新,不闪烁的效果。
  4. 表单提交对内容错误,例如必填字段为空,email 格式不对,没有基本的检查报错,这个属于 laravelform validation 相关的内容。
  5. 项目目前也还运行在本地开发环境,未来需要把应用部署到像阿里云这样的服务器上面,并且绑定域名。

我会在后续的「Laravel技巧库」中再来跟你分享这些进阶内容。
好了,希望你看这套课程的时候就像我录制这套课程一样开心。
Cheers and until next time, Goodbye!


现在就注册ITFun.tv会员
持续关注IT界最新技术,随时更新相关课程。在线学习IT课程或直接报名参加线下武汉PHP、Web前端培训。

仅仅30秒钟就可以简单注册

会员注册(免费)
×