laravel学习笔记1--基础
一、安装
1、安装
composer create-project laravel/laravel=v5.5.28 laravel
2、测试
配置nginx根目录为laravel/public,并且美化路由:
root /var/www/laravel/public;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
http://localhost/index.php,出现如下页面证明安装laravel成功:
二、路由Route:
1、get案例:
Route::get('basic1', function() {
return 'hello basic1';
});
2、post案例:
Route::post('basic2', function() {
return 'hello basic2';
});
备注:如果出现如下页面
原因:因为post方法需要进行csrf验证,这里用postman测试,可以将该url设置为不用csrf验证,处理如下:
然后再次访问,即可:
3、多请求路由:
Route::match(['get', 'post'], 'multy1', function() {
return 'hello multy1';
});
Route::any('multy2', function() {
return 'hello multy2';
});
4、路由参数:
1)传递参数:
Route::get('user/{id}', function($id) {
return 'hello user' . $id;
});
2)设置参数可选:
Route::get('user/{id?}', function($id = ) {
return 'hello user' . $id;
});
3)参数验证:
Route::get('user/{id?}', function($id = ) {
return 'hello user' . $id;
})->where('id', '[0-9]+');
这时,如果请求参数不符合条件,则会报错:
多参数验证写法:
Route::get('user/{id?}/{name?}', function($id = , $name = 'lily') {
return 'hello user id:' . $id . ', name:' . $name;
})->where(['id' => '[0-9]+', 'name' => '[a-zA-Z]+']);
5、路由别名:
Route::get('user/center', ['as' => 'center', function(){
return route('center');
}]);
6、路由群组:
Route::group(['prefix' => 'member'], function() {
Route::get('user/center', ['as' => 'center', function(){
return route('center');
}]); Route::any('multy2', function() {
return 'hello multy2';
});
});
7、路由中输出视图:
三、控制器
1、创建控制器:
<?php
namespace App\Http\Controllers; class MemberController extends Controller
{
public function info()
{
return 'member-info';
}
}
2、路由访问控制器下的方法:
1)
Route::get('member/info', 'MemberController@info');
2)
Route::get('member/info', ['uses' => 'MemberController@info']);
四、视图:
1、创建及传参
<?php
namespace App\Http\Controllers; class MemberController extends Controller
{
public function info()
{
return view('member/info', [
'name' => 'lisi',
'age' =>
]);
}
}
五、模型:
1、创建模型:
<?php
namespace App; use Illuminate\Database\Eloquent\Model;
class Member extends Model
{
public static function getMember()
{
return 'member name is sean';
}
}
六、数据库操作:
1、数据库准备:
CREATE database laravel;
use laravel;
CREATE TABLE IF NOT EXISTS student( `id` INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR() NOT NULL DEFAULT '' COMMENT '姓名', `age` TINYINT UNSIGNED NOT NULL DEFAULT , `sex` TINYINT UNSIGNED NOT NULL DEFAULT , `created_at` INT NOT NULL DEFAULT , `updated_at` INT NOT NULL DEFAULT ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT= COMMENT='学生表';
2、laravel配置数据库:
3、使用facade实现CURD
1)查询:
$students = DB::select('select * from student where id > ?',
[1]);
2)新增:
$bool = DB::insert('insert into student(name, age) values (?, ?)',
['tom', ]);
3)修改:
$num = DB::update('update student set age = ? where name = ?',
[, 'tom']);
4)删除:
$num = DB::delete('delete from student where id = ?',
[]);
4、查询构造器实现CURD:
1)新增:
$bool = DB::table('student')->insert([
'name' => 'zhangsan',
'age' =>
]);
2)新增并且返回自增id:
$id = DB::table('student')->insertGetId([
'name' => 'lisi',
'age' =>
]);
3)插入多条数据:
$bool = DB::table('student')->insert([
['name' => 'test1','age' => ],
['name' => 'test2','age' => ],
]);
4)更新数据:
$num = DB::table('student')
->where('id', )
->update(['age' => ]);
5)自增,默认为自增1:
$num = DB::table('student')
->where('id', )
->increment('age', );
6)自减,默认为自减1:
$num = DB::table('student')
->where('id', )
->decrement('age', );
7)自增同时更改其他字段:
$num = DB::table('student')
->where('id', )
->increment('age', , ['name' => 'haha']);
8)删除:
$num = DB::table('student')
->where('id', '>=', )
->delete();
9)清空数据表:
DB::table('student')
->truncate();
10)查询
10.1获取所有数据:get
$students = DB::table('student')->get();
10.2获取一条数据:first
$student = DB::table('student')->orderBy('id', 'desc')->first();
10.3多个查询条件查询语句:whereRaw
$students = DB::table('student')
->whereRaw('id >= ? and age > ?', [, ])
->get();
10.4返回指定单个字段:pluck
$students = DB::table('student')
->pluck('name');
10.5查询指定的字段:select
$students = DB::table('student')
->select('name', 'age')
->get();
10.6分批查询,适用于表数据很多的时候使用:chunk
DB::table('student')
->orderBy('id', 'desc')
->chunk(, function($students) {
var_dump($students);
});
11)聚合函数
11.1计数:count
$nums = DB::table('student')->count();
11.2查询最大值、最小值:max、min
$age = DB::table('student')->max('age');
$age = DB::table('student')->min('age');
11.3平均数:avg
$age = DB::table('student')->avg('age');
11.4求和:sum
$age = DB::table('student')->sum('age');
4、Eloquent ORM模型的建立及查询数据
1)建立模型
<?php
namespace App; use Illuminate\Database\Eloquent\Model; /**
*
*/
class Student extends Model
{
// 指定表名
protected $table = 'student';
// 指定主键
protected $primaryKey = 'id'; // 自动维护时间戳
public $timestamps = true; // 时间戳格式
protected function getDateFormat()
{
return time();
}
}
2、查询
1)查询所有记录:all
$students = Student::all();
2)根据主键查询一条数据:find
$students = Student::find();
3)根据主键查询一条数据,查询不到抛出异常:findOrFail
$students = Student::findOrFail();
4)可用查询构造器的方法,如下所示,其他方法类似:
Student::orderBy('id', 'desc')
->chunk(, function($students){
var_dump($students);
});
3、新增数据:
1)新增
$student = new Student();
$student->name = 'jose';
$student->age = ;
$bool = $student->save();
2)新增的数据更新时间戳和添加时间戳取出时是自动被格式化了的时间:
$student = Student::find();
echo $student->updated_at;
如果不想模型自动格式化时间,需要在模型里添加asDateTime方法:
// 取消自动格式化时间
protected function asDateTime($val)
{
return $val;
}
3)create新增数据:
$student = Student::create(
['name' => 'xiaoen', 'age' => ]
);
前提条件是模型需要设置允许批量赋值的字段或不允许批量赋值的字段
// 指定允许批量赋值的字段
protected $fillable = ['name', 'age']; // 指定不允许批量赋值的字段
protected $guarded = [];
4)查找数据,如果查找不到则新增数据:firstOrCreate
$student = Student::firstOrCreate(
['name' => 'xiaoen1', 'age' => ]
);
5)查找数据,如果没有数据则创建数据对象,需要保存到数据库时再调用save方法:firstOrNew
$student = Student::firstOrNew(
['name' => 'xiaoen2', 'age' => ]
);
$bool = $student->save();
4、更新数据
1)通过模型更新数据:
$student = Student::find();
$student->name = 'tiantian';
$bool = $student->save();
确保asDateTime方法为屏蔽状态,不然上述更新会报错:
2)批量更新:update
$num = Student::where('id', '>', )
->update(['age' => ]);
5、删除
1)通过模型删除:delete
$student = Student::find();
$bool = $student->delete();
2)通过主键删错:destroy
如下为删错id为7和8的记录:
$num = Student::destroy(7, 8);
3)删除指定数据:使用where
$num = Student::where('id', '>', )->delete();
七、Blade模板
1、模板继承:@section、@yield、@extends
公共模板:common.layouts.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>laravel - @yield('title')</title>
<style type="text/css">
.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>
继承模板:info.blade.php
@extends('common.layouts')
@section('header')
header
@stop @section('sidebar')
@parent
sidebar
@stop @section('content')
content
@stop
对应目录:
效果显示:
2、模板中变量的输出
1)方法中传变量
2)模板中调用变量:
显示效果图:
3、模板中引入子视图:@include
@include('student.child', ['content' => '我是子视图内容'])
子视图代码:
显示效果图:
4、模板中的流程控制:
1)@if、@elseif、@else、@endif
<!-- 1、if -->
@if ($name == 'sean')
I am sean
@elseif ($name == 'lily')
I am lily
@else
Who am I?
@endif
备注,if条件中也是可以使用php函数
@if (in_array($name, $arr))
true
@else
false
@endif
2)@unless:相当于@if的取反
@unless ($name != 'sean')
I am sean
@endunless
3)@for
@for ($i = 0; $i <; $i++)
{{$i}}
@endfor
4)@foreach
@foreach ($students as $student)
{{$student->name}}
@endforeach
5)@forelse、@empy:@forelse遍历的对象中没有数据时输出@empty中的内容
@forelse ($students as $student)
{{$student->name}}
@empty
null
@endforelse
5、模板中的url
1)准备要跳转的url
Route::get('user/center', ['as' => 'center', 'uses' => 'StudentController@testUrl']);
2)模板中使用不同的方法来跳转:url()、action()、route();一般使用rout()方法根据别名跳转
<a href="{{url('user/center')}}">url()方法</a>
<a href="{{action('StudentController@testUrl')}}">action()方法</a>
<a href="{{route('center')}}">route()方法</a>
laravel学习笔记1--基础的更多相关文章
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111
基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...
- Laravel学习笔记(三)--在CentOS上配置Laravel
在Laravel框架上开发了几天,不得不说,确实比较优雅,处理问题逻辑比较清楚. 今天打算在CentOS 7上配置一个Laravel,之前都是在本机上开发,打算实际配置一下. 1)系统 ...
- Django学习笔记(基础篇)
Django学习笔记(基础篇):http://www.cnblogs.com/wupeiqi/articles/5237704.html
- Laravel学习笔记之Session源码解析(上)
说明:本文主要通过学习Laravel的session源码学习Laravel是如何设计session的,将自己的学习心得分享出来,希望对别人有所帮助.Laravel在web middleware中定义了 ...
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...
- C#学习笔记(基础知识回顾)之值传递和引用传递
一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...
- C#学习笔记(基础知识回顾)之值类型和引用类型
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
- MAVEN学习笔记之基础(1)
MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...
- mybatis学习笔记之基础复习(3)
mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输 ...
随机推荐
- Linux 系统管理命令 - vmstat - 虚拟内存统计
命令详解 重要星级: ★★★★☆ 功能说明: vmstat 是 Virtual Memory Statistics ( 虚拟内存统计 ) 的缩写,利用 vmstat 命令可以对操作系统的内存信息.进程 ...
- 51nod 1239 欧拉函数之和【欧拉函数+杜教筛】
和bzoj 3944比较像,但是时间卡的更死 设\( f(n)=\sum_{d|n}\phi(d) g(n)=\sum_{i=1}^{n}f(i) s(n)=\sum_{i=1}^{n}\phi(i) ...
- 标准行cp功能
#include<stdio.h> int main(int argc,char *argv[]) { FILE *src_fp,*des_fp; ]={}; ) { printf(&qu ...
- windows 下使用命令行操作ftp
open 192.168.10.6 (连接到FTP主机) User allan\ftp (用户连接验证,注意这里的用户用到的是FTP服务器端创建的用户名) 123 ...
- linux系统资源限制ulimit
ulimit命令用来限制系统用户对shell资源的访问.如果不懂什么意思,下面一段内容可以帮助你理解: 假设有这样一种情况,当一台 Linux 主机上同时登陆了 10 个人,在系统资源无限制的情况下, ...
- ROS学习笔记四:用C++编写ROS发布与订阅
1 创建并编译功能包 1.1 创建功能包 在工作空间的 src 目录下创建功能包: $ cd ~/dev/catkin_ws/src $ catkin_create_pkg chapter2_tuto ...
- POJ 3683 Priest John's Busiest Day
看这个题目之前可以先看POJ2186复习一下强联通分量的分解 题意:给出N个开始时间和结束时间和持续时间三元组,持续时间可以在开始后或者结束前,问如何分配可以没有冲突. -----–我是分割线---- ...
- 积分图像 分类: 图像处理 Matlab 2015-06-06 10:30 149人阅读 评论(0) 收藏
积分图像(integral image)是一种快速计算矩形区域之和的数据结构,常利用它对算法进行加速.积分图像中处的值是原始灰度图像的左上角与当前点所围成的矩形区域内所有像素点的灰度值之和,即: 其中 ...
- 451 Sort Characters By Frequency 根据字符出现频率排序
给定一个字符串,请将字符串里的字符按照出现的频率降序排列.示例 1:输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次.因此' ...
- chart.js图表 传值问题
php: $json['status'] = ture; $json['list']=implode(',',$data); ...