Laravel 学习笔记 - 基础篇

laravel 目录结构

|- app

  • http
    • Controllers // 控制器目录
      |- bootstrap // 启动配置文件 的目录
      |- config // 所有的配置文件
      |- database // 数据库迁移 与数据填充文件
      |- public // 入口 和 网站的静态资源
      |- resources // 包含了视图的原始资源文件 视图
      |- srorage // 编译后的模板文件 和其他缓存文件
      |- tests // 单元测试 目录 (单元测试代码)
      |- vendor // 加载的依赖模块
  • laravel
    • framework // 框架核心代码 目录

laravel 路由

基本路由


// 该路由直接收 get请求
Route::get('basic1', function () {
    return  'hello world!';
});


// 该路由直接收 post请求
Route::post('basic2', function(){
    return  'basic2';
});

多请求路由

//  match 接受指定的 请求类型
Route::match(['get','post'], 'multy1',function(){
    return 'multy1';
});

// any 相应所有框架支持的类型
Route::any('multy2', function(){
    return 'multy2';
});



路由参数

// 基础的
//
// ---------
//
// Route::get('user/{id}', function($id){
//  return 'User-id-'.$id;
// });
//
// ---------
//
// 访问地址
// http://laravel.study.com/user/1  
// 输出  User-id-1
//
// 如果访问地址中不带 userID参数值的话则  报错
// 即地址:
// http://laravel.study.com/user


// 可有可无的参数
//
// ---------
//
// Route::get('user/{name?}',function($name = null){
//  return 'User-name-'.$name;
// });
//
// ---------
//
// 访问地址
// http://laravel.study.com/user/test  
// 输出  User-name-test
//
// 如果访问地址中不带 name参数值的话 则改值为空
// 即地址:
// http://laravel.study.com/user
// 输出  User-name-



// 设置参数默认值
// ---------
//
// Route::get('user/{sex?}',function($sex = 'man'){
//  return 'User-sex-'.$sex;
// });
//
// ---------
//
// 访问地址
// http://laravel.study.com/user/woman  
// 输出  User-sex-woman
//
// 如果访问地址中不带 sex参数值的话 则默认值为 man
// 即地址:
// http://laravel.study.com/user
// 输出  User-sex-man
//



// 校验 路由参数

// Route::get('user/{name?}', function($name = 'test'){
//  return 'User-name-'.$name;

// // 后面跟上where 条件 其中第二个值是正则表达式
// })->where('name', '[A-Za-z]+');

// 测试
// http://laravel.study.com/user
//
// 输出
// User-name-test
//
// -------
//
// 测试
// http://laravel.study.com/user/zhangsan
//
// 输出
// User-name-zhangsan
//
// -------
//
// 测试
// http://laravel.study.com/user/123
//
// 报错
// 不符合路由规则



// // 校验 多个字段
// Route::get('user/{id}/{name?}', function($id, $name = 'test'){
//  return 'User-id-'.$id.'-name-'.$name;

// // 如果需要校验多个字段的 那么就用数组传参
// // ID 是数字  name 只能是大小写字母
// })->where(['id'=>'[0-9]+', 'name'=>'[A-Za-z]+']);

路由别名

// 路由别名的主要作用是 在使用 route函数 创建路由地址时,
// 可以使用路由别名创建,别名最好 字符少且能表达路由名称 这样好记也好写。


// // Route::get('user/member-center', ['as'=> 'center', function(){
// Route::get('user/center', ['as'=> 'center', function(){


//  // 使用 route 函数 创建url
//  return route('center');
// }]);

路由群组


// // prefix 是路由前缀
// Route::group(['prefix' => 'member'], function(){
//  Route::get('user/center', function(){
//      return 'member-user-center';
//  });

//  Route::any('multy2', function(){
//      return 'member-multy2';
//  });
// });

//
//
// 测试
// http://laravel.study.com/user/center
//
// 报错
// 没有找到该路由
// 因为我们这个路由组 加了一个前缀  
// 要访问 群组里的所有路由  都必须加前缀
//
//
// 测试
// http://laravel.study.com/member/user/center
//
// 输出
// member-user-center
//
//
//
// 测试
// http://laravel.study.com/member/multy2
//
// 输出
// member-multy2

路由中输出视图

// Route::get('view', function(){

//  // 通过 view 函数 直接返回 渲染后的html
//  return view('welcome');
// });

控制器

怎么新建一个控制器

在 目录 app/http/Controllers/ 目录下新建 控制器文件

// 声明命名空间
namespace App\Http\Controllers;

// 定义类
class MemberController extends Controller
{

  // 基础
    // public function info(){
    //  return 'Member-info';
    // }


    // 绑定参数
    public function info($id){
        return 'Member-info-id-'.$id;
    }

}


控制器和路由怎样进行关联

配置 App\Http\目录下的 routes.php

// 换一个 能接受任何请求的
// Route::any('member/info', ['uses'=>'MemberController@info']);

// // 给绑定控制器的路由起别名
// Route::any('member/info', [
//  'uses'=>'MemberController@info',
//  'as' => 'memberinfo'
// ]);


关联控制器后,路由的特性怎么用

// 给绑定控制器的路由起别名
Route::any('member/{id}', [
    'uses'=>'MemberController@info',
    'as' => 'memberinfo'
])->where('id', '[0-9]+');

// 测试
// http://laravel.study.com/member/123123
//
// 输出
//
// Member-info-id-123123
//
//
// 测试
// http://laravel.study.com/member/aaaa
//
// 报错
// 没有找到该路由
//

视图

怎样新建视图

视图文件存放在 resources\views 目录下
视图的默认后缀名是:.blade.php
文件命名最好和方法名一致

最好一个控制器 对应一个目录

怎样输出视图

// 渲染一个模板文件
// public function info($id){
//  return view('member-info');
// }


// 渲染一个模板  带路径
// public function info($id){
//  return view('Member/info');
// }


// 渲染一个带变量的模板
public function info($id){
  return view('Member/info',[
    'name' => '陈小陌',
    'age' => '21'
  ]);
}

模型

怎么新建模型

在APP目录下创建

命名最好和表名称一样并且采用驼峰命名法

File Name: Member.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class Member extends Model
{
    public static function getMember(){
        return 'name is 陈小陌';
    }
}

怎么使用模型

在控制器中映入模型
然后像普通类一样使用就好了。。。

<?php
namespace App\Http\Controllers;
use App\Member;
class MemberController extends Controller
{
    // 调用模型中的方法
    public function info(){
        return Member::getMember();
    }
}

数据库操作 DB facade

新建数据表与连接数据库


CREATE TABLE IF NOT EXISTS student(
`id` INT AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '姓名',
`age` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',
`sex` TINYINT UNSIGNED NOT NULL DEFAULT 10 COMMENT '性别',
`created_at` INT NOT NULL DEFAULT 0 COMMENT '新增时间',
`updated_at` INT NOT NULL DEFAULT 0 COMMENT '修改时间'
)ENGINE=INNODB DEFAULT CHARSET = UTF8 AUTO_INCREMENT=1001 COMMENT='学生表';


数据库配置文件
config/database.php

打开发现 配置值都是通过 env 函数获取的

env 函数 读取的就是根目录的 .env 文件

配置 或修改

DB_HOST=127.0.0.1
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root

使用DB facade 实现curd

<?php

namespace App\Http\Controllers;

// 引入 Facades DB 类
use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{


    /**
     * facade CURD
     * 使用 DB facade 实现CURD
     */
    public function test(){

        // // 查询
        // $students =  DB::select('select * from student');
        // // var_dump($students);
        // dd($students);
        // // array{}
        // //

        // // 插入
        // $id = DB::insert('insert into student(name, age) values(?, ?)', ['陈小陌', '21']);
        // var_dump($id);
        // // bool(true)
        //

        // // 插入
        // $id = DB::insert('insert into student(name, age) values(?, ?)', ['test', '19']);
        // var_dump($id);
        // // // bool(true)
        //


        // // 修改
        // $row = DB::update('update student set age= ? where name=?', ['20', 'test']);
        // var_dump($row);
        // // int(1)
        //
        //

        // // 有条件查询
        // $students =  DB::select('select * from student where id > ?',[1]);
        // dd($students);


        // // 删除
        // $row = DB::delete('delete from student where id > ?', [1]);
        // var_dump($row);
        // // int(1)
    }
}

数据库操作之 - 查询构造器

查询构造器 简介及新增数据

使用查询构造器修改数据

使用查询构造器删除数据

使用查询构造器查询数据

查询构造器的中的聚合函数

<?php
namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
class StudentController extends Controller
{

    // 测试样例
    // public function test(){
    //  return 'test demo';
    // }
    //


    /**
     * facade CURD
     * 使用 DB facade 实现CURD
     */
    public function test(){

        // // 查询
        // $students =  DB::select('select * from student');
        // // var_dump($students);
        // dd($students);
        // // array{}
        // //

        // // 插入
        // $id = DB::insert('insert into student(name, age) values(?, ?)', ['陈小陌', '21']);
        // var_dump($id);
        // // bool(true)
        //

        // // 插入
        // $id = DB::insert('insert into student(name, age) values(?, ?)', ['test', '19']);
        // var_dump($id);
        // // // bool(true)
        //


        // // 修改
        // $row = DB::update('update student set age= ? where name=?', ['20', 'test']);
        // var_dump($row);
        // // int(1)
        //
        //

        // // 有条件查询
        // $students =  DB::select('select * from student where id > ?',[1]);
        // dd($students);


        // // 删除
        // $row = DB::delete('delete from student where id > ?', [1]);
        // var_dump($row);
        // // int(1)

    }


    // 查询构造器简介
    // Laravel 查询构造器(query builder)
    //
    // 使用pdo 参数绑定 以保护程序免于SQL注入,
    // 因此传入的参数不需要额外转义特殊字符
    //
    // 基本可以满足所有数据库操作,
    // 而且在所有支持的数据库系统上都可以执行
    //




    // 使用查询构造器 新增数据
    //
    public function query(){


        // // 单条数据插入
        // $status  = DB::table('student')->insert(['name'=>'test', 'age'=>18]);
        // var_dump($status);
        // // bool(true)


        // // 新增时 获取新增ID
        //
        // $id  = DB::table('student')->insertGetId(['name'=>'zhangsan', 'age'=>19]);
        // var_dump($id);
        // // int(4)

        // // 批量新增
        //
        // $status  = DB::table('student')->insert([
        //      ['name'=>'name1', 'age'=>18],
        //      ['name'=>'name2', 'age'=>12],
        //      ['name'=>'name3', 'age'=>13]
        //      ]);
        // var_dump($status);
        // // bool(true)
        //

        // dd(DB::select('select * from student'));
    }


    // 使用查询构造器更新数据
    //
    //
    // 更新为指定的内容
    //
    // 自增和自减
    //
    //

    public function query2(){

        // // 更新数据
        // $num = DB::table('student')
        //  ->where('id', 1)
        //  ->update(['age'=>22]);
     //    var_dump($num);

     //    // int(1)
     //    // 更新数据一定要带条件


//      // 字段 自增
//      $num = DB::table('student')->increment('age');
//      var_dump($num);
//      // int(6)


//      // 字段 自增  可定义步长
//      $num = DB::table('student')->increment('age', 3);
//      var_dump($num);
//      // int(6)


//      // 字段 自减
//      $num = DB::table('student')->decrement('age');
//      var_dump($num);
//      // int(6)       

//      // 字段 自减  可定义步长
//      $num = DB::table('student')->decrement('age', 3);
//      var_dump($num);
//      // int(6)


//      // 字段自增自减   加条件
//      $num = DB::table('student')
//              ->where('id', 1)
//              ->decrement('age');
//      var_dump($num);
//      // int(1)



//      // 自增时 同时修改别的字段数据
//      $num = DB::table('student')
//              ->where('id', 1)
//              ->decrement('age', 1, ['name'=>'chenxiaomo']);
//      var_dump($num);
//      // int(1)
    }


    // 使用查询构造器删除数据
    // delete
    // truncate

    public function query3(){
    //      $num = DB::table('student')
    //              ->where('id', 7)
    //              ->delete();
    //      var_dump($num);
    //      // int(1)

    //      $num = DB::table('student')
    //              ->where('age', '<', 18)
    //              ->delete();
    //      var_dump($num);
    //      // int(1)


    //      // 清空表  慎用
    //      DB::table('student')->truncate();

    }


    // 使用查询构造器查询数据

    // Get 获取表的所有数据

    // first  获取一条记录

    // where  条件容器

    // whereRaw  多条件 容器

    // pluck    返回结果集指定的字段  单个

    // lists    返回结果集的指定字段   区别是  可以使用摸个字段作为键

    // select   查询 指定字段

    // chunk  分段的get 分段获取数据



    public function query4(){


        // 获取表的所有数据
//      $data = DB::table('student')->get();
//      dump($data);


        // 获取一条数据 没有条件时 获取的是第一条
//      $data = DB::table('student')->first();
//      dump($data);


//      // 根据 排序 获取一条
//      $data = DB::table('student')
//                  ->orderBy('id', 'desc')
//                  ->first();
//      dump($data);


//      // 加入查询条件
//      $data = DB::table('student')
//          ->where('age', '>=', '18')
//          ->get();
//      dump($data);

//      // 复合条件 查询
//      $data = DB::table('student')
//          ->whereRaw('id >= ? and age > ?', [2, 16])
//          ->get();
//      dump($data);


//      // 获取符合条件的    只只查询一个字段用这个
//      $data = DB::table('student')
//          ->whereRaw('id >= ? and age > ?', [2, 16])
//          ->pluck('name');
//          // ->pluck('name, age');   报错  哭
//          // ->pluck(['name', 'age']);   报错  哭
//      dump($data);


//      // 查询指定字段  并且用指定字段做下标
//      $data = DB::table('student')->lists('name', 'id');
//      dump($data);


//      // 查询指定字段
//      $data = DB::table('student')
//                  ->select(['id','name'])
//                  ->get();
//      dump($data);



        // chunk
        // 如果数据量大  但是要非要都查询出来的情况下 使用 chunk
        // 第一个参数是步长
        // 第二个是回调函数
        // 根据 步长 来约定  每次查询的数据条数  然后循环查询 直到 查询完毕
        $data = DB::table('student')->chunk(2, function($data){
            dump($data);

            // 如果 遇到某个条件 需要终止查询  那么直接返回 false 即可终止

            // 实例
            // 如果  两个人总的年龄 小于40的话 就退出查询   
            // (当然应该没有这么奇葩的需求)
            $ages = array_column($data, 'age');
            if(array_sum($ages) < 40){
                return false;
            }

        });

    }



    // 查询构造器中的聚合函数

    // count

    // max

    // min

    // avg

    // sum


    public function query5(){


//      // 计数       
//      $data = DB::table('student')->count();
//      
//      // 最小
//      $data = DB::table('student')->min('age');
//      
//      // 最大
//      $data = DB::table('student')->max('age');
//      
//      // 平均值
//      $data = DB::table('student')->avg('age');
//      
//      // 合计
//      $data = DB::table('student')->sum('age');

        dump($data);
    }

}

数据库操作 Eloquent ORM

Eloquent ORM 简介

Eloquent ORM简介

是 laravel自带的
每个数据表都有一个与之相对应的模型(model)用于和数据表交互

模型的建立

在 APP 目录下创建
文件名和表名一致,且用驼峰命名法表示
如果 类中没有申明 对应的表名称,那么默认是以文件名的复数作为 表名
即:
文件名: student
默认表名: students

如果需要制定表名 就声明一个 $table 属性

// 声明 模型对应的关联表
// 指定表名
protected  $table  = 'student';

默认主键名为ID 如果不是则需要进行申明

protected $primaryKey = 'id';

最基础的模型 实例

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;

class Student extends Model{

  // 指定表名
  protected  $table  = 'student';

  // 指定主键
  protected $primaryKey = 'id';

}

Eloquent ORM 中的查询

all() <br />
find() <br />
findOrfail(); <br />
查询构造器在ORM中的使用<br />


//      // all  获取表的所有数据
//      $students = Student::all();
//      dd($students);
//      // 打印后 发现都是 集合  
//      // 数据内容 在  每个 集合 中的  attributes 字段里
//      

        // 根据主键进行查询
        //
//      $student = Student::find(1);
//      dd($student);


//      // 根据主键进行查找  如果没有找到  则抛出异常
//      $student = Student::findOrFail(1); // 存在的
//      // $student = Student::findOrFail(1001); // 不存在的  抛出异常
//      dd($student);
//      


        // 查询构造器 在 ROM中的使用


//      // 查询所有的表数据
//      $data = Student::get();
//      dump($data);


        // 有条件的查询    查询一条记录
//      $data = Student::where('id', '>', 1)
//              ->orderBy('age', 'desc')
//              ->first();
//      dump($data);


//      // chunk 的使用
//      Student::chunk(2, function($students){
//          dump($students);
//      });
//      

        // 聚合函数的使用
//      $data = Student::count(); // 计数
//      $data = Student::max('age'); // 最大值
//      $data = Student::where('id', '>', 1)->max('age');
//      dump($data);

Eloquent ORM 新增数据, 自定义时间戳 及 批量赋值的使用


  // Eloquent ORM 新增数据, 自定义时间戳 及 批量赋值的使用
    //     通过模型新增数据 (涉及到自定义时间戳)
    //     使用模型的Create方法新增数据(涉及到批量赋值)

    public function orm2(){

        // 使用模型对象新增数据
//  $student = new Student();
//  $student->name = 'zhangsan';
//  $student->age  = 20;
//  $status = $student->save();
//  dump($status);





        // 由于 创建时间  和修改时间的字段名  是 create_at 和 updated_at
        // 这两个是能够被 Laravel 框架 自动识别的  
        // 也就是说能够自动进行维护

        // 开启 时间戳的方法
        // 在模型中  定义 $timestamps 属性  
        // 设置 TRUE 为开启
        // 设置 FALSE 为关闭

        // 我们也可以对 维护时间的两个函数 进行重定义
        // 创建函数为  getDateFormat
        // 读取函数为  asasDateTime($value)
        //    读取 如果默认是时间戳格式的话  会自动转为 2016-11-10 09:49:53 这种格式

        // 查询  自动维护时间戳的部分  
//      $student = Student::find(10);
//      // echo $student->created_at;
//      echo date("Y-m-d H:i:s", $student->created_at);





        // 使用模型的Create方法新增数据
        // 默认 模型里 是不允许批量赋值的
        // 如果要使用批量赋值  需要到模型 重新定义一个 字段

        // 有两个属性来 管理批量赋值 即 $fillable, $guarded
        // $fillable 允许批量赋值的字段列表  用 [] 数组表示值
        // $guarded  不允许批量赋值的字段列表  用 [] 数组表示值

//      $student  = Student::create(
//          ['name'=> 'imooc', 'age'=> 18]
//      );
//      dd($student);






        // firstOrCreate
        // 先按 给出的字段查询数据
        // 如果 找到了 就返回数据
        // 如果 没找到 就新增一条数据 并 返回创建后的实例

        // 存在的
//      $status =  Student::firstOrCreate(
//          ['name'=>'zhangsan']
//      );
//      

        // 不存在的就创建
//      $status =  Student::firstOrCreate(
//          ['name'=> mt_rand(0, 1000)]
//      );


//      dump($status);
//      


        // firstOrNew
        // 以属性查找 数据
        // 如果能查到 数据  就返回数据信息
        // 如果没有找到 就创建实例 但是 不像 firstOrCreate直接插入
        // 如果需要插入到数据库 则 需要手动 调用 save()
        $student = Student::firstOrNew(
            ['name'=>'imoocsss']
        );
        dump($student);
        exit();

        // 保存到数据库
        $status = $student->save();
        dump($status);
    }

使用 Eloquent ORM 修改数据

// 使用 Eloquent ORM 修改数据
    public function orm3(){


        // 修改单条数据

        // 查询数据
//      $student = Student::find(13);
//      dump($student);
//      
//      // 修改
//      $student->name = ' update one';
//      dump($student);
//      
//      // 保存
//      $status = $student->save();
//      dump($status);


        // 修改多条数据  返回的是影响行数
        $status = Student::where('id', '>', 10)->update(['age'=> 28]);
        dump($status);

    }

使用 Eloquent ORM 删除数据

// 使用 Eloquent ORM 删除数据
public function orm4(){

  // 单条删除


  // 通过模型删除
//      $student = Student::find(14);
//      $status = $student->delete();
//      dump($status);


  // 通过主键删除  返回影响行数
//      $status = Student::destroy(13);
//      $status = Student::destroy(11, 12);
//      $status = Student::destroy([11, 12]);



  // 条件 删除
  $status = Student::where('id', '>', 6)->delete();
  dump($status);        
}

Bkade 模板引擎

Blade 模板引擎简介及模板继承的使用

简介

Blade 是 Laravel 自带的模板引擎

模板继承

section
    section 是用来定义一个视图片段的
yield
    yield 是用来指定某个section 的内容
    可以把它想象为占位符
    用子模板来实现它
extends
    继承某个模板
parent
    引入父级的内容
    如果没有引入 则 这块内容会被 直接覆盖
实例
主模板 文件路径 \resources\views\section\layouts.blade.php
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>轻松学会Laravel - @yield('title')</title>
        <style>
    
            .header {
                width: 1000px;
                height: 150px;
                margin:0 auto;
                background: #f5f5f5;
                border: 1px solid #ddd;
            }
    
            .main {
                width: 1000px;
                height: 300px;
                margin:0 auto;
                margin-top: 15px;
                clear: both;
            }
    
            .main .sidebar {
                float: left;
                width: 20%;
                height: inherit;
                background: #f5f5f5;
                border: 1px solid #ddd;
            }
    
            .main .content {
                float: right;
                width: 75%;
                height: inherit;
                background: #f5f5f5;
                border: 1px solid #ddd;
            }
    
            .footer {
                width: 1000px;
                height: 150px;
                margin:0 auto;
                margin-top: 15px;
                background: #f5f5f5;
                border: 1px solid #ddd;
            }
        </style>
    </head>
    <body>
        <div class="header">
            @section('header')
            头部
            @show
        </div>
        
        <div class="main">
            <div class="sidebar">
                @section('sidebar')
                侧边栏
                @show
            </div>
        
            <div class="content">
                @yield('content', '主要内容区域')
            </div>
        </div>
        
        <div class="footer">
            @section('footer')
            底部
            @show
        </div>
        
    </body>
</html>

视图文件设置
<!-- 继承 主模板 -->
@extends('layouts')


<!-- 重新定义头部  -->
@section('header')
    <!-- 继承 父级 -->
    @parent

    header
@stop


<!-- 重新定义 侧边栏  直接覆盖 -->
@section('sidebar')
    sidebar
@stop


<!-- 重新定义 内容片段 -->
@section('content')
    @parent
    content
@stop

基础语法及 include 的使用

模板中输出变量

模板中调用PHP代码

原样输出

模板中的注释

引入子视图 include的使用

二级视图文件
<!-- 继承 主模板 -->
@extends('layouts')


<!-- 重新定义头部  -->
@section('header')
    <!-- 继承 父级 -->
    @parent

    header
@stop


<!-- 重新定义 侧边栏  直接覆盖 -->
@section('sidebar')
    sidebar
@stop


<!-- 重新定义 内容片段 -->
@section('content')
    content
    
    <!-- 模板中调用变量 -->
    <p>{{$name}}</p>
    
    
    <!-- 模板中 调用PHP 代码-->
    <p>{{time()}}</p>
    <p>{{date('Y-m-d H:i:s')}}</p>

    <p>{{in_array($name, $arr) ? 'true' : 'false'}}</p>
    <p>{{var_dump($arr)}}</p>

    <p>{{isset($name) ? $name : 'default'}}</p>
    <p>{{ $name or 'default'}}</p>

    <!-- 原样输出 -->
    <p>@{{ $name}}</p>

    <!-- 模板中的注释 -->
    {{-- 模板中的注释 浏览器中看不到的哦--}}

    

    {{-- 引入子视图--}}
    @include('section.common1', ['message'=>'我是错误信息'])
    

@stop

控制器代码
    /**
     * 视图学习1
     * @return [type] [description]
     */
    public function section1(){

        $name = 'test';

        $arr = ['test', 'imooc'];
        
        return view('section/section1', [
            'name'=>$name,
            'arr'=>$arr
        ]);
    }

section/common1(inclued 文件) 代码
<p>我是inclued {{ $message }}</p>

流程控制

if

unless

for

foreach

forelse

<!-- 重新定义 内容片段 -->
@section('content')
    content
    
    <br>

    @if ($name == 'imooc')
        I'm imooc
    @elseif($name == 'test') 
        I'm test
    @else
        who am i?
    @endif
    

    <br>
    
    @if (in_array($name, $arr))
        true
    @else 
        false
    @endif
    

    <br>
    <!-- 如果不相等就输出  -->
    <!-- unless 意为 if的取反 -->
    @unless($name == 'imooc')
        I'm imooc
    @endunless
    
    
    <br>
    <!-- for 循环 -->
    @for($i=1;$i<=5;$i++)
        <p>{{$i}}</p>
    @endfor

    <br>    
    
    <!-- foreach 循环 -->
    @foreach($students as $student)
        <p>{{$student->name}}</p>
    @endforeach
    
    
    <!-- forelse -->
    {{-- 如果元素为空 则显示 empty的内容--}}
    @forelse($forelse as $student)
        <p>{{$student->name}}</p>
    @empty
        <p>暂无数据</p>
    @endforelse


@stop

模板中的url

url

是通过路由的名称来生成 URL

action

是通过制定的控制器和方法 来生产URL

route

是通过路由的别名来生成URL

实例

<a href="{{url('urlTest')}}"> url 路由名称生成</a>
<a href="{{action('StudentController@section2')}}">action 指定控制器和方法名生成</a>
<a href="{{route('url')}}">route 路由别名 生成</a>

课程总结

安装Laravel
核心目录文件
路由
MVC
数据库操作
模板引擎

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 原文链接 必备品 文档:Documentation API:API Reference 视频:Laracasts ...
    layjoy阅读 8,603评论 0 121
  • 必备品文档:DocumentationAPI: API Reference视频:Laracasts速查表:Lara...
    ethanzhang阅读 5,739评论 0 68
  • 简介 laravel 使实施认证的变得非常简单,事实上,它提供了非常全面的配置项以适应应用的业务。认证的配置文件存...
    Dearmadman阅读 6,113评论 2 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,601评论 18 139
  • 1.路由:通过路由将请求发送至处理函数 2.Laravel是简洁优雅的PHP web开发框架,具有富于表达性且简洁...
    Mr丶T阅读 1,323评论 0 0