一、laravel简介

laravel是一套优雅简介的PHP开发框架,受欢迎程度非常之高,功能强大,工具齐全;以下是本人在学习过程中记录的laravel比较基础的资料,权当学习笔记,请大神们多多指教

二、版本选择

本篇学习笔记以laravel5.2.15版本为框架的版本基础;更多版本请移步https://www.golaravel.com/

三、laravel下载安装以及开发环境搭建

(一):环境搭建

  由于laravel使用较多的php新特性,所以新版本的laravel对PHP的版本要求比较高,这里选择的laravel5.2.15要求 PHP>5.5.9+ 。Win系统下推荐使用集成的开发环境比如wamp、phpStudy、Xampp都可以,下载安装的时候需要注意PHP版本,Linux系统下需要编译安装,这里推荐一篇博客https://www.linuxidc.com/Linux/2016-10/136327.htm(ubuntu下lamp开发环境搭建)。本篇学习笔记也是基于lamp环境下

(二):下载、安装及大致介绍

  1、安装包下载安装

  原本laravel中文网是可以下载一键安装包的,但是等我去下载的时候发现没地方可以下载,也只能通过度娘找其它下载资源下载安装包然后安装;我的资源:https://github.com/yuwenbo5/laravel5.2.15.git;下载安装包后解压更改名称(laravel),直接拷贝到环境根目录www(win下wamp环境)或者 /var/www/html(linux下lamp环境)中;打开浏览器输入url:localhost/laravel/public 然后回车,出现如下画面表示安装成功:

  2、composer安装

  cd到环境根目录,使用命令:composer create-project --prefer-dist laravel/laravel=5.2.15  laravel(项目名称,可修改)

  3、简单介绍

  laravel是基于mvc模式的php框架,m——模型层,v——视图层,c——控制器层;以下为laravel框架的目录文件,框出来的文件目录将在后续中用到:

  

  app是应用的核心代码文件目录,以后的代码基本都在这里完成;app/Http/Controller目录是应用的控制器文件;routes.php是框架的路由文件,负责路由分配和映射;Http下的类文件,比如上面目录中的User.php、Menu.php文件是应用的模型文件;config目录是所有应用的配置文件目录;public是框架的入口文件及静态资源文件目录;resources/views则是应用的视图文件目录。

四、laravel路由

  (一):简介

  用过thinkPHP的开发者都知道,传统的MVC的url都是对应应用的控制器及控制器中的方法,laravel中的MVC则是通过路由功能映射到对应的程序(控制器方法),通过路由将用户的请求发送到对应的程序进行处理,其作用就是建立url和处理程序之间的映射关系,这样做有一个好处,对url进行美化只需要修改路由而无需对程序本身进行修改。

  laravel中请求类型包括:get、post、put、patch、delete。

  前面说了route.php是laravel的路由文件,所有的路由映射都要通过编辑route.php文件进行代码书写。

  (二):路由学习

    1、基本路由

    get请求:

 1 <?php
2
3 //基本路由的get请求
4
5 Route::get('get_base', function(){
6 return 'get request base';
7 });
8
9
10 浏览器输入:http://127.0.0.1/laravel/public/get_base
11 页面输出:get request base

    post请求:

 1 <?php
2
3 //基本路由的post请求
4
5 Route::post('post_base', function(){
6 return 'post request base';
7 });
8
9
10 以上路由需要通过post方式请求,这里不做演示
11 请求后页面输出:post request base

    2、多请求路由

    顾名思义,多请求路由则是可以通过多种请求方式进行请求,多请求路由主要有两种方式,match和any

    (1)、match接收请求类型的数组从而限定请求的类型:

 1 <php
2
3 //多请求路由match
4
5 Route::match(['get','post'], 'multi', function(){
6 return 'multi post or get';
7 });
8
9 url:http://127.0.0.1/laravel/public/multi
10 此路由可通过get、post请求
11 请求后返回字符串:multi post or get

    

    (2)、any方式

 1 <?php
2
3 //any方式
4
5 Route::any('multi', function(){
6 return 'multi get or post';
7 });
8
9
10 url:http://127.0.0.1/laravel/public/multi
11 请求返回字符串:multi get or post

    3、路由参数

    给路由绑定参数,接收参数进行处理

    (1)、必选参数

 1 <?php
2
3 //带参数的路由
4
5 Route::get('myname/{name}', function($name){
6 return 'my name is '.$name;
7 });
8
9
10 url:http://127.0.0.1/laravel/public/myname/yuwenbo
11 get访问后页面输出:my name is yuwenbo

    (2)、可选参数($userid=null表示默认值,可设置没有参数时的默认值)

 1 <?php
2
3 //可选参数绑定
4
5 Route::get('user/{userid?}', function($userid=null){
6 return 'userid is '.$userid;
7 });
8
9 访问url:http://127.0.0.1/laravel/public/user/username
10 输出:userid is username
11
12 访问url:http://127.0.0.1/laravel/public/user
13 输出:userid is
14
15 可选参数绑定使得路由很灵活

    (3)、路由参数过滤(用正则表达式对传入的参数进行过滤)

 1 <?php
2
3 /*
4 参数过滤
5 */
6
7 //单个参数过滤
8 Route::get('num/{num?}', function($num=15){
9 return 'this num is '.$num;
10 })->where('num','[0-9]+');
11
12 访问url:http://127.0.0.1/laravel/public/num/5
13 返回输出:this num is 5
14
15 访问url:http://127.0.0.1/laravel/public/num
16 返回输出:this num is 15
17
18 访问url:http://127.0.0.1/laravel/public/num/fhdja
19 页面报错
20
21 //多个参数过滤
22 Route::get('info/{name}/{age?}', function($name,$age=null){
23 return 'name is '.$name.', age is '.$age;
24 })->where(['name' => '[a-zA-Z]+', 'age' => '[1-9]+']);
25
26 可使用数组形式过滤多个参数

    4、路由别名

    给路由通过['as' => 'alias']数组使用别名后,可通过route('别名')生成url,请看代码理解:

 1 <?php
2
3 //路由别名
4
5 Route::get('student/info',['as' => 'studentInfo' ,function(){
6
7 //通过route('studentInfo')生成完成url后返回
8 return route('studentInfo');
9
10 }]);
11
12
13 访问url:http://127.0.0.1/laravel/public/student/info
14 页面返回:http://127.0.0.1/laravel/public/student/info
15
16 注:别名的好处在于,以后在控制器中使用route('别名')的方式生成url后,即便修改了路由的名字,也不用再修改控制器程序,因为通过别名程序能自动生成修改后的url

    5、路由群组

    通过关键字group创建路由群组

 1 <?php
2
3 /*
4 *路由群组
5 */
6
7 Route::group(['prefix' => 'admin'], function(){
8
9 //此时的访问地址:http://127.0.0.1/laravel/public/admin/student/info
10 Route::get('student/info',['as' => 'studentInfo' ,function(){
11 return route('studentInfo');
12 }]);
13
14 //此时的访问地址:http://127.0.0.1/laravel/public/admin/info/yuwenbo/20
15 Route::get('info/{name}/{age?}', function($name,$age=null){
16 return 'name is '.$name.', age is '.$age;
17 })->where(['name' => '[a-zA-Z]+', 'age' => '[1-9]+']);
18
19 });
20
21 此时的访问地址url必须要加上群组前缀,否则将不能访问

    6、路由中输出视图

    通过view()函数输入视图

 1 <?php
2
3 /**
4 * 路由中输出视图
5 */
6
7 //框架的欢迎界面路由
8
9 Route::get('/',function(){
10 return view('welcome');
11 });
12
13 访问url:http://127.0.0.1/laravel/public
14 浏览器显示laravel的欢迎界面
15
16
17 //做如下修改
18 Route::get('welcome',function(){
19 return view('welcome');
20 });
21
22 修改后访问url:http://127.0.0.1/laravel/public/welcome
23 浏览器同样显示laravel的欢迎界面

    一般情况是不会在路由中输出视图的。

五、控制器

  控制器目录app/Http/Controller,此目录下有一个基本的控制器Controller,新增的控制器统一继承此Controller;

  命名空间:namespce  App\Http\Controller;

  命名规则:控制器文件名跟类名统一首字母大写,以 控制器名+Controller 为命名规则,比如新建一个控制器 :AdminController.php

 1 <?php
2 /**
3 * Created by PhpStorm.
4 * User: Administrator
5 * Date: 2018/8/25/025
6 * Time: 0:51
7 */
8
9 namespace App\Http\Controllers;
10
11 class AdminController extends Controller
12 {
13 public function index()
14 {
15 return view('admin/index');
16 }
17 }
18
19
20 新建控制器AdminController继承于基类Controller

 

 1、路由关联控制器,通过路由访问控制器程序:

 1 <?php
2
3 //路由关联映射控制器方法一:
4
5 Route::get('admin/index', 'AdminController@index');
6
7
8 //路由关联控制器方法二:
9
10 Route::get('admin/index', ['uses' => 'AdminController@index']);
11
12
13 //路由别名关联控制器:
14
15 Route::get('admin/index', [
16 'uses' => 'AdminController@index',
17 'as' => 'adminindex'
18 ]);

 

 2、路由关联控制器进行参数绑定:

 1 //路由书写 route.php
2 <?php
3 //结合之前学习的参数过滤
4 Route::get('admin/index/{num}', [
5 'uses' => 'AdminController@index',
6 'as' => 'adminindex'
7 ])->where('num', '[0-9]+');
8
9 ?>
10
11
12
13 //控制器代码 AdminController.php
14 <?php
15 /**
16 * Created by PhpStorm.
17 * User: Administrator
18 * Date: 2018/8/25/025
19 * Time: 0:51
20 */
21 namespace App\Http\Controllers;
22
23 class AdminController extends Controller
24 {
25 public function index($num)
26 {
27 return 'num is '.$num;
28 }
29 }
30
31 ?>
32
33 访问url:127.0.0.1/laravel/public/admin/index/5
34 页面输出:num is 5

六、模型

  laravel框架的模型文件在app目录下,统一首字母大写,文件名与类名一致,统一继承于 Illuminate\Database\Eloquent\Model 基类;

  (一)、新建模型及使用

 1 //模型文件 Admin.php
2 <?php
3 /**
4 * Created by PhpStorm.
5 * User: Administrator
6 * Date: 2018/8/25/025
7 * Time: 13:35
8 */
9 namespace App;
10 use Illuminate\Database\Eloquent\Model;
11
12 class Admin extends Model
13 {
14 public static function getAdmin()
15 {
16 return 'this is admin model static getAdmin action';
17 }
18
19 }
20
21 ?>
22
23
24 //控制器文件 AdminController.php
25 <?php
26 /**
27 * Created by PhpStorm.
28 * User: Administrator
29 * Date: 2018/8/25/025
30 * Time: 0:51
31 */
32 namespace App\Http\Controllers;
33
34 class AdminController extends Controller
35 {
36 public function index()
37 {
38 return Admin::getAdmin();
39 }
40 }

  (二)、数据库操作

  连接数据库mysql,laravel的数据库连接只需要配置好数据库的配置文件即可,也就是config目录下的database.php

 1 //database.php文件
2
3
4 'mysql' => [
5 'driver' => 'mysql',
6 'host' => env('DB_HOST', 'localhost'),
7 'port' => env('DB_PORT', '3306'),
8 'database' => env('DB_DATABASE', 'forge'),
9 'username' => env('DB_USERNAME', 'forge'),
10 'password' => env('DB_PASSWORD', ''),
11 'charset' => 'utf8',
12 'collation' => 'utf8_unicode_ci',
13 'prefix' => 'shop_',
14 'strict' => false,
15 'engine' => null,
16 ]
17
18 //配置文件读取的是.env文件的内容

  打开.env文件,做如下配置修改即可连接到mysql数据库

 1 APP_ENV=local
2 APP_DEBUG=true
3 APP_KEY=base64:IxkVvrRLqdJeU9h8vGu1W58OG3NVuDtkMWyC6nIT4qs=
4 APP_URL=http://localhost
5
6 //mysql连接配置
7 DB_CONNECTION=mysql
8 DB_HOST=localhost
9 DB_PORT=3308
10 DB_DATABASE=shop
11 DB_USERNAME=root
12 DB_PASSWORD=root
13
14 CACHE_DRIVER=file
15 SESSION_DRIVER=file
16 QUEUE_DRIVER=sync
17
18 REDIS_HOST=127.0.0.1
19 REDIS_PASSWORD=null
20 REDIS_PORT=6379
21
22 MAIL_DRIVER=smtp
23 MAIL_HOST=mailtrap.io
24 MAIL_PORT=2525
25 MAIL_USERNAME=null
26 MAIL_PASSWORD=null
27 MAIL_ENCRYPTION=null

   1、使用DB facade操作数据库

    类似原生的sql语句进行curd操作,例如:新建一个表user包含id、username、passwrod、email、sex、create_time、update_time字段

 1 <?php
2 /**
3 * 使用DB facade进行CURD操作
4 * Created by PhpStorm.
5 * User: Administrator
6 * Date: 2018/8/25/025
7 * Time: 0:51
8 */
9 namespace App\Http\Controllers;
10 use App\Http\Controllers\Controller;
11 use Illuminate\Http\Request;
12 use Illuminate\Support\Facades\DB;
13
14 class AdminController extends Controller
15 {
16
17 public function query()
18 {
19 //查询
20 $user_list = DB::select('select * from user');//返回数组
21
22
23 //新增
24 $bool = DB::insert('insert into user(username,email,sex) values(?, ? ,?)',
25 ['admin', 'example@mail.com', '1']);//返回布尔值
26
27 //修改
28 $rows = DB::update('update user set password=? where username=?',['123456', 'admin']);//返回影响的行数
29
30 //删除
31 $rows = DB::delete('delete from user where username=?', ['admin']);//返回删除的行数
32
33 }
34 }

   使用DB facade操作数据库,初学还是很简单的,因为原生的sql还是比较熟的。

   2、使用查询构造器操作数据库

   使用查询构造器进行数据库操作使得操作简介、方便,示例使用上面的user表进行演示

    查询构造器----新增数据
 1 <?php
2 /**
3 * 查询构造器之新增数据
4 * Created by PhpStorm.
5 * User: Administrator
6 * Date: 2018/8/25/025
7 * Time: 0:51
8 */
9 namespace App\Http\Controllers;
10 use App\Http\Controllers\Controller;
11 use Illuminate\Http\Request;
12 use Illuminate\Support\Facades\DB;
13
14 class AdminController extends Controller
15 {
16
17 public function query()
18 {
19 //插入一条数据
20 $bool = DB::table('user')->insert(
21 ['username' => 'yuwenbo', 'email' => 'example@mail.com', 'sex' => 1]
22 );//返回布尔值
23
24 //插入一条数据返回插入的id
25 $insert_id = DB::table('user')->insertGetId(
26 ['username' => 'yuwenbo', 'email' => 'example@mail.com', 'sex' => 1]
27 );
28
29
30 //插入多条数据
31 $bool = DB::table('user')->insert([
32 ['username' => 'yuwenbo', 'email' => 'example@mail.com', 'sex' => 1],
33 ['username' => 'tom', 'email' => 'example@mail.com', 'sex' => 0]
34 ]);
35
36 }
37
38 }
    查询构造器-----更新数据:更新指定内容和自增自减两种方式
 1 <?php
2 /**
3 * 查询构造器之更新数据
4 * Created by PhpStorm.
5 * User: Administrator
6 * Date: 2018/8/25/025
7 * Time: 0:51
8 */
9 namespace App\Http\Controllers;11 use App\Http\Controllers\Controller;
12 use Illuminate\Http\Request;
13 use Illuminate\Support\Facades\DB;
14
15 class AdminController extends Controller
16 {
17
18 public function query()
19 {
20 //更新指定内容
21 $rows = DB::table('user')->where('username','admin')->update(['password' => '123456']);//返回影响的行数
22
23 //更新自增自减
24 $rows = DB::table('user')->where('username','admin')->increment('sex');//自增1
25 $rows = DB::table('user')->where('username','admin')->increment('sex',$n);//自增n
26
27 $rows = DB::table('user')->where('username','admin')->decrement('sex');//自减1
28 $rows = DB::table('user')->where('username','admin')->decrement('sex',$n);//自减n
29
30 //自增同时修改其它内容
31 $rows = DB::table('user')->where('username','admin')->increment('sex', 3, ['email' => '4546464684@mail.com']);//自增同时修改内容
32
33 }
34
35 }
    查询构造器----删除数据
 1 <?php
2 /**
3 * 查询构造器之删除数据
4 * Created by PhpStorm.
5 * User: Administrator
6 * Date: 2018/8/25/025
7 * Time: 0:51
8 */
9 namespace App\Http\Controllers;
10 use App\Http\Controllers\Controller;
11 use Illuminate\Http\Request;
12 use Illuminate\Support\Facades\DB;
13
14 class AdminController extends Controller
15 {
16
17 public function query()
18 {
19 //删除数据
20 $rows = DB::table('user')->where('username','admin')->delete();
21
22 //清空数据(危险,谨慎使用)
23 DB::table('user')->truncate();
24
25 }
26
27 }
    查询构造器-----查询数据
 1 <?php
2 /**
3 * 查询构造器之查询数据
4 * Created by PhpStorm.
5 * User: Administrator
6 * Date: 2018/8/25/025
7 * Time: 0:51
8 */
9 namespace App\Http\Controllers;
10 use App\Http\Controllers\Controller;
11 use Illuminate\Http\Request;
12 use Illuminate\Support\Facades\DB;
13
14 class AdminController extends Controller
15 {
16
17 public function query()
18 {
19 //返回所有的数据get()
20 $user_list = DB::table('user')->get();
21 $user_list = DB::table('user')->where('id','>=',2)->get();
22
23 //多条件查询
24 $user_list = DB::table('user')->whereRaw('id >= ? and sex = ?', ['5' ,'1'])->get();
25
26 //按照默认排序返回第一条数据first()
27 $user = DB::table('user')->first();
28 $user = DB::table('user')->orderBy('id','desc')->first();
29 $user = DB::table('user')->where('id', 2)->first();
30
31 //返回结果集中指定的字段pluck
32 $usernames = DB::table('user')->whereRaw('id >= ? and sex = ?', ['5' ,'1'])->pluck('username');
33
34 //返回指定字段的下标lists
35 $usernames = DB::table('user')->whereRaw('id >= ? and sex = ?', ['5' ,'1'])->lists('username', 'id');//以id作为下标
36
37 //返回指定的多个字段select()
38 $user_list = DB::table('user')->where('id', '>=', '1')->select('username','email','sex')->get();
39
40 //每次查指定的条数chunk
41 DB::table('user')->chunk(2, function($user_list){
42 dd($user_list);
43 });
44
45 }
46
47 }

  mysql中的聚合函数对应的构造器方法count()、max()、min()、avg()、sum(),使用都比较简单也很好理解,这里不再赘述

七、视图

  laravel框架的视图支持原生的php文件,视图的目录 resources/views;

  命名:统一以.php为后缀的PHP文件,规则:视图名+.+blade,例如新建一个视图文件:index.blade.php

  一般情况下一个控制器会建一个视图目录,例如AdminController控制器,我们将在views下新建一个admin目录

 (一)、新建视图

1 //模板文件 views/admin/index.blade.php
2
3 this is views/admin/index.blade

 (二)、输出视图

 1 //路由文件
2 <?php
3 //绑定控制器方法
4 Route::get('admin/index', 'AdminController@index');
5
6 ?>
7
8
9 //控制器文件 AdminController.php
10 <?php
11 /**
12 * Created by PhpStorm.
13 * User: Administrator
14 * Date: 2018/8/25/025
15 * Time: 0:51
16 */
17 namespace App\Http\Controllers;
18
19 class AdminController extends Controller
20 {
21 public function index()
22 {
23 return view('adminindex');//传入要输出的模板名即可
24 }
25 }
26
27 访问url:http://127.0.0.1/laravel/public/admin/index
28 页面显示:this is views/admin/index.blade

 输出视图时可以携带变量然后在模板中输出出来,这点将在后面的模板的详细使用中用到;

 (三)、模板详解

  1、模板继承

  由于多数页面有相同部分,所以使用模板继承简化模板使用;以下首先在views/common下新建一个基本的公共模板文件base.blade.php,公共的模板文件放在views/common文件夹下

  

 base.blade.php

  在views下新建首页index.blade.php继承公共模板文件

 index.blade.php

  模板继承语法:@extends('目录.文件名');例如:@extends('common.base'),就可以继承common目录下的base.blade.php模板

  使用@section重写子模板,使用@yield展示某个指定的section的内容;

  @yield不能被子模板扩展,@section可以被子模板扩展

  如果需要展示父模板内容,可使用@parent;例如:

1 @extends('common.base')
2
3 @section('header')
4 @parent
5 header
6 @stop

  2、基础语法及使用

  输出变量,使用{{ $变量名 }},如下所示:

 1 //例如控制器中
2
3 public function index(){
4
5 return view('index',['name' => 'yuwenbo']);
6
7 }
8
9
11
12 //模板中输出index.blade.php
13
14
15 <p>{{ $name }}</p>
16
17
18 结果输出:yuwenbo

  

  使用php函数,blade模板允许我们使用原生的php,也可以在模板中使用函数及运算符

 1 //模板中使用php函数
2
3
4 //输出时间戳
5 <p>{{ time() }}</p>
6
7 //格式化当前时间
8 <p>{{ date('Y-m-d H:i:s', time()) }}</p>
9
10 //三元运算符
11 <p>{{ in_array($name,$array) ? 'true' : false }}</p>

  模板中短语法:{{ isset($age) ? $age : 'default value' }}  等同于  {{ $age or 'default value' }}

  原样输出:

  使用@{{ $count }}即可原样输出 ‘{{ $count }}’。

  子视图引入

  使用@include关键字;例如在views下新建模板leftmenu.blade.php

 1 @extends('common.base')
2
3 @section('header')
4 @parent
5 header
6 @stop
7
8 @section('leftmenu)
9 //引入子视图
10 @include('leftmenu')
11 @stop

  3、流程控制

  if判断语句

1 //if流程判断语句
2
3 @if($user == 'admin')
4 i am admin
5 @elseif($user == 'yuwenbo')
6 i am yuwenbo
7 @else
8 i am default
9 @endif

  for循环语句

1 //for循环语句
2
3 @for($i = 1; $i <= 10; $i ++)
4 <p>i is {{ $i }}</p>
5 @endfor

  foreach循环语句

 1 //控制器
2 public function index()
3 {
4 $data_list = array('name' => 'yuwenbo', 'age' => 22, 'job' => 'php');
5
6 return views('index', ['data' => $data_list]);
7 }
8
9
10 //视图输出
11 @foreach($data as $key => $val)
12 {{ $key }} => {{ $val }}
13 @endforeach
 1 //控制器
2 public function index()
3 {
4 $data_list = array(
5 array('name' => 'admin', 'age' => 20),
6 array('name' => 'word', 'age' => 18)
7 );
8
9 return views('index', ['data' => $data_list]);
10 }
11
12
13 //模板输出
14 @foreach($data as $key => $val)
15 <p>name is {{ $val->name }}, age is {{ $val->age }}</p>
16 @endforeach

  4、模板中使用url

  url()-->通过路由的名字生成url

  action()-->通过指定控制器及方法名生成url

  route()-->通过路由别名生成url

 1 //路由 route.php
2
3 Route('index',[
4 'uses' => 'IndexController@index',
5 'as' => 'in'
6 ]);
7
8
9
10 //模板中生成url的方式
11
12 <a href="{{ url('index') }}">url方式</a>
13
14 <a href="{{ action('IndexController@index') }}">action方式</a>
15
16 <a href="{{ route('in') }}">route方式</a>
17
18
19 //以上三种方式均生成url:
20 http://127.0.0.1/laravel/public/index

  以上三种方式在实际使用时都可以用,一般情况下,使用url()和route()较多,因为写法简介方便

=================================================================================================================================

1.请求类型
get , put , post , patch , delete 等
2.路由访问方式
get , post , any , match(['get',post])
3.路由传参
Route::get('user/{id}' ,function ($id){
});
Route::get('user/{name}/{id}',function($name,$id){
});
4.传递可选参数
Route::get('user/{name?}',function($name = value){
});
5.参数限制
Route::get('user/{name}',function(){})->where('name','[A-Za-z] + ');
Route::get('user/{id}/{name}',function(['id'=>'[0-9]+','name'=>'[a-z]+']));
6.模版中的写法
<h1><?php echo $title; ?></h1>
<p> {{$msg}}</p>
7.创建数据库
create database 库名 charset utf8
8.修改配置文件
在.env文件中进行修改
9.创建迁移文件
php artisan make:migration create_good_table --create=goods
执行这句命令 php artisan migrate
10.创建Model 文件控制表名,主键
php artisan make:model 表名
11.迁移文件操作
up()负责建表,加列,加索引
down()负责删表,减列,去索引
public function up(){
Schema::table('goods',function(Blueprint $table){
   添加
   $table->char('email',50);
});
Schema::table('goods',function ($table{
删除
$table->dropColumn('email');
}));
}
12.数据库迁移一操作
php artisan migrate:rollback 会退
php artisan migrate:reset 回退到初始状态
13.DB类操作数据库(Model)
insert 添加操作
DB::table()->insert(插入字段);(插入一维多维数组,返回true,false)
14.插入后返回主键值,获取主键值  insetrGetld();
$id = DB::table('goods')->insertGetId($rows);
15.update 修改操作
.典型的修改
DB::table('users')->where('id',1)->update(['age'=>19]);
相当于
update users set age = 19 where id =1;
在某值的基础上增长或者减少(默认1)
增长increment('健',步长);减少decrement();
16.delete删除操作
var_dump(DB::table('goods')->where('id','>',3)->delete());
where 有三个参数是,第二个参数当做运算符
17.select查找
DB::table('goods')->get();
DB::table('goods')->where('id','>',6)->get();
DB::table('goods')->select('id','email')->where()->get();
DB::table('goods')->where('id',6)->first();
18.表单提交要加一段_token();
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
19.不解析模版和防xss 攻击
在前段模版引擎中,用{{}}做表签边界
为防止blade 模版去解析前面加@
例如@{{$jang}}
['code'=>'<script>alert(1)</scriptt>']
&lt;script&gt;alert(1)&lt;/script&gt;
20.Model 放在/app目录下面,命名空间App
Model 继承Illuminate\Database\Eloquent\Model
引入new \App\Msg()
21.自动生成和实例化
php artisan make:model Msg
22.增加 
$msg->save();
23.查找
按键值查找
Msg::find($id);
按where 条件查找具体的那一条
Msg::where('id','>',3)->first();
查找多行all() 和 get()
24.delete 删除
Msg::where('id',$id)->delete();
25.复杂查询
asc   升序        desc 降序
orderBy('id','desc')  根据id排序
Msg::count();数数
Msg::avg('id');求平均值
Msg::min('id');最小值最大值
Msg::sum('id');求和
26.与Model有个约定
调整表名,主键值,屏蔽新增键值
27.控制器的生成
php artisan make:controller ArticleController --plain
--plain 去掉默认显示的
28.缓存位置
config/cache.php 默认用到的缓存驱动 file  其他缓存Memcached 和Redis
30.缓存调用
use Illuminate/Support/Facades/Cache
Cache::put('key','value',$minutes);
31.添加缓存
换存不存在添加缓存,缓存已经存在返回true,否则false
Cache::add('key','value',缓存时间);
持久话存储缓存
Cache::forever('key','val');
储存缓存放在storage/framework/
32.获取缓存
Cache::get('key','default');
如果有缓存输出缓存如果没有缓存返回default
pull 获取缓存后删除
33.删除缓存
Cache::forget('key');
清除所用缓存
Cache::flush();
判断缓存是否存在
Cache::has('key');
34.Request对象
请求方式(get/post)
请求参数($\post,$\FILES)
请求路径(域名后的部分)
请求Cookie等诸多信息
input 函数
35.利用Request对象做文件上传
Route::get('msg/fil','MsgController@fil');
Route::post('msg/ups','MsgController@ups');
控制器
public function fil(){
return view('msg.fil');
}
public function ups(){
$req->file()->move('上传文件地址',为文件起的名字);
}
判断文件上传是否成功
isvalid();即实例变量的值是否是个有效的对象句柄
hasFile();属性获取一个值,该值指示 FileUpload 控件是否包含要上载的文件。 在对要上载的文件执行操作之前,使用该属性来验证该文件是否存在
 
36.隐式控制器
Route::controller('article','ArticleController');
 
37.资源控制器
make:controller ArtisanController
Route::resource('article','ArticleController');
查看功能
php artisan route:list
 
38.laravel 缓存应用
静态缓存,查询缓存,数据缓存
静态缓存:缓存的整个页面;
动态缓存:存储数据库中的数据进行了缓存,既“通过动态缓存,不需要再读取数据库了,直接通过缓存文件来调取相应的数据”;
动态缓存:直接从缓存中读取,不经过数据查询;
 
39.缓存
存储缓存
Cache::put('key','value',$minutes);
 
40.laravel 中的路由与TP中的相比较
laravel 中的路由非常灵活,TP的路由是  模块/控制器/方法 TP 不能叫路由,只是URL与控制器的对应关系,或者叫URL分发;
41.设计区别laravel 连接网站的全过程,数据库+MVC+错误处理
 
42.laravel
array_collapse  函数将数组的每一个数组折合成单个数组:
str_limit('字符串',$num);  该函数接受一个字符串作为参数,以及最大字符数量作为第二个参数;
str_random();函数生成指定长度的随机字符串
e 函数对指定字符串进行实体转义,相当于htmlentities;
echo e('<html>foo<html>');
&lt;html&gt;foot;/html&gt
app_path()  返回当前项目的绝对路径 app 目录下的绝度路径
$path = app_path();
base_path() 返回项目的绝对路径
$path= base_path();
config_path() 返回项目的配置文件所在目录
public_path() 返回项目的公共文件所在目录(js,css,img ...)
attempt()  验证信息
url() 生成规则url
action() 配合路由器,生成规范 URl
bcrypt() 加密密码  (用户密码加密可以在创建数据库时进行加密)
config()  读取 配置值
csrf_field()  laravel 防止跨网站请求伪造攻击 用该命令用于验证授权用户和发送请求是否是同一个用户
<form method="post" actisan="/">
{{ csrf_field() }}
...........
</form>
request() 得到当前的request 对象
$req = request();
dd($req);
 
43.表单类型
primary (key)      主键值
string          字符串
enum          选择(‘男’,‘女’)
integer        整形
tinyint         整形(占一个字节)
int                整形(占四个字节)
auto_increment   属性自增
rememberToken()  laravel 中记录用户cookie
 
 
44.在模版中直接打印出错情况
{{print_r($errors)}}
 
45.路由分组
Route::group(
['prefix'=>'auth','namespace'=>'Auth'],
function(){
Route::get();
Route::post();
}
);
 
46.获取登入用户信息
$user = Auth::user();
$user = $request->user();
通过$user 实例化,可以拿到当前登入用户的信息
public function jiePost(Request $req){
$user = $req->user();
 
}
 
47.控制器模版展示view('she',['pro'=>$pro,'att'=>$att]);  已数组的形式进行展示
 
48.页面跳转
redirect('/prolist');
 
49.where 的用法
where('name','like','T%')
whereBetween('votes',[1,100]);    在某值的范围中
whereNotBetween();                      不在某值的范围中
insertGetId   自增ID
intval();                                             将变量转成整形
 
50.中间件
if else 判断的越来越多,会使代码更加难维护,系统间的的偶合性会增加,中间件解决了这个问题
生成中间件
php artisan make:middleware EmailMiddleware
生成的中间件位于
/app/Http/Middleware/EmailMiddleware
 
51.strtoupper()     函数把字符串转化为大写
52.分页功能
DB::table()->paginate(2);
return view('myze',['hks'=>$h]);

laravel框架基础知识总结的更多相关文章

  1. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  2. PHP面试(二):程序设计、框架基础知识、算法与数据结构、高并发解决方案类

    一.程序设计 1.设计功能系统——数据表设计.数据表创建语句.连接数据库的方式.编码能力 二.框架基础知识 1.MVC框架基本原理——原理.常见框架.单一入口的工作原理.模板引擎的理解 2.常见框架的 ...

  3. DDD框架基础知识

    DDD框架基础知识 参考: https://www.cnblogs.com/zhili/p/OnlineStorewithDDD.html(领域驱动设计,分层架构) https://www.cnblo ...

  4. 4-1 Spring框架基础知识

    Spring框架基础知识 1.Spring 框架作用 主要解决了创建对象和管理对象的问题. 自动装配机制 2.Spring 框架 (Spring容器,JavaBean容器,Bean容器,Spring容 ...

  5. Spring框架基础知识

    本人博客文章网址:https://www.peretang.com/basic-knowledge-of-spring-framework/ Spring框架简介 Spring , 一个开源的框架 , ...

  6. Laravel 框架 基础(一)

    Laravel 框架 laravel 5.2 在 5.1 基础上继续改进和优化,添加了许多新的功能特性:多认证驱动支持.隐式模型绑定.简化 Eloquent 全局作用域.可选择的认证脚手架.中间件组. ...

  7. laravel框架基础(1)---入门与介绍

    1.安装laravel5.7 (composer )2018-12-28 11:59:02 [作者:struggler] Php的版本要求:php>=7.1.3  打开php OpenSSL扩展 ...

  8. .NET面试题系列[2] - .NET框架基础知识(2)

    3 程序集 面试出现频率:虽然很重要但不怎么出现,可能会考你定义,以及程序集包括什么,然后自然的话题就跑到反射上去了. 重要程度:8/10,很重要 需要理解的程度:知道程序集包括IL和元数据.知道元数 ...

  9. ABP VNext框架基础知识介绍(1)--框架基础类继承关系

    在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ...

随机推荐

  1. MySQL错误信息语言设置为英文

    MySQL错误信息语言设置为英文 安装的wamp环境中,mysql的错误提示信息默认不是英语(大概是法语) 这里说下改为英语的过程 第一步 找到以下文件夹,确保里面可以看到各种"国际方言&q ...

  2. Quartz-第一篇 认识Quartz

    1.什么是Quartz Quartz是一个任务调度框架,借助Cron表达式,Quartz可以支持各种复杂的任务调度.JDK中也提供了简单的任务调度,java.util.Timer. Quartz的三大 ...

  3. 用vue.js写的一个瀑布流的组件

    用vue.js写的一个瀑布流的组件:https://segmentfault.com/a/1190000010741319 https://www.jianshu.com/p/db3cadc03402

  4. windows不重装系统和重建MBR分区表来扩展系统盘

    step1. 下载Acronis Disk Director Suite工具,随便一搜都能下载的到. step2. 这个软件使用非常easy,网上有非常多图文教程.扩充盘使用Increase the ...

  5. JS 自定义样式格式化日期

    Date.prototype.format = function (fmt) {             var o = {                 "M+": this. ...

  6. 解决:Module not found: node_modules\sass-loader\package.json (directory description file)

    npm uninstall node-sass npm install node-sass@latest

  7. Spring STS 开发IDE下载安装

    https://spring.io/tools https://spring.io/tools3/sts/all/ Spring STS,全称是SpringSource Tool Suite ,是由s ...

  8. [Linux]Centos7/Centos6更改系统语言

    Centos7系统语言配置信息保存在/etc/locale.conf文件内 更改步骤如下: 1.使用vim打开locale.conf文件 vim /etc/locale.conf2.编辑locale. ...

  9. qt opencv 视频分析

    脱岗 越线 qimage qpixmap opencv  回调视频采集

  10. Kotlin 的 Array 转 List

    Kotlin 的 Array 转 List array.toList() as List<T> 1 Kotlin 的 Array 转 ArrayList array.toList() as ...