laravel--基础知识

1 路由:get  浏览请求主页   列如:看后台的列表页   
          post  添加请求
          put   修改请求   
          delete  删除请求
          ===========post===========
        post 只能去 post的方法里 要在form表单里加上 csrf防止跨站攻击      {{csrf_field()}}
          ===========put===========
        put提交   也是用 method='post'  但是要加上  {{method_field('PUT')}}
          ===========delete===========
        delete 请求 也是用 method='post'  但是要加上  {{method_field('DELETE')}}


         ===========加载模板==============
    views在 resources views 下面  post.blade.php
                加载模板
            Route::get('cc',function(){
                return view('post');
            });
======中间件======
php artisan make:middleware Agemiddleware 创建好的middleware在appHttpMiddleware里面
注册中间件 : 在appHttpKernel.php里的第三个  第一个$middleware代表全局中间件  第二个$middlewareGroups为路由文件指定中间件
    'age'=>类的命名空间类名:class,  格式
response('未成年')    
===Route::middleware('中间件名称' 多个中间件名为[   ,   ,])->group()===
    列如:Route::middleware('age')->group(function(){
        把需要加上'age的方法放到里面就行    
    });
===Route::middleware('age)->prefix('users)->group(function(){})===

*****创建控制器用composer创建  |创建的控制其名称
也可以向tp5框架一样右键点击创建php artisan make:controller PhotoController


Route::resource写法Route::resource('/tests','AdminTestController');
只要几个方法写在第三个参数指向即可: Route::resource('/tests','AdminTestController',['only'=>['index','update']]);
或者排除什么什么写在第三个参数指向即可: Route::resource('/tests','AdminTestController',except=>['index','update']])//排除index和update;
//额外添加一个方法  因为resource只能控制7个方法 所以需要重新定义路由
Route::get('/tests/fun/{id}','AdminTestController@fun');
//额外添加的方法
    public function fun($id){
        return 'fun'.$id;
    }
建议把新增的放到resource之前

====全局匹配Route::pattern('test','[0-9]+');在appproviders outesserviceprivider.php里找到boot

====表单请求操作
==快捷打印并停止运行  dd();
==获取表单的数据 $data = $request->all(); 也能接收action='/admin?id=12&sex=m'还有 a链接的值 单选框的值 下拉框的值
==表单中获取单个字段的值 $name = $request->input('name');也可以用$name = $data['name']
==如果input('')表单中没有的字段时可以加上默认值: $address =$request->input('aaa','鑫鹏大厦');
==表单中接受只接受什么数据  $only = $request->only(['name','classid']);只要name和classid
==表单中接受排除什么数据    $except = $request->except(['_token','name']);//排除_token和name
==判断指定值是否存在  取反是不存在
    if (!$request->has('sdasdsa')) {
        return     1;
    }
==判断指定值是否为空  取反是不存在
    if (!$request->filled('name')) {
        return     2;
    }
==闪存 暂时存session 调用一次自动清空session $request->flash();  在模板中用old调用列入:{{old('name')}}  或者 return back()->withInput();也可以,省略一行代码
去除里面敏感的信息withInput() return back()->withInput(
        $request->except('password')
        );
==return back();  返回上一步,也就根本过不去

==删除方法destroy()
==加载主页index()
==加载添加页面create()
==修改方法update()
==加载修改页面edit()
==删除方法show()
==执行添加store()
=======上传文件============
            <input type="file" name="aaa" multiple="">
            //判断文件是否存在并且上传文件是否正常
            if ($request->hasFile('aaa')&&$request->file('aaa')->isValid()) {
                //然后接受文件            在这里 store时进行添加没有imgs会自动创建  默认在storage/app/imgs下  //这里是把他他保存到storage/app/public/imgs 
                $files = $request->file('aaa')->store('imgs','public'); ****推荐保存到public下
                dd($files);//此时$files就是文件名
            }
=======加载视图============
        return view('admin.test.list',['aa'=>['aa'=>'cs']]);
         在模板页面接收     {{$aa['aa']}}   两个花括号
====共享视图 也就是公共的头部
        在appprovidersAppServiceProvider.php中的  boot方法中加上View::share();
        ****切记  要use View 这个类;
                        public function boot()
                        {
                            View::share('user',['name'=>'张三']);
                        }
        ****在public下的模板里写上  <h1>欢迎{{$user['name']}}登录</h1>
        ****引文件  @include('admin.public.head');
==重定向闪存session==
        //在方法里写
        return redirect('/tests')->with('aa','ok');
        //在blade.php中写
        @if(session('aa'))
        <div class="alert alert-success">
            {{session('aa')}}
        </div>
        @endif
====session辅助函数====
    存session    session(['name'=>'王志企']);
            
    取session    {{session('abc')}}   

    清空session  session(['name'=>null]);
====form 表单验证====
参考手册
    public function store(Request $request)
    {   
        //不仅重新定向 还有闪存  还有 赋给了$errors的值
    $this->validate($request, [
            'name' => 'required|alpha_dash|min:2|max:255',
            'age' => 'required|min:2|max:99',
            'password' => 'required|confirmed',
        ],[
            'name.required'=>'姓名必填',
            'name.min'=>'姓名最小',
            'age.min'=>'年龄最小',
            'name.max'=>'姓名最大',
            'age.max'=>'年龄最大',
            'age.required'=>'姓名必填',
            'password.required'=>'密码必填',
            'password.confirmed'=>'两次密码不一致',
        ]);
        return view('ceshi.admin.aa');
    }

    //html代码
    <h1>Create Post</h1>

    @if (count($errors) > 0)
        <div class="alert alert-danger">
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif
==========继承模板
    <!-- 继承admin下的layouts下面的公共.blade.php -->
    @extends('admin.gonggong.gonggong')
    **替换模板里的东西
        **替换小部分的 列如:<title>@yield('a')</title>
            在另一个模板里: 例如: @section('a','要替换的内容') 
        **替换大部分          
                <div style="100%;height:400px;background:red;"></div>
                @section('aa')
                <div style="100%;height:400px;background:black;"></div>
                @show
                <div style="100%;height:400px;background:green;"></div>
            在模板里 
                @section('aa')
                    在里面写上任意内容  如果不写就是空的  也可以在里面继承其他的模板或子模板
                    <div style="100%;height:400px;background:blue;"></div>
                @endsection()
==========引入|导入
@include('admin.public.head')
    在哪里写都可以php或模板
==========解析html标签
    public function index()
    { 
        $a ="<a href=''>连接</a>"; 
        return view('ceshi.admin.index',['bb'=>$a]);
    }

    在ceshi.admin.index接受
        {!!$bb!!}
==========if for forach switch 语句
    加@if($a>0)   结束用@endif
    列如:    
        @for ($i = 0; $i < 10; $i++)
            The current value is {{ $i }}
        @endfor
============================数据库=============================
    .env中修改配置文件 数据库名 账号密码
    在appProvidersAppServiceProvider.php中的boot方法中添加事件监听
                DB::listen(function ($query) {
                echo  $query->sql;
                // $query->bindings
                // $query->time
                })
==查==
        // $db = DB::table('class')->first();//查询单条
        //$db = DB::table('class')->get()->toArray();//查询全部
        // $db = DB::table('class')->count();//查询里面的数据条数
        // $db = DB::table('class')->max('age');//查询里面最大的年龄
        // $db = DB::table('class')->min('age');//查询里面最小的年龄
        // $db = DB::table('class')->avg('age');//查询年龄平均数
        // $db = DB::table('class')->where('id',1)->exists();//检查id=1的是否存在 返回值只为bool值
        // $db = DB::table('class')->where('id',1)->doesntExist();//与上面的相反
        // $db = DB::table('class')->select('name','age','id as aaa')->get();
        // $db = DB::table('class')->distinct()->get()->toArray();//toArray()转换为数组  distinct允许强制查询返回不重复的结果集
        // $db = DB::table('class')->where('id','>','1')->get();//where条件查询
        // $db = DB::table('class')->where('age','>','100')->orWhere('name','=','张三')->get();//where条件和 orWhere 或查询
                return view('ceshi.admin.index',['b'=>$db]);
       ====便利数据
                @foreach ($b as $bb)
                <tr>
                    <td>{{$bb->id}}</td>
                    <td>{{$bb->name}}</td>
                    <td>{{$bb->age}}</td>
                    <td>{{$bb->class}}</td>
                    <td>{{$bb->sex}}</td>
                </tr>
                @endforeach

           ====分页
        $db = DB::table('class')->paginate('2');//查询全部
               {{$b->links()}}
======添加
       $arr = ['name'=>'王志企','age'=>12,'sex'=>'男','class'=>'11'];
       $add = DB::table('class')->insert($arr);
       dd($add);//返回值为bool值
=======修改
       $arr2 = ['name'=>'撒大声地撒大所','age'=>12,'sex'=>'男','class'=>'11'];
       $edit = DB::table('class')->where('id',6)->update($arr2);
       dd($edit);
=======删除
      $del = DB::table('class')->delete();
       dd($del);


=========ajax url 传值
        function edit(id){

    $.ajax({
        type: "get",
        url: '/news/'+id+'/edit',
        success: function(data){
            alert(data);
         },    
        error:function(){
            alert('ajax请求错误')
        }
    });
}
===========url笔记***
    ==url:"/news"  去index        method=get
    ==url:"/news"  去store        method=post
    ==url: '/news/'+id+'/edit',   method = get
===========普通接值***
    request()->input('传的值')
===========如何搜索后保存搜索条件
  $search = [];//定义一个空数组
       if (empty(request()->input('name'))) {
           $db = DB::table('class')->orderBy('id','desc')->paginate(1);
       }else{
          //然后指下标
           $search['name'] =request()->input('name');
           $db = DB::table('class')->orderBy('id','desc')->where('name','like',"%".request()->input('name')."%")->paginate(1);

       }
           return view('bb.ceshi.index',['db'=>$db,'search'=>$search]);
    //appends()
    {{$db->appends($search)->links()}}

===========================================模型
composer创建模型 php artisan make:model My
            //执行此模型操作的表名 表明应该加s
           protected $table = 'mys';
            //执行此模型的主建
           protected $primaryKey = 'id';
            // 该模型是否被自动维护时间戳
           public $timestamps = true;
           //指定字段添加内容的白名单  不在白名单的字段不会被添加
           protected $fillable = ['title','content'];
    1* 第一步 创建好模型之后 在控制器先导入模型 例如  use AppMy;

    2*  //定义字段访问器 函数名称格式get字段名Attribute,$value为原字段值
       public function getcontentAttribute($value){
               //mb_substr('要截取的字符串',开始的位置,截取几个,'utf-8') 截取中文字符串
               return mb_substr($value,0,4,'utf-8');
       }

=========================================模型的应用开始=========================================
//=============模型的查看=============
// $my = My::where('id',1)->get();//如果使用了where()就需要用get()来获取数据,因为此时已经不属于模型类了
// $my = My::all();//模型的名::all()  是获取全部的数据  可以利用eloquent模型集合来调用
// $my = My::find(1)->title;//模型用find查询单挑数据可以指定字段
// $my = My::find([1,3,5]);//模型用find查询多条指定id用数组
// $my = My::findOrFail([1,3,5,100]);//模型用findOrFail()查询单条或多条  如果找不到数据会404not Found 而不是报错

// $my = My::where('title','like',"%测试%")->count();//模型where 查询条数
// $my = My::where('title','like',"%测试%")->max('id');//模型where 查询最大的
// dd($my);


//=============模型添加=============
//第一种笨方法
// $a = new My;//先实例化当前的模型
// $a->title='文章白体111';//指向标题
// $a->content='文你当时考虑从那时快乐的斯诺克拉斯撒的手机卡死你打什么快来打什么你打谁卡了辛苦了 三块谁开车是ncs章白体111';
// $a->save();//进行添加 没有返回值

//第二种 始终方法 优点 不用实例化   ******注意:需要在模型里添加  指定字段添加内容的白名单 protected $fillable = ['title','content'];
// $da = ['title'=>'dsad','content'=>'大萨达所多撒多撒多'];
// $a = My::create($da);
// dd($a->toArray());

//=============模型修改=============
//第一种       先给接过来的id 内条查出来 然后 指向即可
// $a = My::findOrFail('2');//先查询第二条 
// $a->title='我市第二条?';
// $a->content='我市第的撒的马萨卡等级欧派的时间啊搜配电间阿萨德佛撒娇飞利浦圣诞节否二条?';
// $a->save();
// dd($a);
//第二种
// //简单
// $a = My::where("id",1)->update(['content'=>'居然要该我']);
// dd($a);
//第三种
// $a=My::findOrFail(1);
// $data = ['title'=>'我是谁?','content'=>'大萨达所多撒多撒多'];
// $a->fill($data);//修改
// $a->save();//修改成功
// dd($a);


//=============模型删除=============
// $a = My::destroy([1,2,3,4,5]);
// dd($a);
// ======字段访问器  在模型里面设置字段访问器
// $a = My::find(11)->content;//获取内容   如果定义了字段访问器想要获取原始值   如下
$a = My::find(11)->getOriginal('content');
dd($a);
=========================================模型的应用结束=========================================

=========ajax url 传值
        function edit(id){

    $.ajax({
        type: "get",
        url: '/news/'+id+'/edit',
        success: function(data){
            alert(data);
         },    
        error:function(){
            alert('ajax请求错误')
        }
    });
}
===========url笔记***
    ==url:"/news"  去index        method=get
    ==url:"/news"  去store        method=post
    ==url: '/news/'+id+'/edit',   method = get
===========普通接值***
    request()->input('传的值')
===========如何搜索后保存搜索条件
   $search = [];//定义一个空数组
        if (empty(request()->input('name'))) {
            $db = DB::table('class')->orderBy('id','desc')->paginate(1);
        }else{
           //然后指下标
            $search['name'] =request()->input('name');
            $db = DB::table('class')->orderBy('id','desc')->where('name','like',"%".request()->input('name')."%")->paginate(1);

        }
            return view('bb.ceshi.index',['db'=>$db,'search'=>$search]);
    //appends()
    {{$db->appends($search)->links(http://www.my516.com)}}
================laravel 生成keys
 php artisan key:generate
================laravel 数据库迁移
现在本地创建一个数据库  在新建一个用户 账号密码 把.evn文件里面的配置改好 执行命令就行
php artisan migrate
--------------------- 

原文地址:https://www.cnblogs.com/hyhy904/p/10987461.html