LTS : long time support.

download url : http://www.golaravel.com/download/

第一篇

目录介绍:

​ resource:包含了原始的资源文件和视图文件。

​ storage:包含编译好了的缓存文件以及基于文件产生的log和session等等。

​ vendor:包含comporsor下载的依赖模块。

路由

路由简介

​ get, post, put, patch, delete

基本路由

Route::get('michael', function(){
    return 'michaelff';
});     //http://localhost/laravel/public/michael
Route::post('ispost', function(){
    return 'michaelff';
});

多请求路由

Route::match(['get','post'],'mul', function(){ //// 自 PHP 5.4 起,数组 [ ]
    return 'multy request';
});         // http://localhost/laravel/public/mul
Route::any('leon', function () {
    return view('welcome');
});         // http://localhost/laravel/public/leon  所有请求方式

路由参数 (一个注意点)

Route::get('leon/{id}', function ($id) {
    return 'name - ' . $id;
});     // http://localhost/laravel/public/leon/12 单双引号并不影响,所以建议单引号
Route::get('leon/{name?}', function ($name = 'default') {
    return 'name - ' . $name;
});     // http://localhost/laravel/public/leon 或者 http://localhost/laravel/public/leon/people 但是不可以是 http://localhost/laravel/public/leon/(注意点) 用 route 返回的 url 不带'/'
Route::get('leon/{name?}', function ($name = 'default') {
    return 'name - ' . $name;
})->where('name', '[a-z]+');     // http://localhost/laravel/public/leon/11 利用正则限制,此请求报错
Route::get('leon/{id}/{name?}', function ($id, $name = 'default') {
    return 'name - ' . $id . '-' . $name;
})->where(['name' => '[a-z]+', 'id' => '\d+']);     // 多参数并正则验证    http://localhost/laravel/public/leon/123/michael

路由别名

Route::get('user/center', ['as' => 'center', function () {
    return route('center');
}]);
// 请求: GET   http://localhost/laravel/public/user/center
// 返回: http://localhost/laravel/public/user/center
// 方便一次修改 user/center

路由群组

Route::group(['prefix' => 'home'], function () {
    Route::any('leon', function () {
        return view('welcome');
    });
    Route::get('isget', function () {
        return 'this is get';
    });
});
// 请求: GET   http://localhost/laravel/public/home/isget
// 请求: GET   http://localhost/laravel/public/home/leon

路由输出视图

Route::any('leon', function () {
  return view('welcome');
});

控制器

建立控制器

<?php
namespace App\Http\Controllers;
class MemberController extends Controller
{
    public function info()
    {
        return 'ok';
    }
}

控制器和路由关联

Route::get('member/info', 'MemberController@info');
// 或者
Route::get('member/info', ['uses' => 'MemberController@info']);

关联后,路由特性怎么使用

// 结合路由别名
Route::get('member/info', ['uses' => 'MemberController@info', 'as' => 'meminfo']);
// 可以和路由的基础知识结合使用

视图

怎样新建视图

// 新建 php 文件或者 blade.php 文件

怎么输出视图(一个注意点)

// view('myview');
// view('michael/age', ['name' => 'michael', 'age' => 12]);
// 视图中使用变量 {{$name}} {{$age}} 需要在 blade.php 中才解析,php 中并不解析(注意点)

模型

怎样新建模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Member extends Model
{
    public static function getName()
    {
        return 'this is my name';
    }
}

怎样使用模型

use App\Member;
echo Member::getName();

第二篇

laravel 提供三种操作数据库方式:DB facade(原始查找),查询构造器,Eloquent ORM。

facade : 正面。

Eloquent:雄辩。

DB facade

新建数据库与连接数据库

// .env 文件
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=root

// config/database.php 找到 mysql
'prefix' => '',   //前缀

使用 DB facade 实现 CURD

$flag = DB::insert('insert into student(name, age) values(?,?)'
     , ["helen", 16]
);
var_dump($flag);
/**
bool(true)
**/
$aStudent = DB::select('select * from student');
var_dump($aStudent);
/**
array(1) {
  [0]=>
  object(stdClass)#126 (3) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(5) "helen"
    ["age"]=>
    int(16)
  }
}
可以通过 dd 来人性化输出
**/
$num = DB::update('update student set age = ? where name = ?'
    , [34, 'helen']
);
var_dump($num);
// int(10)  返回修改行数
$num = DB::delete('delete from student where id > ?', [1]);
var_dump($num);
// int(10)  返回修改行数

查询构造器

新增数据

$bool = DB::table('student')->insert(['name' => 'michael', 'age' => 1]);
var_dump($bool);
$id = DB::table('student')->insertGetId(['name' => 'leon', 'age' => 1]);
var_dump($id);
$bool = DB::table('student')->insert([
    ['name' => 'leon', 'age' => 1],
    ['name' => 'michael', 'age' => 1],
]);
var_dump($bool);

修改数据

  1. 更新指定内容
$num = DB::table('student')->where('id', 12)->update(['age' => 11]);
// where 里面可以是关联数组,也可以是两个参数。
// update 里面必须是数组
  1. 自增和自减
$num = DB::table('student')->increment('age');
$num = DB::table('student')->increment('age', 3);
$num = DB::table('student')->decrement('age');
$num = DB::table('student')->where('id', '>=', 12)->increment('age', 5, ['name' => 'Bob']);
// 先用 where !!如果先用 increment 会返回整数,无法链式操作

删除数据

  1. delete
$num = DB::table('student')->where(['id' => 23])->delete();
$num = DB::table('student')->delete();
  1. truncate
DB::table('student')->truncate(); // 什么都不返回

查询数据

get

$student = DB::table('student')->get();     // 获取所有

first

$student = DB::table('student')->orderBy('id', 'desc')->first();

where

$student = DB::table('student')->where('id', '>=', '11')->get();
$student = DB::table('student')
    ->whereRaw('id >= ? and age = ?', [12, 22])->get();

pluck:采、摘

$student = DB::table('student')->pluck('name');

select

$student = DB::table('student')->select('id', 'name')->get();

chunk:大块的

DB::table('student')->orderBy('id')->chunk(3, function($student){
    var_dump($student);
});

聚合函数

count

$count = DB::table('student')->count();

max

$max = DB::table('student')->max('age');

min

$min = DB::table('student')->min('age');

avg

$avg = DB::table('student')->avg('age');

sum

$sum = DB::table('student')->sum('age');

Eloquent ORM

简介、模型建立、查询数据

<?php
namespace App;
use ...;
class Student extends Model {
    protected $table = 'student';  // 默认是 students
    protected $primaryKey = 'id';   // 默认是 id
}
$students = Student::all();
$student = Student::find(33);
$student = Student::findOrFail(123);    //找不到就报错
// 可以结合构造查询器里的内容一起使用,比如 chunk、count 等
$students = Student::get();
$student = Student::where('id', '>', '12')->orderBy('age', 'desc')->first();

新增数据、自定义时间戳、批量赋值

  1. 通过模型新增数据(涉及到自定义时间戳)
$object = new Student();
$object->name = 'leon';
$object->age = 12;
$flag = $object->save();    // 会在数据库中填充 created_at 和 updated_at 。
                            // 在模型中设置 public $timestamps = false; 即可关闭
// 可在模型中设置怎样更新created_at 和 updated_at 字段,如下
protected function getDateFormat() {
    return time();
}

// 获取 created_at 和 updated_at 字段
$student = Student::find(12);
echo $student->created_at;      //输出 2017-03-22 17:11:11
// 如果想输出它本来的样子,可以这样
protected function asDateTime($val) {
    return $val;
}
  1. 使用模型 create 方法新增数据 (涉及到批量赋值)
// 首先要指定批量赋值的字段
protected $fillable = ['name', 'age'];

// 然后批量赋值
$student = Student::create(['name' => 'mm', 'age' => 12]);

// 指定不允许批量赋值的字段
protected $guarded = ['name'];
$student = Student::firstOrCreate(['name' => 'mm']);    // 没有就插入并取出,有则取出
$student = Student::firstOrNew(['name' => 'newmm']);    // 有则取出,没有就创建对象,想存数据库则save
$flag = $student->save();

修改数据

$student = Student::find(102);
$student->name = 'kitt';
$bool = $student->save();       // 此时还会更新 updated_at 的时间戳
$num = Student::where('id', '>', 101)->update(['age' => 12]);   // 会更新 updated_at 的时间戳

删除数据

  1. 通过模型删除
$student = Student::find(1022);
$bool = $student->delete();
  1. 通过条件删除
$num = Student::where('id', '>', 101)->delete(); 

第三篇

blade模版引擎

模版继承

section

yield

extends

parent

// 父模版
@section('sidebar')
sidebar html 内容
@show

@yield('content', '一些内容');
// 继承
@extends('member.layouts')

@section('sidebar')
@parent
换了内容
@stop

// yield 一样用
@section('content')
    新的内容
@stop  

基础语法

// 控制器关联模版
return view('student.show', ['name' => 'leon']);

// 输出变量和一句话php都可以像一下使用
{{ $name }}
{{ date('Y') }}
{{ isset($name) ? $name : 'default' }}  ==  {{ $name or 'default' }}

// 原样输出
@{{ $name }}

// 模版注释 (浏览器查看不到的注释)
{{-- 我是注释 --}}

// 引入子视图
@include('student.show')
// 可以传值给子视图
@include('student.show', ['msg' => 'welcome'])  

流程控制

// if
@if ($id == 'leon')
  i am leon
@elseif ($id == '111')
  sss
@else
  ddd
@endif

// unless
@unless ($name == 'michael')   // 如果 name 值是 michael 不走下面!!!
  oh
@endunless

// for
@for($i=1;$i<10;$i++)
  sss{{$i}}
@endfor

// foreach
@foreach($stus as $stu)
  {{$stu->name}}
@endforeach

// forelse
@forelse ($users as $user)
    <li>{{ $user->name }}</li>
@empty
    <p>没有用户</p>
@endforelse

// while
@while (true)
    <p>我永远都在跑循环。</p>
@endwhile

模版中的url

Route::any('url', ['as' => 'url', 'uses'=>'StudentController@urlTest']);

// url()            通过路由名称生成url
{{url('url')}}
// action()         通过指定控制器和方法名生成url
{{action('StudentController@urlTest')}}
// route()          通过别名生成url
{{route('url')}}    

laravel 学习之第一章的更多相关文章

  1. Java学习记录第一章

    学习Java第一章的记录,这一章主要记录的是Java的最基础部分的了解知识,了解Java的特性和开发环境还有Java语言的优缺点. 计算机语言的发展大概过程:机器语言--->汇编语言---> ...

  2. 《跟我学Shiro》学习笔记 第一章:Shiro简介

    前言 现在在学习Shiro,参照着张开涛老师的博客进行学习,然后自己写博客记录一下学习中的知识点,一来可以加深理解,二来以后遗忘了可以查阅.没有学习过Shiro的小伙伴,也可以和我一起学习,大家共同进 ...

  3. JavaScript高级程序设计学习笔记第一章

    作为学习javascript的小白,为了督促自己读书,写下自己在读书时的提炼的关键点. 第一章: 1.JavaScript简史:Netscape Navigator中的JavaScript与Inter ...

  4. Spirng学习指南-第一章(完)

    Spring学习指南 内容提要 ​ Spring框架是以简化J2EE应用程序开发为特定目标而创建的,是当前最流行的Java开发框架. ​ 本书从介绍Spring框架入手,针对Spring4.3和Jav ...

  5. C语言学习笔记第一章——开篇

    本文章B站有对应视频 (本文图片.部分文字引用c primer plus) 什么是C语言 顾名思义,c语言是一门语言,但是和我们所讲的话不同,它是一门编程语言,是为了让机器可以听懂人的意思所以编写的一 ...

  6. Windows程序设计(第五版)学习:第一章 起步

    第一章 起步 1,windows主要的三个动态库: kernel32.dll负责操作系统的传统工作,包括内存管理.文件输入以及任务管理等. user32.dll负责用户界面的操作,即所有窗口的管理 g ...

  7. Java学习笔记 第一章 入门<转>

    第一章 JAVA入门 一.基础常识 1.软件开发 什么是软件? 软件:一系列按照特定顺序组织的计算机数据和指令的集合 系统软件:DOS,Windows,Linux 应用软件:扫雷.QQ.迅雷 什么是开 ...

  8. c#高级编程第七版 学习笔记 第一章 .NET体系结构

    第一章      .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...

  9. [HeadFirst-JSPServlet学习笔记][第一章:前言与概述]

    第一章 前言与概述 web服务器做什么? 答:接收客户请求,然后向客户返回结果 web客户做什么? 答:此处客户指浏览器,web客户允许用户请求服务器上的某个资源,并向用户展现请求的结果. html ...

随机推荐

  1. 怎样用 Bash 编程:逻辑操作符和 shell 扩展

    学习逻辑操作符和 shell 扩展,本文是三篇 Bash 编程系列的第二篇. Bash 是一种强大的编程语言,完美契合命令行和 shell 脚本.本系列(三篇文章,基于我的 三集 Linux 自学课程 ...

  2. 迭代器(Iterator)的使用

    迭代器(Iterator)的使用 我这里主要讲一下聚合式迭代器(IteratorAggregate) 因为聚合式迭代器和ArrayIterator配合使用可以直接跳过Iterator需要实现的5个方法 ...

  3. 清北学堂2019.8.10 & 清北学堂2019.8.11 & 清北学堂2019.8.12

    Day 5 杨思祺(YOUSIKI) 今天的难度逐渐上升,我也没做什么笔记 开始口胡正解 今天的主要内容是最小生成树,树上倍增和树链剖分 最小生成树 Prim 将所有点分为两个集合,已经和点 1 连通 ...

  4. C# 防火墙操作之启用与关闭

    通过代码操作防火墙的方式有两种:一是代码操作修改注册表启用或关闭防火墙:二是直接操作防火墙对象来启用或关闭防火墙.不论哪一种方式,都需要使用管理员权限,所以操作前需要判断程序是否具有管理员权限. 1. ...

  5. 用Python将二进制文件转化为数组并以文件形式存储

    最近在学习Python,发现Python语言非常适合文件的批处理操作.本文将介绍一下用Python如何实现将一个二进制bin文件转化为一个常量数组的.c文件存储起来.这为我们在一些没有文件系统不能调用 ...

  6. 浏览器端-W3School-HTML:HTML DOM cells 集合

    ylbtech-浏览器端-W3School-HTML:HTML DOM cells 集合 1.返回顶部 1. HTML DOM cells 集合 HTML DOM Table 对象 定义和用法 cel ...

  7. Emacs 浏览网页

    Emacs 浏览网页非常方便,还可以忽略掉那些烦人的小广告.特别是在看小说 的时候~ 在之前了解如何通过Emacs浏览网页时,大部分人使用的是w3m,折腾了半天,没能成功.后来无意间发现 ,有EWW ...

  8. layui给select下拉框赋值

    转: layui给select下拉框赋值 layui给select下拉框赋值 //重新渲染表单函数 function renderForm() { layui.use('form', function ...

  9. apache域名跳转

    状态码:*301: 永久重定向,域名跳转一定要用301,对搜索引擎友好的. 302:临时重定向在虚拟主机配置文件/usr/local/apache2/conf/extra/httpd-vhosts & ...

  10. spring + spring-data-redist + Redis 单机、集群(cluster模式,哨兵模式)

    一.单机redis配置 1. 配置redis连接池 <bean id="jedisPoolConfig" class="redis.clients.jedis.Je ...