• laravel框架基础知识总结


     

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

      命名规则:控制器文件名跟类名统一首字母大写,以 控制器名+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 AppHttpControllers;
    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 AppHttpControllers;
    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目录下,统一首字母大写,文件名与类名一致,统一继承于 IlluminateDatabaseEloquentModel 基类;

      (一)、新建模型及使用

    复制代码
     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 IlluminateDatabaseEloquentModel;
    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 AppHttpControllers;
    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 AppHttpControllers;
    10 use AppHttpControllersController;
    11 use IlluminateHttpRequest;
    12 use IlluminateSupportFacadesDB;
    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 AppHttpControllers;
    10 use AppHttpControllersController;
    11 use IlluminateHttpRequest;
    12 use IlluminateSupportFacadesDB;
    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 AppHttpControllers;11 use AppHttpControllersController;
    12 use IlluminateHttpRequest;
    13 use IlluminateSupportFacadesDB;
    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 AppHttpControllers;
    10 use AppHttpControllersController;
    11 use IlluminateHttpRequest;
    12 use IlluminateSupportFacadesDB;
    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 AppHttpControllers;
    10 use AppHttpControllersController;
    11 use IlluminateHttpRequest;
    12 use IlluminateSupportFacadesDB;
    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 AppHttpControllers;
    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 继承IlluminateDatabaseEloquentModel
    引入new AppMsg()
    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]);
  • 相关阅读:
    Linux常见问题解决
    使用npm国内镜像
    常用CSS备忘
    如何把JavaScript数组中指定的一个元素移动到第一位
    教你如何将word中的表格完美粘贴到ppt中
    测试开发之路--一个小小工程师的回首
    一篇文章读完50篇摄影教程(托马斯的2016总结)
    李开复推荐的30本创业/管理/互联网必须看的电子书
    摩拜单车深度产品体验报告
    Word2016(2013)怎么从任意页插入起始页码
  • 原文地址:https://www.cnblogs.com/yimingwang/p/9781735.html
Copyright © 2020-2023  润新知