laravel 5.6初学笔记

http://note.youdao.com/noteshare?id=bf4b701b49dd035564e7145ba2d978b4
框架简介

* laravel文档齐全
* 社区活跃
* 后期维护好,强大的工具
---

下载安装
  • 环境要求,php版本在7以上(要与框架所需一致)
  • 集成环境,建议使用laralgon(适应laravel框架开发)
  • 安装可使用conposer(自行看官方文档),也可在laravel学院下载一键安装包(不用再配置环境和下载安装依赖)
  • 环境配置根目录要指向项目目录中的public
项目目录

- app/Http/Controllers [控制器存放的位置,MVC中的C]
- bootstrap 包含框架启动和自动加载配置的文件(app.php和autoload.php)
- config 包含所有应用程序的配置文件(缓存数据库队列)
- database 包含数据库的迁移和数据填充文件
- public 包含入口和项目静态资源文件(js,cs)
- resources/view 包含了视图和原始的资源文件
- routes 路由入口文件目录
- storage 包含了编译后的模板文件和缓存文件,日志文件
- tests 单元测试目录文件
- vendor 加载的依赖模块
---

路由
  • 概括 将用户的请求转发给相应的程序进行处理,建立程序和url之间的映射。
  • laravel 中的请求方式有:get post put pacth any

    delete
// 基础路由 get
// http://localhost/testGet
Route::get('testGet', function(){
return 'HELLO WORLD';
}); // 基础路由 post
Route::post('testPost', function (){
return 'Hello Post';
}); // 多请求路由 match
// http://localhost/testMatch
Route::match(['get','post'],'testMatch', function (){
return 'Hello match';
}); // 多请求路由 any
// http://localhost/testAny
Route::any('testAny', function(){
return 'Hello any';
}); // 路由参数
// http://localhost/testGetUser/12
/*Route::get('testGetUser/{id}', function ($id){
return 'testGetUserId='.$id;
});*/ /*// 路由参数
// http://localhost/testGetUser/name
Route::get('testGetUser/{name?}', function ($name = 'NULL'){
return 'testGetUserName='.$name;
})->where('name','[A-za-z]+')*/; // 路由参数
// http://localhost/testGetUser/1/name
/*Route::get('testGetUser/{id}/{name?}', function ($id, $name = 'NULL'){
return 'id='.$id.'testGetUserName='.$name;
})->where(['id'=>'[0-9]+','name'=>'[A-za-z]+']);*/ // 路由别名[为整个路由取别名]
// http://localhost/testGetUser/center
Route::get('testGetUser/center',['as' => 'center', function(){
return route('center');
}]); // 路由群组
// http://localhost/member/testAny
Route::group(['prefix' => 'member'], function (){
Route::any('testAny', function(){
return 'Hello member-any';
});
}); // 路由中输出视图
// http://localhost/view
Route::get('view', function (){
return view('welcome');
});

一次访问周期 【流程】

* 入口 public/index.php
* 创建服务器容器(用于管理类依赖和执行依赖注入的工具)
* 发送请求到http内核和consle内核(分别用来处理web请求和
Artisan命令)
* 内核启动载入服务提供者,注册提供者,服务提供者启动lavavel框架中的各种重要组件(例如,数据库,路由,队列,验证器)【最为重要的部分】。
* 请求教友路由器进行分发,并运行路由器制定的中间件。

服务器容器

* 概括:用于管理依赖和执行依赖注入的工具
* 绑定:几乎所有的服务器容器都在服务提供者中完成的

门面

* 概括:门面就是为容器对象提供一个访问方式的类

中间件

* 概括:中间件为过滤进入应用的HTTP请求提供了一套便利的机制。
* 用法:

一,类似于tp框架中的Behavior,或钩子的用法。用于请求的前期验证或后期验证处理。

二,CORS 中间件可以用于,请求方法增加请求头。

三,日志中间件可以记录所有进入站点的请求。

* 中间件组:更为快捷的实现一次分配给路由多个中间件组;指定一个中间键名将相关中间件放到一个组里。
* 中间件参数,中间件可以传递额外的自定义参数。
* 终端中间件,用于请求完成之后的善后操作。

CSRF保护

* 概括:跨站请求伪造,通过伪装成授权用户去访问攻击网站的恶意漏洞。
* lavavel自带CSRF中间件,会自动为应用授权保护的有效用户会话创建一个CSRF令牌,并存在session中,用于验证授权用户和访问用户是否是同一个人。

控制器[MVC中的C]
  • 路由指向控制器[同理:其它请求方式做相应更改]
// http://localhost/testController
Route::get('testController', 'TestController@testController');
  • 路由取别名[可以通过route('testInfo'),获取路由地址]
Route::get('testController',[
'uses' => 'TestController@testController',
'as' => 'testInfo',
]);
  • 参数绑定
// [路由文件]http://localhost/testController/1
Route::get('testController/{id}',['uses' => 'TestController@testController']);
<?php
/**
* Created by PhpStorm.
* User: admin
* Date: 2018/6/5
* Time: 15:45
*/
namespace App\Http\Controllers; class TestController extends Controller
{
// [控制器文件] TEST
public function testController ($id)
{
return 'id-'.$id;
// return route('testInfo');
// phpinfo();
}
}

// 参数验证

// http://localhost/testController/1
Route::get('testController/{id}',['uses' => 'TestController@testController'])
->where('id', '[0-9]');
视图
  • 位置,resources/views
  • 创建新视图时,按控制器名创建新文件夹
// 新建视图文件testview.php,输出testview php
// 控制器输出 return view('testview');
  • 模板传参
// controller文件
public function testController ($id)
{
return view('test/test',[
'id' => $id
]);
}
  • 视图文件显示
test/test blade
{{$id}}
模型
  • 位置 app根目录
  • 模型文件
<?php
/**
* Created by PhpStorm.
* User: admin
* Date: 2018/6/5
* Time: 17:37
*/
namespace App;
use Illuminate\Database\Eloquent\Model; class Test extends Model
{
public static function getTestInfo () {
return 'THIS IS A GOOD IDEA';
}
}
  • controller 文件
  public function testController ($id)
{
return Test::getTestInfo();
}
数据连接
  • 文件位置 config/database.php vendor/.env
  • 链接数据库
// 路由
Route::get('getUserInfo', ['uses' => 'userController@getUserInfo']);
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB; class userController extends Controller {
public function getUserInfo ()
{
// 返回的bool值
$res['res'] = DB::insert('insert into user(name,age) values(?,?)', ['name2',18]);
// 返回影响行数
$res['changeRes'] = DB::update('update user set age = ? where id = ?', [17,1]);
$res['userData'] = DB::select('select * from user');
// 返回删除的行数
<!--$res['userData'] = DB::delete('delete from user where id = ?', [5]);-->
<!--return $res;-->
// 格式化
dd($res);
}
}
// 输出显示
array:1 [▼
"userData" => array:4 [▼
0 => {#202 ▼
+"id": 1
+"name": "maomao"
+"age": 17
}
1 => {#204 ▼
+"id": 2
+"name": "xinxin"
+"age": 18
}
2 => {#205 ▼
+"id": 3
+"name": "name"
+"age": 18
}
3 => {#206 ▼
+"id": 4
+"name": "name2"
+"age": 18
}
]
]
查询构造器
 // 查询构造器  新增
public function queryBuilder()
{
// 返回的bool值
$res['bool'] = DB::table('user')->insert(
['name' => 'queryBuilder', 'age' => 19],
['name' => 'queryBuilder2', 'age' => 19]
);
// 获取
$res['id'] = DB::table('user')->insertGetId(
['name' => 'queryBuilder', 'age' => 19]
);
var_dump($res);
} // 查询构造器 更新
public function queryBuilder2()
{
// 返回的影响行数
$res['num'] = DB::table('user')
->where('id', 1)
->update(
['name' => 'queryBuilderMao', 'age' => 19]
);
// 更新自增
$res['incrementNum'] = DB::table('user')
->where('id', 1)
->increment('age',1);
// 更新自减
$res['decrementNum'] = DB::table('user')
->where('id', 1)
->decrement('age',1);
// 更新自增自减时修改其它条件信息
$res['decrementNum'] = DB::table('user')
->where('id', 1)
->decrement('age',1,['name' => 'lala']);
var_dump($res);
} // 查询构造器 删除
public function queryBuilder3()
{
// 返回的影响行数
$res['deleteNum'] = DB::table('user')
->where('id', 6)
->delete();
// 区间条件删除
$res['deleteNum2'] = DB::table('user')
->where('id','>=', 5)
->get();
// 清除表信息
$res['truncateNum'] = DB::table('user')
->truncate();
var_dump($res);
} // 查询构造器 查询
public function queryBuilder4()
{
// 第一条
$res['frist'] = DB::table('user')
->orderBy('id', 'desc')
->frist();
// 全部
$res['user'] = DB::table('user')
->get();
// 清除表信息
$res['truncateNum'] = DB::table('user')
->truncate();
var_dump($res);
}
ORM
  • 简介据说时一个优美的activeRecord实现,用来实现数据库的操作
  • 每个数据表对应一个model,用来和数据表的数据交互
<?php
namespace App\Http\Controllers; use App\Student; class StudentController extends Controller
{
public function orm()
{
// 查询 all()
$student = Student::all();
dd($student); // find() 一条
$findData = Student::find(2);
dd($findData); // findOrFail() 根据逐渐查找,没有则抛出异常
$findData = Student::findOrFa (3);
dd($findData); // 查询第一条
$findData = Student::where('id','>', '1')
->orderBy('id', 'desc')
->first();
dd($findData); // 分组
echo '<pre>';
Student::chunk(1,function ($students)
{
var_dump($students);
}); // 聚合函数(count, max, min, avg)
$num = Student::count();
} // 使用模型新增数据
public function orm1()
{
// student模型对象
$student = new Student();
$student ->name = 'name133';
$student ->age = 12;
$bool = $student->save();
dd($bool); $student = Student::find(5);
echo date('Y-m-d H:i:s', $student->created_at); // 使用模型的Create方法新增数据
$addRes = Student::create(
['name'=>'llll','age'=>12]
); // 使用模型的firstOrCreate方法新增数据
$addRes = Student::firstOrCreate(
['name'=>'lll','age'=>12]
); // 使用模型的firstOrNew方法新增数据,通过属性查询用户没有则建立新的实例
$student = Student::firstOrNew(
['name'=>'ll','age'=>12]
);
// 需要保存则自行调用save
$addRes = $student->save();
dd($addRes);
} // 更新
public function orm2()
{
// 返回更新行数
$num = Student::where('id','>',2)
->update(['name'=> 'sb']);
var_dump($num);
} // 删除
public function orm3() {
$students = Student::find(1);
$bool = $students->delete(); // 通过主键删除
$num = Student::destroy(1); $num2 = Student::where('id', '<',12)
->delete(); }
}

laravel 5.6初学笔记的更多相关文章

  1. C++ STL初学笔记

    C++  STL初学笔记 更系统的版本见徐本柱的PPT set 在这儿:http://www.cnblogs.com/pdev/p/4035020.html #include <vector&g ...

  2. Spring 初学笔记

    Spring 初学笔记: https://blog.csdn.net/weixin_35909255/article/category/7470388

  3. csapp网络编程初学笔记

    csapp网络编程初学笔记 客户端-服务器编程模型 每个网络应用都是基于客户端-服务器模型,服务器管理某种资源,并且通过操作来为它的客户提供某种服务 客户端-服务器模型中的基本操作是transacti ...

  4. Python初学笔记之字符串

    一.字符串的定义 字符串是就一堆字符,可以使用""(双引号).''(单引号)来创建. 1 one_str = "定义字符串" 字符串内容中包含引号时,可以使用转 ...

  5. python 初学笔记 (一)

    初学python第一天,希望自己真正了解计算机语言,并且做出成效. 写下学习笔记,记录学习进度,娱乐学习,不断成长. python详细介绍: python是什么?运用到哪里?有哪些在使用它? pyth ...

  6. 从Python到Go:初学笔记

    本文记录了我在学习Go的过程时的一些笔记,主要是比较Python和Go之间的差异并作简单描述,以此使Python程序员对Go语言的特性有简略的了解.初学难免有纰漏,欢迎各位批评指正补充交流,谢谢. 数 ...

  7. SQL 数据库初学笔记一

    做web刚好用得上SQL和php,图书馆借来书,来一个一晚上速成 <SQL必知必会>笔记 通用的语法,相关分类执行程序(DBMS): Apache Open Office Base Ado ...

  8. [Laravel 5 教程学习笔记] 一、Windows下安装Laravel 5

    最近看到一些统计,说是Laravel是目前PHP框架中使用最多的,所以就想来学习下.之前其实也想过学习这个框架,但是每次到第一步安装的时候就卡住了,无奈  .之前用ThinkPHP的时候,下载完放到网 ...

  9. Ror初学笔记

    Ror正在以惊人的速度增长着,特别是在常常光顾JavaEye的时候发现Ror已经在国内有非常好的基础了,当然要凑个热闹尝尝鲜 咯. 眼下国内Ror的中文资料还是非常少的,到网上找找就仅仅有Eiffel ...

随机推荐

  1. Windows Phone8.1系统新特性

    Windows Phone 8.1 beta SDK已经为大家透露了不少WP8.1系统的新特性,不过这些新特性还不能保证在最终的消费者版本中都有所体现,毕竟它还仅是SDK版本.日前,国外媒体WPCen ...

  2. 递归导致的StackOverflow的分析

    递归在多层次遍历时尤为重要,这里我们不讲递归的实现,来谈谈递归的内存占用情况. 如下代码,当我们运行时很简单,StackOverflowException瞬间抛出:这里确实是“瞬间”出错了,线程堆栈溢 ...

  3. Nginx多种负载均衡策略搭建

    背景介绍 上篇介绍了利用Nginx反向代理实现负载均衡,本文详细讲述Nginx下的几种负载均衡策略. 轮询 轮询,顾名思义,就是轮流请求,基于上篇文章的介绍,我们将负载均衡策略聚焦于default.c ...

  4. IOS关于数据加密(主要为登录加密)想总结的

    首先上来就来说一下,IOS常见的几种加密算法  *哈希(散列)函数 : MD5.SHA  *对称加密算法:DES.3DES.AES  *非对称加密算法:RSA 一.哈希(散列)函数  1.MD5 MD ...

  5. Zookeeper详解-概述(一)

    ZooKeeper是一种分布式协调服务,用于管理大型主机.在分布式环境中协调和管理服务是一个复杂的过程.ZooKeeper通过其简单的架构和API解决了这个问题.ZooKeeper允许开发人员专注于核 ...

  6. Java内存区域(运行时数据区域)和内存模型(JMM)

    Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数据分区域存储,强调对内存空间的划分. 而内存模型(Java Memory Model,简称 JMM )是定义了线程和主内存之 ...

  7. 【commons-lang3工具】JAVA脱敏工具

    前言:commons-langbao中有很多方便的工具,无需我们自己去实现,能够节省很多开发时的问题: 1.工具包,引入依赖,jDK8对应的版本如下: <!-- https://mvnrepos ...

  8. 手把手docker部署java应用(初级篇)

    本篇原创发布于 Flex 的个人博客:点击跳转 前言   在没有 docker 前,项目转测试是比较麻烦的一件事.首先会化较长的时间搭建测试环境,然后在测试过程中又经常出现测试说是 bug,开发说无法 ...

  9. hdoj1009 FatMouse' Trade——贪心算法

    贪心思路:按单位猫粮能兑换到的javaBean从大到小将组合进行排序,总是在当前兑换尽可能多的javabeans 问题描述:点击打开链接 hdoj1009 FatMouse's Trade 源代码: ...

  10. 2019年6月份,阿里最新Java高频面试真题汇总,仅供参考(附福利)

    目录 技术一面(23问) 技术二面(3大块) JAVA开发技术面试中可能问到的问题(17问) JAVA方向技术考察点(33快) 项目实战(7大块) 必会知识(48点) 面试小技巧 注意事项 1. 阿里 ...