1、laravel的安装php
一、composermysql
做用:主要管理php中的依赖关系(相似于yum源)laravel
能够安装的软件:web
curl //主要用到微信开发中sql
upload //文本操做数据库
excel //表格apache
mail //邮件json
log //日志api
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
二、安装laravel
一、进入项目目录
cd /usr/local/apache2.4/htdocs/
composer create-project --prefer-dist laravel
/laravel
blog
或者安装本身想要的版本
composer create-project --prefer-dist laravel
/laravel
blog 5.4.*
二、配置Apache:
进入到laracel根目录
cd blog/
chmod 777 -R storage/
打开浏览器输入地址:localhost/blog/public/ 显示Larave欢迎洁面,安装成功!!
2、laravel配置文件
一、环境配置(.env文件)
APP_KEY:环境变量解析(网站的密匙,保证网站的安全)
生成密匙:php artisan key:generate
APP_DEBUG:开发模式(默认为ture,上线需设置为false)
获取配置信息:env('')方法,设置环境配置中未设置的变量env('','')
二、系统配置(config目录下)
读取配置:config('文件名.配置名'),如:config('app.timezone')
修改配置(临时性的,不修改配置文件):config(['文件名.配置名'=>'值']);如:config(['app.timezone'=>'UTC']);
3、php artisan(php的工具匠):在项目根目录下才能执行
本生就是一些php文件,能够在命令行模式下执行这些文件,能够完成建立控制器、建立中间件、生成密匙等。
一、php artisan down:网站下线(页面为views/503.blade.php)
二、php artisan up:网站上线
三、php artisan route:list:查看路由列表
四、php artisan make:controller 控制器名:新建控制器
4、路由
一、路由类型
Route::get($rul,$callback);
Route::post($rul,$callback);
Route::put($rul,$callback);
Route::patch($rul,$callback);
Route::delete($rul,$callback);
Route::options($rul,$callback);
二、get();
Route::get('login','LoginController@index');
三、post();
Route::post('check','LoginController@check');
受CSRF保护(保护网站不受跨站请求伪造(CSRF)攻击。保护表单安全。)
需在表单内添加{{csrf_field()}}
四、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());
} //处理
五、路由的三种常见形式:
HTTP请求路由:
Route::get('url信息','处理的逻辑地址或功能代码');
Route::put('url信息','处理的逻辑地址或功能代码');
Route::post('url信息','处理的逻辑地址或功能代码');
Route::delete('url信息','处理的逻辑地址或功能代码');
Resource路由:url和控制器中的7个标准RESTful动做相绑定
Route::resource('url相关信息','控制器名称');
控制器路由:url和控制器中的全部动做(只须要按照指定的规范来编写动做便可)
Route::controller('url相关信息','控制器名称');
六、路由的处理:
(1)把路由的处理交给控制器中的某个动做处理
Route::get('/','IndexController@index')
(2)直接处理路由(使用闭包函数形式处理)
Route::get('/',function(){
});
(3)路由参数:
Route::get('view/{id}',function($id){
}); //参数必传
Route::get('view/{id?}',function($id=1){
}); //可选参数
七、控制器和路由
(1)为控制器绑定路由时,能够直接使用HTTP请求形式的路由
须要每个URL绑定到控制器中的某一个动做上
Route::get('/','IndexController@index');
(2)RESTful形式的资源控制器路由(只支持7种路由)
Route::resource('url相关信息','控制器名称');
(3)隐式控制器路由
Route::controller('url相关信息','控制器名称');
访问index,方法名应为getIndex
访问getViewMsg方法,地址为msg/view-msg
八、路由组(之后台管理模块为例)
Route::group(['namespace'=>'Admin','prefix'=>'admin','middleware'=>'adminLogin'],function(){
Route::get('/','IndexController@index');//后台首页
Route::resource('user','UserController');//后台用户管理模块
Route::resource('goods','GoodsController');//后台商品管理模块
});
(注:namespace为命名空间,prefix为路由前缀,middleware为中间件)
九、中间件
简介:中间件为过滤进入应用的 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、中间件参数:中间件能够接收额外的参数。例如:中间件文件中
RouteServiceProviderwebroutes/web.phpapiroutes/api.phppublic function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) { // Redirect... } return $next($request); }
路由中书写:
中间件参数能够在定义路由时经过:
分隔中间件名和参数名来指定,多个中间件参数能够经过逗号分隔
:Route::put('post/{id}', function ($id) {
//
})->middleware('role:editor');
终端中间件,能够理解为一个善后的后台处理中间件。有时候中间件可能须要在 HTTP 响应发送到浏览器以后作一些工做,好比,Laravel 内置的 中间件会在响应发送到浏览器以后将 Session 数据写到存储器中,为了实现这个功能,须要定义一个终止中间件并添加 方法到这个中间件: e、终端中间件:sessionterminate
<?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
方法以单例的方式将该中间件注册到容器中。关于服务容器咱们就会在后面讲到,暂时不深刻展开了。
十、请求:
(1)获取地址:
$request->fullUrl();//输出当前url地址
$request->path();//获取URL路由
$request->url();//获取URL地址初参数
$request->is('request');//判断路由是否为request,返回true或falst
(2)获取请求类型:
$request->method();//返回请求类型
$request->isMethod('请求类型');//判断请求是否为特定请求
十一、闪存:闪存数据即 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
十二、文件上传:
(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)
1三、cookie
查看:$requset->cookie();//查看全部的cookie
或者\Cookie::get();
设置:\Cookie::queue('key','value',生存时间);
或者
$cookie=cookie('key','value',生存时间);
response('重定向')->cookie($cookie);
(注:laravel框架把全部的cookie进行加密,因此$_COOKIE['name'] != $request->cookie())
1四、响应:全部的路由及控制器必须返回某个类型的响应,并发送回用户的浏览器,若是响应数组的话,直接转换成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('文件所在路径');
5、数据库迁移(migrate)
一、数据库迁移简介
(1)migrate简介:
方便团队开发,一次更改,团队成员都会影响到
直接使用php代码,而不是使用sql语句来操做数据库
(2)配置数据库帐号信息:.env配置文件
(3)数据库迁移命令:php astisan migrate
命令行工具:sublime插件,terminal
(4)删除自带的用户认证模块:php astisan fresh
二、建立数据表
(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
三、数据库填充
(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
6、数据库操做
一、链接数据库(.env文件):
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
二、执行原声的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');
三、事物机制:(判断执行的sql语句知否执行成功。)
开启事物:\DB::beginTransaction();
事物回滚:\DB::rollback();
食物提交:\DB::commit();
四、连贯操做;
查询:
\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();
7、blade模版引擎
引用简书文章http://www.jianshu.com/p/7d65f9eb94be