laravel学习笔记

1 篇文章 0 订阅

学习链接
https://xueyuanjun.com
https://learnku.com/

配置

基本配置都在.env文件中

请求

验证请求方式

request()->isMethod('post');

获取请求所有请求

request()->input();
request()->all();

获取指定参数

request()->only(['username','password']);

获取请求头参数

request()->header('token');

控制器中获取参数

<?php
namespace App\Http\Controllers\test;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class TestController extends Controller
{
    public function index(Request $request)
    {
        dd($request->all());
    }
}

验证

use Validator;

//laravel验证不会终止,bail防止穿透,第一个验证不正确就结束
$rule = [
    'user_name' => 'bail|required',
    'password' => 'required'
];
$msg = [
    'user_name.required' => '用户名不能为空',
    'password.required' => '密码不能为空'
];
$validator = Validator::make($data,$rule,$msg);
if ($validator->fails()) {
	//errors会获取所有错误,first只获取一条
    return $validator->errors()->first();
}

视图渲染

//laravel以点为分隔符
return view('admin.login.index');

在这里插入图片描述
视图传递数据

public function index()
{
	$data = ['id' => 1, 'user_name' => 'admin'];
	$viewData = ['userList' => $data];
	return view('admin.login.index',$viewData);
}

模板替换

//引入头部
@include('admin.public.__head')
<div>
hello word
<div>

循环或判断替换

@foreach ($userList as $vo)
<tr>
	<td>{{$vo->id}}</td>
	<td>{{$vo->user_name}}</td>
	<td>{{$vo->phone}}</td>
	<td>{{$vo->email}}</td>
	<td>{{date('Y-m-d',$vo->create_time)}}</td>
	<td>
		@if ($vo->status == 1) 
		<span style="color:green;">正常</span>
		@elseif ($vo->status == 0) 
		<span style="color:red;">禁用</span>
		@else
		<span style="color:yellow;">审核</span>
		@endif
	</td>
	<td>
		<a href="#">删除</a>|
		<a href="#">修改</a>
	</td>
</tr>
@endforeach
//注意如果从模型里用toArray方法传过来的是数组就这样 {{$vo['id']}} 写

分页

<div class="page">
	{{$userList->links()}}
</div>

session

存储session

$sessionData = [
     'id' => $result['id'],
     'username' => $result['user_name'],
     'phone' => $result['phone']
 ];
 session(['userInfo' => $sessionData]);

获取session

<div>{{session('userInfo')['username']}}</div>

模型

namespace App\models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
	//默认指向users表模型,laravel会默认加s,es,改y为i加es
	//要想指向user就写如下代码
	protected $table = 'user';

	//默认情况下框架会自动管理两个时间字段create_at和update_at,这种非常讨厌,所有我们可以设置它关掉
	public $timestamps = false;
}

路由

//后台路由
Route::group(['prefix' => 'admin','namespace' => 'admin'],function () {
    Route::match(['get','post'],'/','Login@index'); //登录
    Route::match(['get','post'],'index','Home@index'); //后台主页
    Route::match(['get','post'],'welcome','Home@welcome');//欢迎页面
});

artisan使用

创建Test模型

php artisan make:model Models/Test

创建User控制器

php artisan make:controller admin/UserController

创建AdminBase中间件

 php artisan make:middleware AdminBase

中间件

路由中间件
防止未登录直接进入主页

<?php
namespace App\Http\Middleware;

use Closure;

class AdminBase
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!session()->has('userInfo')) {
            return redirect('admin');
        }
        //注入username
        $request->merge(['username' => 'admin']);
        return $next($request);
    }
}

Kernel.php

protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    //添加如下一行
    'admin.base' => \App\Http\Middleware\AdminBase::class
];

routes/web.php

//普通写法
Route::match(['get','post'],'index','Home@index')->middleware('admin.base'); 
//分组写法
Route::group(['middleware' => 'admin.base'],function () {
    Route::match(['get','post'],'index','Home@index');
});

数据库

一、使用DB门面进行基本操作

use Illuminate\Support\Facades\DB;

DB::select('select * from t_user');//返回数组
DB::delect('delete from t_user where id=?',[26]);//返回影响行数
DB::insert("insert into t_user(name,sex,age) values(?,?,?)",['小明','女',670]);//返回true
DB::update('update t_user set age= ? where id= ? ',[20,5]);//返回true

二、链式操作

use Illuminate\Support\Facades\DB;

//查询单条数据
DB::table('user')->first();
//查询单个user_name值
DB::table('user')->where('id',1)->value('user_name');
//查询多个值,返回数组
DB::table('user')->get();
//指定字段查询多个值,返回数组
DB::table('user')->get(['id', 'user_name']);
//分页查询
DB::table('user')->select('id', 'user_name')->paginate(10);
DB::table('user')->skip(0)->take(10)->get();
DB::table('user')->offset(10)->limit(5)->get();
//查询单个字段集合
DB::table('user')->pluck('user_name');
//查询键值对集合;以下查询会按照id为键user_name为值返回数组
DB::table('user')->pluck('user_name', 'id');
//判断某个字段值在数据库中是否存在;返回布尔类型;还有一个与之相对的方法 doesntExist()
DB::table('user')->where('user_name', 'admin')->exists();
//or查询;表示 where id < 1 or age > 18 
DB::table('user')->where('id', '<', 1)->orWhere('age', '>', 18)->get();
//between查询;表示查询 age 在18-25 的;还有个与之相对的 whereNotBetween
DB::table('user')->whereBetween('age', [18, 25])->get();
//模糊查询
DB::table('user')->where('user_name', 'like', "%张三%")->get();
//排序
DB::table('user')->orderBy('id', 'desc')->get();
//还支持随机排序
DB::table('user')->inRandomOrder()->get();
//分组查询
DB::table('user')->groupBy('age')->get();

//添加
DB::table("user")->insert(['name'=>'小明','gender'=>'女','age'=>20]);
//批量添加
DB::table("user")->insert([
	'name' => '张三', 'gender' => '男', 'age' => 18
],[
	'name' => '法外狂徒', 'gender' => '男', 'age' => 80
])
//添加返回id
DB::table("user")->insertGetId(['name'=>'小明','gender'=>'女','age'=>20]);
//age自增1
DB::table("user")->where('id',6)->increment("age",1);
//年龄自减1
DB::table("user")->where('ID',6)->decrement("age",1);
//修改删除参考tp

//聚合查询
DB::table('user')->count();       # 计数
DB::table('user')->sum('id');     # 求和
DB::table('user')->avg('id');     # 平均值
DB::table('user')->min('id');     # 最小值
DB::table('user')->max('id');     # 最大值

//时间查询
DB::table('user')->whereYear('created_at', '2020')->get();       # 年
DB::table('user')->whereMonth('created_at', '12')->get();        # 月
DB::table('user')->whereDay('created_at', '26')->get();          # 一个月的第几天
DB::table('user')->whereDate('created_at', '2020-12-26')->get(); # 具体日期
DB::table('user')->whereTime('created_at', '12:00')->get();      # 时间

//连接查询;内连接:join、左连接:leftJoin、右连接:rightJoin
DB::table('order')
	->join('user', 'order.user_id', '=', 'user.id')
	->select('order.*', 'user.user_name')
	->get();

三、事务操作

1.闭包写法

use Illuminate\Support\Facades\DB;

DB::transaction(function () {
    DB::table('users')->update(['votes' => 1]);
    DB::table('posts')->delete();
});

因为是闭包写法所以事务不需手动提交和回滚,但是如何传参和获取返回呢?且看下文

use Illuminate\Support\Facades\DB;

$res = DB::transaction(function () use($data) {
    $id = DB::table('users')->insertGetId($data);
    DB::table('posts')->delete();
    return $id;
});
//通过use传参,通过$res就能获取返回的id

2.普通写法

DB::beginTransaction();
try {
    DB::table('users')->update(['votes' => 1]);
    DB::table('posts')->delete();
    DB::commit();
} catch (QueryException $exception) {
    DB::rollback();
}

定义公共函数

一般开发中会有一些公共方法需要定义,那么在laravel里要写在哪呢?
1、在app文件夹下建立 Libaray ,所有的公用方法都可以放到该文件夹下
2、我们可以在Libaray下建一个 utils.php 文件写公共方法
示例:文件 app/Libaray/utils.php

function json($code, $msg, $data = '')
{
    return json_encode(['code' => $code, 'msg' => $msg, 'data' => $data], JSON_UNESCAPED_UNICODE);
}

3、在根目录下的 composer.json 文件里添加代码

"files": [
    "app/Library/utils.php"
]

在这里插入图片描述
4、执行composer命令让其自动加载:

composer dump-auto

在这里插入图片描述
5、大功告成,可以在任意文件里使用 utils.php 的方法了

查看错误日志

laravel的错误日志在:storage\logs文件下

扩展

//打印
dd();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值