一、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
方法到这个中间件:
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