一、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

    1.什么是mysql mysql是一种关系型数据库,是瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品. 2.mysql的安装 下载mysql-installer-community- ...

  2. 水题(三角形与扇形面积计算sin()应用)

    J - Sincerely Gym - 101350J Physics cat likes to draw shapes and figure out their area. He starts by ...

  3. 远程连接不上centos的mysql的解决方法

    1.防火墙没有开放3306端口 centos 有两种防火墙 FirewallD和iptables防火墙 centos7 使用的是FirewallD防火墙. 1.FirewallD防火墙开放3306端口 ...

  4. CSS样式表能否控制文字禁止选择,复制, 焦点

    div中禁止文字被选择 在做div的点击计数事件时,遇到一个小问题. 因为div里面有文字,所以当点击多次时,特别是鼠标点的比较快的时候,文字会被选中. 查了下,用css和javascript可以实现 ...

  5. Maven Filter与Profile隔离生产环境与开发环境

    Maven Filter与Profile隔离生产环境与开发环境 在不同的开发阶段,我们一般用到不同的环境,开发阶段使用开发环境的一套东西,测试环境使用测试环境的东西,可能有多个测试环境,生产环境使用的 ...

  6. 【LeetCode】几何学 geometry(共2题)

    [587]Erect the Fence [892]Surface Area of 3D Shapes

  7. jquery 小知识

    $("p:eq(0)") :表p标签的第一个元素 $("p:eq(1)") :表p标签的第二个元素

  8. reids 持久化

    RDB: RDB是整个内存压缩过的Snapshot,RDB 的数据结构,可以配置符合的快照触发条件,默认如下 900s  1次修改 300s 10次修改 60s 10000 次修改 自动备份为dump ...

  9. python基础面试题总结

    1.python中深拷贝和浅拷贝的理解 自己理解:浅拷贝,只是拷贝引用,不开辟新的空间存储拷贝内容. 深拷贝,就是在内存中,开辟一个新的内存地址,将拷贝内容放到新的地址中去. 验证:对于数字,字符串, ...

  10. 2.xml约束技术----------dtd约束

    1.xml的约束 (1)为什么需要定义约束了 比如现在定义一个person的xml文件,只想要这个文件里面保存人的信息,比如name age等,但是如果在xml文件中写了一个元素<猫>,发 ...