laravel框架学习笔记
一、laravel的安装
1、composer
作用:主要管理php中的依赖关系(类似于yum源)
可以安装的软件:
curl //主要用到微信开发中
upload //文本操作
excel //表格
mail //邮件
log //日志
laravel //框架
安装:
下载地址:https://getcomposer.org/
没有php解释器,无法运行php命令
yum install php-cli
执行下载命令
解压后为composer.phar,
到该目录下运行命令将composer.phar重命名到/usr/local/bin/下
mv composer.phar /usr/local/bin/ composer并检查是否重命名成功
切换到composer的中国镜像:
composer config -g repo.packagist composer https:
//packagist
.phpcomposer.com
2、安装laravel
1、进入项目目录
cd /usr/local/apache2.4/htdocs/
composer create-project --prefer-dist laravel
/laravel
blog
或者安装自己想要的版本
composer create-project --prefer-dist laravel
/laravel
blog 5.4.*
2、配置Apache:
进入到laracel根目录
cd blog/
chmod 777 -R storage/
打开浏览器输入地址:localhost/blog/public/ 显示Larave欢迎洁面,安装成功!!
二、laravel配置文件
1、环境配置(.env文件)
APP_KEY:环境变量解析(网站的密匙,保证网站的安全)
生成密匙:php artisan key:generate
APP_DEBUG:开发模式(默认为ture,上线需设置为false)
获取配置信息:env('')方法,设置环境配置中未设置的变量env('','')
2、系统配置(config目录下)
读取配置:config('文件名.配置名'),如:config('app.timezone')
修改配置(临时性的,不修改配置文件):config(['文件名.配置名'=>'值']);如:config(['app.timezone'=>'UTC']);
三、php artisan(php的工具匠):在项目根目录下才能执行
本生就是一些php文件,可以在命令行模式下执行这些文件,可以完成创建控制器、创建中间件、生成密匙等。
1、php artisan down:网站下线(页面为views/503.blade.php)
2、php artisan up:网站上线
3、php artisan route:list:查看路由列表
4、php artisan make:controller 控制器名:新建控制器
四、路由
1、路由类型
Route::get($rul,$callback);
Route::post($rul,$callback);
Route::put($rul,$callback);
Route::patch($rul,$callback);
Route::delete($rul,$callback);
Route::options($rul,$callback);
2、get();
Route::get('login','LoginController@index');
3、post();
Route::post('check','LoginController@check');
受CSRF保护(保护网站不受跨站请求伪造(CSRF)攻击。保护表单安全。)
需在表单内添加{{csrf_field()}}
4、put();
路由中书写:
Route::put('putWeb','LoginController@putweb'); //请求
Route::put('put','LoginController@put'); //处理
控制器书写:
public function putWeb(){
return view('putweb');
} //请求
public function put(Request $request){
dd($request->input());
} //处理
5、路由的三种常见形式:
HTTP请求路由:
Route::get('url信息','处理的逻辑地址或功能代码');
Route::put('url信息','处理的逻辑地址或功能代码');
Route::post('url信息','处理的逻辑地址或功能代码');
Route::delete('url信息','处理的逻辑地址或功能代码');
Resource路由:url和控制器中的7个标准RESTful动作相绑定
Route::resource('url相关信息','控制器名称');
控制器路由:url和控制器中的所有动作(只需要按照指定的规范来编写动作即可)
Route::controller('url相关信息','控制器名称');
6、路由的处理:
(1)把路由的处理交给控制器中的某个动作处理
Route::get('/','IndexController@index')
(2)直接处理路由(使用闭包函数形式处理)
Route::get('/',function(){
});
(3)路由参数:
Route::get('view/{id}',function($id){
}); //参数必传
Route::get('view/{id?}',function($id=1){
}); //可选参数
7、控制器和路由
(1)为控制器绑定路由时,可以直接使用HTTP请求形式的路由
需要每一个URL绑定到控制器中的某一个动作上
Route::get('/','IndexController@index');
(2)RESTful形式的资源控制器路由(只支持7种路由)
Route::resource('url相关信息','控制器名称');
(3)隐式控制器路由
Route::controller('url相关信息','控制器名称');
访问index,方法名应为getIndex
访问getViewMsg方法,地址为msg/view-msg
8、路由组(以后台管理模块为例)
Route::group(['namespace'=>'Admin','prefix'=>'admin','middleware'=>'adminLogin'],function(){
Route::get('/','IndexController@index');//后台首页
Route::resource('user','UserController');//后台用户管理模块
Route::resource('goods','GoodsController');//后台商品管理模块
});
(注:namespace为命名空间,prefix为路由前缀,middleware为中间件)
9、中间件
简介:中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制。例如,Laravel 内置了一个中间件来验证用户是否经过认证(如登录),如果用户没有经过认证,中间件会将用户重定向到登录页面,而如果用户已经经过认证,中间件就会允许请求继续往前进入下一步操作。
当然,除了认证之外,中间件还可以被用来处理很多其它任务。比如:CORS 中间件可以用于为离开站点的响应添加合适的头(跨域);日志中间件可以记录所有进入站点的请求,从而方便我们构建系统日志系统。
Laravel 框架自带了一些中间件,包括认证、CSRF 保护中间件等等。所有的中间件都位于 app/Http/Middleware
目录下。
创建中间件:php artisan make:middleware CheckToken
在app/Http/MiddLeware目录下新建一个中间件类CheckToken
注册中间件:中间件分三类,分别是全局中间件、中间件组和指定路由中间件;
a、全局中间件:在app/Http/Kernel.php的数组属性$middleware中添加即可。
b、分配中间件到指定路由:首先在app/Http/Kernel.php中添加自己的中间件key,定义后可以使用middleware方法将其分配到路由:
Route::get('/',function(){
//
})->middleware('key');或路由组参数方式。
c、中间件组:通过使用HTTP Kernel提供的$middlewareGroups属性实现。
Route::get('/', function () {
//
})->middleware('web');
Route::group(['middleware' => ['web']], function () {
//
});
默认情况下,RouteServiceProvider
自动将中间件组web
应用到routes/web.php
文件,将中间件组api
应用到routes/api.php
d、中间件参数:中间件可以接收额外的参数。例如:中间件文件中
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
// Redirect...
} return $next($request);
}
路由中书写:
中间件参数可以在定义路由时通过:
分隔中间件名和参数名来指定,多个中间件参数可以通过逗号分隔
Route::put('post/{id}', function ($id) {
//
})->middleware('role:editor');
e、终端中间件:
终端中间件,可以理解为一个善后的后台处理中间件。有时候中间件可能需要在 HTTP 响应发送到浏览器之后做一些工作,比如,Laravel 内置的session
中间件会在响应发送到浏览器之后将 Session 数据写到存储器中,为了实现这个功能,需要定义一个终止中间件并添加terminate
方法到这个中间件:
<?php
namespace Illuminate\Session\Middleware;
use Closure;
class StartSession
{
public function handle($request, Closure $next)
{
return $next($request);
}
public function terminate($request, $response)
{
// 存储session数据...
}
}
terminate
方法将会接收请求和响应作为参数。定义了一个终端中间件之后,还需要将其加入到 app/Http/Kernel.php
文件的全局中间件列表中。
当调用中间件上的 terminate
方法时,Laravel 将会从服务容器中取出一个该中间件的新实例,如果你想要在调用 handle
和 terminate
方法时使用同一个中间件实例,则需要使用容器提供的 singleton
方法以单例的方式将该中间件注册到容器中。关于服务容器我们就会在后面讲到,暂时不深入展开了。
10、请求:
(1)获取地址:
$request->fullUrl();//输出当前url地址
$request->path();//获取URL路由
$request->url();//获取URL地址初参数
$request->is('request');//判断路由是否为request,返回true或falst
(2)获取请求类型:
$request->method();//返回请求类型
$request->isMethod('请求类型');//判断请求是否为特定请求
11、闪存:闪存数据即 Flash Data,它的有效期是到下一个请求为止,主要用在短生命周期的变量传递
(1)控制器方法中写入缓存:
$request->flash();//全部写入闪存
$request->flashOnly();//把谁写入到闪存
$request->flaushExcept();//除了谁写入闪存
或者在返回错误提示的时候存入缓存;
return back()->with('errors','用户名长度有误')->withInput();//全部存入闪存
(2)页面input中添加value="{{old('input的name')}}"
详细:http://www.imooc.com/article/17873?block_id=tuijian_wz
12、文件上传:
(1)获取上传文件信息:
$img=$request->file('input的name');或者
$img=$request->input的name
(2)判断文件是否上传
$request->hasFile('input的name');
(3)把文件移动到指定目录
$ext=$request->file('img')->getClientOriginalExtension();//获取后缀名
$newFile=time().rand().".".$ext//新文件名
$request->file('img')->move('目的地址',$newFile);//移动到指定目录
(4)
(5)
13、cookie
查看:$requset->cookie();//查看所有的cookie
或者\Cookie::get();
设置:\Cookie::queue('key','value',生存时间);
或者
$cookie=cookie('key','value',生存时间);
response('重定向')->cookie($cookie);
(注:laravel框架把所有的cookie进行加密,所以$_COOKIE['name'] != $request->cookie())
14、响应:所有的路由及控制器必须返回某个类型的响应,并发送回用户的浏览器,如果响应数组的话,直接转换成json。
(1)响应字符串
(2)响应数组:转换成json
(3)响应页面:return view('页面')->with(‘传递值’);
(4)文件下载:
return response()->download('文件所在路径');
会报错,没有扩展
xampp:在/opt/lampp/etc/php.ini,找到php_fileinfo.dll并开启
重启apache
(5)文件查看:return response()->file('文件所在路径');
五、数据库迁移(migrate)
1、数据库迁移简介
(1)migrate简介:
方便团队开发,一次更改,团队成员都会影响到
直接使用php代码,而不是使用sql语句来操作数据库
(2)配置数据库账号信息:.env配置文件
(3)数据库迁移命令:php astisan migrate
命令行工具:sublime插件,terminal
(4)删除自带的用户认证模块:php astisan fresh
2、创建数据表
(1)创建数据库文件
文件所在目录:databases/migrations/数据库迁移文件
文件名:年_月_日_时分秒_create_tableName_table.php
创建命令:php artisan make:migration create_name_table
(2)
在up方法中(新增数据表):
Schema::create('数据库名',function(Blueprint $table){
$table->字段类型('字段名字');
如:$table->increments('id');
})
执行数据库迁移命令:php artisan migrate
3、数据库填充
(1)创建模型类
a、一个数据库模型类对应一个数据表
b、目录:app/目录下直接创建
文件名:表名.php(首字母大写)
c、模型类结构:类名 extends Model
(2)数据填充
a、数据填充文件
位置:databases/seeds/
文件名:表名TableSeeder.php
数据填充文件基本结构:类名 extends Seeder
填充文件方法:
public function run(){
DB::table('表名')->delete();//清空原始数据
表名::create([
'字段名'=>'值'
]);
}
b、执行数据填充命令
在databases/seeds/DatabaseSeeder.php文件中调用数据填充命令
在run方法中:$this->call('数据库填充文件类名');
php artisan db:seed
可能会痴线一些问题,会提示一些类不能用
a、引入类的完全命名空间
b、可以使用composer命令:composer dump-autoload
六、数据库操作
1、连接数据库(.env文件):
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
2、执行原声的sql语句
查询:\DB::select('select * from tableName'); // \为使用根命名空间
删除:\DB::delete('delete from tableName where id=XX');
新增:\DB::insert('insert into tableName value()');
修改:\DB::update('update tableName set 字段="值"');
执行一段命令:\DB::statement('create database databaseName');
3、事物机制:(判断执行的sql语句知否执行成功。)
开启事物:\DB::beginTransaction();
事物回滚:\DB::rollback();
食物提交:\DB::commit();
4、连贯操作;
查询:
\DB::table('tableName')->get();//查询所有数据
\DB::table('tableName')->find();//查询一条数据
\DB::table('tableName')->where(''id,'=',3)->first();//查询一条数据
where():
基本的>、<、=、<>条件,当为=时可省略
可作区间条件:\DB::table('tableName')->where([[''id,'>=',2],['id','<=',5]])->get();
like匹配:\DB::table('tableName')->where([[''name,'like','%2%'],[''id,'<=',5]])->get();//and形式
\DB::table()->where()->orwhere()->get();//or形式
wherebetween&&whereNotBetween:
\DB::table('tableName')->whereBetween('id',[10,15])->get();
\DB::table()->whereNotBetween()->get()
whereIn&&whereNotIn:
\DB::table()->whereIn('id',[1,2,4,6,7])->get();
\DB::table()->whereNotIn()->get();
whereNull&&whereNotNull:
\DB::table()->whereNull('字段')->get()
\DB::table()->whereNotNull('字段')->get();
value():
\DB::table('tableName')->where('id',2)->value('name');//只取出这个字段的值
pluck():
\DB::table()->pluck();//取出一列数据
聚合:
\DB::table()->count();//总数
\DB::table()->max('字段');//最大值
\DB::table()->min('字段');//最小值
\DB::table()->avg('字段');//平均值
\DB::table()->sum('字段');//求和
使用mysql原生函数:
例如:得到查询字段的总数
\DB::table('tableName')->select(DB::raw('count(*)' tot))->get();
七、blade模版引擎
引用简书文章http://www.jianshu.com/p/7d65f9eb94be
laravel框架学习笔记的更多相关文章
- laravel框架——学习笔记
routes.php文件创建路由参数由{}包起来,不需要$ Route::get('/stu/{as}','StuController@show'); 在相对应的Controller创建funcito ...
- phalcon(费尔康)框架学习笔记
phalcon(费尔康)框架学习笔记 http://www.qixing318.com/article/phalcon-framework-to-study-notes.html 目录结构 pha ...
- Yii框架学习笔记(二)将html前端模板整合到框架中
选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/ ...
- JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue
前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...
- JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序
前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和A ...
- JavaSE中Map框架学习笔记
前言:最近几天都在生病,退烧之后身体虚弱.头疼.在床上躺了几天,什么事情都干不了.接下来这段时间,要好好加快进度才好. 前面用了三篇文章的篇幅学习了Collection框架的相关内容,而Map框架相对 ...
- JavaSE中线程与并行API框架学习笔记1——线程是什么?
前言:虽然工作了三年,但是几乎没有使用到多线程之类的内容.这其实是工作与学习的矛盾.我们在公司上班,很多时候都只是在处理业务代码,很少接触底层技术. 可是你不可能一辈子都写业务代码,而且跳槽之后新单位 ...
- JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?
前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事 ...
- scrapy爬虫框架学习笔记(一)
scrapy爬虫框架学习笔记(一) 1.安装scrapy pip install scrapy 2.新建工程: (1)打开命令行模式 (2)进入要新建工程的目录 (3)运行命令: scrapy sta ...
随机推荐
- 本地连接服务器的redis,jedisCluster创建问题
1.redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool 查看 ...
- EF CodeFirst数据注解特性详解
数据注解特性是.NET特性,可以在EF或者EF Core中,应用于实体类上或者属性上,以重写默认的约定规则. 在EF 6和EF Core中,数据注解特性包含在System.ComponentModel ...
- Centos7 安装VNC实现远程桌面
1.设置root用户方法: 1.# 复制一个服务设置的模板,命令如下: cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vn ...
- web前端常用库
项目中可能用到的web前端库(持续记录): 1.轻量化货币库:https://github.com/openexchangerates/accounting.js ,美元形式.欧元形式等 2.时间 ...
- SpringCloud大白话之服务注册中心
SpringCloud-Eureka白话说明 eureka.client.register-with-eureka 属性表示是否将自己注册到Eureka Server, 默认为true. 由于当前应用 ...
- 剑指offer 面试题52. 两个链表的第一个公共节点
这题之前leetcode做过,权当复习 首先这题没说是否一定有公共节点,如果代码可能因为这一点造成死循环的,需要提前验证所给两个链表是否有公共节点. 方法1:对于每一个list1的节点,遍历list2 ...
- JS 抖动函数封装
原生JS实现封装的抖动函数框架 <style> ul{ margin-top: 100px; } li { float: left; margin-left: 20px; position ...
- 小根堆(Heap)的详细实现
堆的介绍 Heap是一种数据结构具有以下的特点: 1)完全二叉树 2)heap中存储的值是偏序 Min-heap: 父节点的值小于或等于子节点的值 Max-heap: 父节点的值大于或等于子节点的值 ...
- java.util.UUID工具类
生成数据表的主键Id会用到此工具类 /** * <获取主鍵> * <获取32位UUID> * @return * @see [类.类#方法.类#成员] */ public st ...
- QImage和IplImage转换总结
在arm中做图像处理,因为不支持GTK,一般都会用到QT来实现显示功能,所以不可避免的要涉及到QImage和IplImage两种图像格式之间的转换,下面总结一下转换的方法. (下面格式转换的代码都是网 ...