学废Laravel(基础知识)

1:导读

介绍下Laravel的入门基础知识【持续更新】
1.1:其实不写博客之类的。今天又用到不怎么用Laravel来写数据接口,没想到又有一些基础知识忘记了,又是一番翻翻找找,所以决定记录下学过的知识,方便以后查找,也可以给初学者一些帮助。其实我也算小白,有些知识点不是很全面还望发现错误的大佬指导。
1.2:Laravel是一款基于PHP优雅(具体优雅在哪里我也说不出来)的Web开源框架,采用了主流的MVC框架(Model<我的理解是Eloquent模型,相当于将数据表映射>——View<前端视图模板等>——Controller<控制器>)

2:配置Laravel环境

2.1:搭建php环境(不细说)

推荐下我用过的两种本地php环境服务器
wamp(推荐,现阶段我使用的是这款)和xampp
两者共存的时候需要安装时需要修改Apache和mysql的端口,否者会出现端口占用的冲突导致无法启动。
注意:在安装wamp的时候检查是否安装vmware虚拟机软件,vmware占用了443端口会导致冲突,需要对vmware端口进行修改)
修改虚拟机端口:打开虚拟机菜单–>编辑–>首选项–>共享虚拟机–>点击“禁用共享”–>修改https端口为4431或者其他–>再点击“启动共享”即可)
xampp修改端口(系统只有一套php环境不用修改)

  • 修改apache:找到httpd.conf的配置文件(在面板的apache栏的config,注意不是外围的xampp的config)
    ——>1.将Listen 80的改为Listen 《你所要的端口》
    2.将ServerName localhost:80也修改成前面修改的端口,保存
    Apache端口修改
    ——>点击外围Config,选择Service and port settiongs,然后选择apache选项卡,设置端口为前面修改的端口
    在这里插入图片描述
  • 修改mySQL端口
    修改成你想要的端口(注意:默认连接mysql为3306修改后在进行数据库连接的时候记得传入修改的端口)在这里插入图片描述
    在这里插入图片描述

2.2:安装Laravel

  • 用Composer(PHP管理包工具)
    1.安装Composer,可以官网下载安装包,也可以镜像下载composer国内镜像网
    在安装Composer时有多个php环境时需要注意应选着对应的php版本
    在这里插入图片描述
    2.打开终端输composer命令创建项目(每回创建项目都用):
    composer create-project --prefer-dist laravel/laravel (项目名) (版本号,默认最新版本,我用的5.7.*)
    (下载出错可能被墙<先执行镜像再下载,镜像可以查百度最新的,我的好像不能用了>或者composer版本过低<更新:composer update>)
  • 一键安装(其实就是将下载好的Laravel项目放在php的Web目录下)
    1.将项目拉到目录后,进行配置 .env文件(无.env德情况下复制 .env.example文件的副本改位.env)
    2.生成key。在项目根目录打开终端输入 php artisan key:generate
    生成的key会自动填充到.env文件的APP_KEY=。。。。生成的key。。。(没有请自行复制生成的)

3:Laravel基础知识

3.1:路由

路由其实相当于路径,
例如纯php访问php文件时输入:*****.php访问,
而命名一个路由可以直接:根目录/路由名 进行访问

/* routes/web.php */
//Route:对应的http请求方法('路由名,/代表根路径','可以是回到函数也可以是对应的控制器中的函数')
//常见的get和post
Route::get('/', function () {
    //返回一个模板视图(html模板的php文件)(具体在resources/views中)
    return view('welcome');
    //返回视图并携带参数,视图在文件夹(默认resources/views为根目录)下需要用点(.)连接
    //例如resources/views/v/v.blade.php  ---->  v.v
    //return view('文件夹.视图名字 ',['参数1'=>'值'])
});
//注意的是进行post请求时,直接通过浏览器输入默认的get请求,
//直接请求post会报MethodNotAllowedHttpException错误,需要调用form表单进行post请求
Route::post('/','控制器名字@调用控制器中对应的方法名');

//还有其他的http请求
Route::put('***', '***@***');
Route::patch('***', '***@***');
Route::delete('***', '***@***');
Route::options('***', '***@***');

/*一个路由响应多个http请求*/
//响应指定的http请求
Route::match(['get', 'post'], '/', function () {});
//响应所有的
Route::any('/', function () {});

/*路由参数,只能为英文字母和下划线*/
//从 URL 中捕获用户的 ID,可以通过定义路由参数来执行此操作:
Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});
//在模板是视图中传递需要拼接
//<a href="{{ url('user').'/'.'传递的参数' }}">
//也可以根据需要在路由中定义多个参数:
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {});
//可选参数?,需要指定默认值(可以时null或具体值)
Route::get('user/{name?}', function ($name = null) {
    return $name;
});
//正则表达式约束
Route::get('user/{id}/{name}', function ($id, $name) {
    //id为0到9的一个或多个数字,name为a到z的一个或多个字母
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

/*路由前缀*/
//适用于归类:前缀/路由名字
Route::prefix('前缀')->group(function (){
//一系列路由
});
/*中间键*/
//类似于vue的路由守卫
//(对每条路由进行检查,例如:是否登录的用户认证,根据判断是否放行)
//login为在创建并在在App\Http\Kemel.php 注册的中间键
Route::middleware('login')->group(function () {
    //内部的路由都进行中间键验证
    Route::get('dashboard', function () {
        return view('dashboard');
    });
    Route::get('account', function () {
        return view('account');
    });
});

//创建中间件
//php artisan make:middleware Login
//创建好后在App\Http\Middleware目录下

/*---------App\Http\Middleware、Login---------*/

namespace App\Http\Middleware;

use Closure;

class Login
{
    public function handle($request, Closure $next)
    {
        //获取保存的session值:session()->get('键值')
        $user_id = session()->get('user_id');
        //进行判断
        if (empty($user_id)) {
            //不符合,重定向返回到login页面
            return response()->view('login');
        }
        //通过放行
        return $next($request);
    }
}

/*---------App\Http\Kemel.php---------*/
//注册中间键($routeMiddleware局部注册,$middleware为全局注册)
protected $routeMiddleware = [
     //******
    //注册
    'login' => \App\Http\Middleware\Login::class,
];

3.2:配置mysql数据库

.env文件的相应位置
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306 (默认端口为3306,修改了需要修改为对应端口)
DB_DATABASE=数据库名字
DB_USERNAME=数据库用户名
DB_PASSWORD=数据库密码

3.3:控制器

  • 使用Laravel自带的命令行接口:Artisan
    打开命令行窗口(shift键加右键)
    启动项目:php artisan serve
    创建控制器:php artisan make:controller 控制器名字
    (创建其他也类似,将make:对应的(例如model,中间键middleware等)修改为对应的)
/* App\Http\Controllers */
<?php
//创建好是的初始状态
//命名空间
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
//使用构建器访问数据库时引入
use Illuminate\Support\Facades\DB;
class 创建时候定义的控制器名字 extends Controller
{
//编写对应方法,对应方法在路由中调用
 function a(){
        //return "返回字符串";
        //返回模板视图
        //返回视图并携带参数,视图在文件夹(默认resources/views为根目录)下需要用点(.)连接
        //例如resources/views/v/v.blade.php  ---->  v.v
        //return view('文件夹.视图名字 ',['参数1'=>'值'])
        return view('v',['a'=>1]);
    }
 }
     /** 获取数据请求 */

    function b(Request $request){
        //需要引入use Illuminate\Http\Request;(默认引入)
        //dd(打印详细,适合调试)
        // 获取到所有的请求数据
        dd($request->all());
        /** 筛选指点字段,$request中剩下的为筛选好的字段*/
        //排除指定字段
        dd($request->except('addr'));
        //筛选指定字段
        dd($request->only(['name', 'sex', 'age']));
        //------------
        //判断是否包含指定字段
        //exists为has的别名,功能相同
        dd($request->has('name'));

        //获取指定字段(只能获取GET 请求传递的参数)
        $request->get('name');
        /** 建议用input */
        $a = $request->input('a', '默认值');

        //一、仅只取get数据(两种)
        $request->query->get('name', '未设值');
        $request->query('name', '未设值');

        //二、仅只取post数据(一种)
        $request->request->get('name', '未设值');

        //三、get和post一起取,同名post覆盖get(三种)
        $request->input('name', '未设值');
        $request->name;
        $request->get('name', '未设值');
    }

}
   /** 使用DB访问数据库*/
   function c(Request $request){
      // 首先需要引入DB类,控制器需加入
      //use Illuminate\Support\Facades\DB;
       /**原生的增删改查---》DB::对应方法('sql语句',['参数数组'];*/
       $a = DB::select('select * from table');
       //参数绑定
       $b = DB::select('select * from  table  where xm=?', ['xm' => '值']);
       //插入
       $r = DB::insert('insert into table(xh,xm) values(?,?)',['111','哈哈哈']);
       //改
       $u = DB::update('update table set xm=? where xh=?',['111','哈哈哈']);
       //删除
       $d = DB::delete('delete from table where xh=?',['11']);


       /** 使用构建器 table()*/
       //获取所有数据
       $ga = DB::table('表名')->get();
       //按需查询
       $xm='111';
       //where('字段','判定条件:= , !=,>,<等,默认=','值')
       $ga1 = DB::table('表名')->where('xm',$xm)->get();
       //获取第一条数据
       $ga2 = DB::table('表名')->first();

       //附带增删改查
       //加select()查询指定字段(返回指定字段)
       $ga3 = DB::table('表名')->select('指定字段')->get();
       //插入数据
       //将insert替换成insertGetId可以返回插入后的id(只对自增长id有用)
       $ga4=DB::table('表明')->insert(['xh'=>'555','xm'=>'赵云']);
       //更新
       $ga5 = DB::table('表名')->update(['pwd' =>'123456']);
       //删除
       $ga6 = DB::table('表名')->where('id','=',4)->delete();
       //清空整张表(不重置id)
       $ga7 = DB::table('表名')->delete();
       //清空并重置id
       $ga8 = DB::table('表名')->truncate();
   }

Laravel表单验证规则
表单验证错误信息回传的两种方法

  • 使用validate
  /** 表单验证 */
    function d(Request $request){
        //判断请求方法
        //判断是否为post请求
        $request->isMethod('post');

        //定义规则,键为模板视图定义的表单字段(前端定义的表单字段)
        $rules =['username'=>['required','max:50'],
            'email'=>['required','max:150','email'],
            'pwd'=>['required','same:pwd_cfg','min:6'],
            'pwd_cfg'=>['required','min:6'],
            'type'=>['required','in:G,A']
        ];
        //翻译规则,默认为英文
        $msg =['username.required'=>'用户名不能为空',
            'pwd.required'=>'密码不能为空',
            'email.required'=>'邮箱不能为空',
            'email.email'=>'邮箱格式不对',
            'pwd.same'=>'密码和确认密码不一致',
            'pwd.min'=>'密码要大于等于6位',
            'pwd_cfg.required'=>'确认密码不能为空',

        ];
        //$this->validate() 方法验证用户请求
        //不通过直接返回错误信息
        $this->validate($request, $rules,$msg);
        //通过按需操作
        return '表单验证通过';
    }

    /** ------------模板视图文件--------- */
    {{--判断是否有错误信息回传--}}

@if ($errors->any())
    <div>
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

<form action="{{url('post请求的路径')}}" method="post">
{{--    csrf验证通证,没加报419--}}
    {!! csrf_field() !!}
{{--    old函数为记录上次的表单值--}}
    <label>用户名:<input type="text" name="username" placeholder="用户名" value="{{ old('username') }}"/></label>
    <label>邮箱:<input type="text" name="email" placeholder="邮箱" value="{{ old('email') }}"/></label>
    <label>密码:<input type="password" name="pwd" placeholder="密码" value="{{ old('pwd') }}"/></label>
    <button type="submit">注册</button>
</form>


  • 调用验证类的静态方法
  /** 消息回传*/
  function e(Request $request){
      //表单验证也可以直接调用验证类的静态方法进行验证(控制器要先引用Validator 类)
      //use Illuminate\Support\Facades\Validator;
      $validator = Validator::make($request->all(),$rules,$msg);

      //消息回传主要利用写入session
      //如还需要回传表单信息,末尾加上->withInput();
      return redirect()->back()->with('回传定义的session键','值');
      //错误信息回传
      return redirect()->back()->withErrors('错误的信息');

  }

  /** ---------模板中*-----*/
在blade模板
@if(session()->has('msg'))
{{session()->get('msg')}}
@endif

3.3:视图模板(blade)

  • 视图模板目录在resources/views中
  • 快捷创建模板:新建一个html文件—>将后缀html修改为blade.php
{{"使用花括号渲染值"}}
{{--循环和判断用@** 开头  和 @end**结尾--}}
{{--变量等可以是控制器回传的--}}
@if(!empty('判断是否为空'))

@endif
@foreach($v as $key=>$a)


    @endforeach

{{--asset('路径')会将指定的路径生成相对路径--}}
{{--    项目需要用到的css,js,图片文件或者任何想通过网址直接存储的文件,都要放在public文件夹下--}}
{{--public文件夹是对外公开的,其他文件夹都不对外公开--}}
{{--引入外部文件:*** href="{{asset('路径')}}"--}}
{{--指定路由路径:
    action="{{url('路径')}}"
--}}


{{--创建父模板:创建一个作为父模版,后续视图继承后就不需要其他html标签等--}}
{{-- @yield 定义一个用来填充内容的位置
子页面用 @section (XX) 就可以往 yield 写入内容
--}}
{{-----------------------------------}}
<title>@yield('title')</title>
@yield('content')
    <p>父在子显示的内容</p>
@show

{{-----------------------------------}}
@extends('父路径,有文件夹需用点连接')
@section('title','子要显示的内容')
@section('content')
{{--    父模板输出--}}
    @parent
    <p>这是子页面输出的内容</p>
@endsection


3.4:Eloquent 模型Eloquent 模型

  • Eloquent 模型类相当于映射一张数据表,通过模型类提供的方法,简化了数据库操作
  • 规则(不符合会报错):
    1.数据表的主键名称为id,类型为整型,自增长
    ( 如果组件不是id:protected $primaryKey = ‘xh’;指定主键。
    如果不是自增,通过public $incrementing = false;忽略。
    如果不是整形,通过 protected $keyType = ‘string’;修改对应类型

    2.数据表包含两个数据类型为datetime的字段,字段的名称为updated_at和created_at,分别保存记录的更新时间和创建时间
    (当表中无这两个的时候,
    可以通过设置public $timestamps = false;忽略掉,
    或者通过 public const CREATED_AT = ‘create_time’;
    public const UPDATED_AT = ‘update_time’;
    创建欠缺的字段)

    (需要注意的是,laravel的默认时区是UTC,在 config\app.php修改’timezone’ =>’ PRC’ 即可)
    3.表名是将类名由驼峰格式转化为小写+下划线(含多个单词的话,多个单词的判断标准是大写字母)
    (比如 tbUser对应表名是 tb_users、PostTag 对应表名是 post_tags 等等)
    (当类名与表名不一致时可以在该类中声明表名 protected $table = ‘tb_stuinf’;)
  • 创建php artisan make:model tbUser,创建到 app/Models 目录下
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值