Laravel 开发笔记

homestead

查看 vagrant 版本
vagrant -v

接下来看文档安装homestead
https://learnku.com/docs/laravel/6.x/homestead

销毁 hometead
vagrant destroy  或者 在虚拟机里面直接删除

重装 hometead
vagrant up

重新编译配置文件
vagrant reload --provision

安装laravel

composer create-project laravel/laravel weibo --prefer-dist "5.8.*"

升级laravel到指定版本 (更改数字部分)执行 composer update
"laravel/framework": "5.8.*",  "laravel/framework": "6.0.*",

查看laravel 版本
php artisan -v

时区
'timezone' => 'UTC',
更改
'timezone' => 'Asia/Shanghai',

注册登陆功能

生成auth脚手架
php artisan make:auth

查看路由列表
php artisan route:list

创建模型 -h 参数查看帮助
 php artisan make:model Tag -h

数据库设计与操作

查看迁移状态
php artisan migrate:status

数据迁移  
php artisan migrate

数据回滚
php artisan migrate:rollback

重置
php artisan migrate:refresh --seed

开发过程中更改数据结构的两种方式
更新数据结构
php artisan make:migration add_users_id --table=projects

添加字段
  $table->integer('user_id'); 
回滚
 $table->dropColumn('user_id');

生成数据表 
 php artisan make:migration create_projects_table 

模板视图

 laravel里视图模板的扩展与区块声明

模板区块
 <main class="py-4">
      @yield('content')
 </main>

继承
@extends('layouts.app')
@section('content')
   内容
@endsection

局部视图  复用
_ create.blade.php

引入
 @include('projects._createModal')

解析符
{{ asset('js/app.js') }}
{{ mix('js/app.js') }}

laravel里的前端框架的选择与切换

php artisan preset -h

移走前端框架
php artisan preset none
移走前端框架php
php artisan preset bootstrap    php artisan preset vue

在artisan preset none以后再执行artisan preset bootstrap,就会导致bootstrap这个前端框架的js文件没有加载上,同时jQuery也没有加载上,从而导致我们课程中的模态框只是有css样式,但是点击并不会弹出模态框
(问题原因)

由于这个preset命令的bug,导致resources/js/bootstrap.js中下面这块代码没有被加上

try { window.Popper = require('popper.js').default; window.$ = window.jQuery = require('jquery'); require('bootstrap'); } catch (e) {} 可以看到这块的作用就是尝试加载bootstrap和jQuery相应的js文件

(问题解决)

如果遇到了上述问题,就在你的resources/js/bootstrap.js中加入上面的这块代码,然后再编译即可

下载新版错误调试工具
composer require facade/ignition
文档
博客:使用 Ignition 替换 whoops 报错提示

设置淘宝镜像
npm config set registry "https://registry.npm.taobao.org"

yarn 安装  windows
yarn install --no-bin-links
 
cross-env: not found 解决
删除 cross-env  在 package.json

新版框架需要执行
yarn add vue-template-compiler --save-dev

编译和安装
.version()
npm run dev
npm run production`

使用laravel collective form新建项目表单

https://laravelcollective.com/docs/5.6/htm...

安装 
composer update

模板视图

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#modelId">
    Launch
</button>
<!-- Modal -->
<div class="modal fade" id="modelId" tabindex="-1" role="dialog" aria-labelledby="modelTitleId" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">新建项目</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">×</span>
                </button>
            </div>
            {!! Form::open(['route'=>'projects']) !!}
            <div class="modal-body">
                <div class="form-group">
                    {!! Form::label('name', '项目名称:',) !!}
                    {!! Form::text('name', '', ['class'=>'form-control']) !!}
                </div>
                <div class="form-group">
                    {!! Form::label('thumbnail', '项目图片:',) !!}
                    {!! Form::file('thumbnail', ['class'=>'form-control-file']) !!}
                </div>
            </div>
            <div class="modal-footer">
                {!! Form::submit('保存', ['class'=>'btn btn-primary']) !!}
            </div>
            {!! Form::close() !!}
        </div>
    </div>
</div>

auth middleware的使用及原理介绍

权限验证
 $this->middleware('auth');

图片上传

php artisan storage:link   //  在linux 环境下生成软连接 ll public

安装图片管理组件
composer require intervention/image
文档  api
http://image.intervention.io/getting_start...

    //存取图片
    public function thumb($request)
    {
        if ($request->hasFile('thumbnail')) { //是否有上传文件
            $thumb = $request->thumbnail;
            $name = $thumb->hashName();
            $thumb->storeAs('public/thumbs/original', $name);
            $path= storage_path('app/public/thumbs/cropped/'.$name);
            Image::make($thumb)->resize(200, 90)->save($path);//需要手动创建文件夹
            return $name;
        }
    }

引用
src="{{ asset('storage/thumbs/original/'.$project->thumbnail) }}"

定义一对关系

定义user和project之间的关系 用户有几个项目

user.php
   public function projects(){
      return $this->hasMany(Project::class);
   }
projects.php
    public function user(){
        // 调用关系 $projec->user
        return $this->belongsTo(User::class);
    }

通过关系添加数据

    public function store(Request $request)
    {
       $request->user()->projects()->create([
           'name'=>$request->name,
           'thumbnail'=>$request->thumbnail
       ]);
    }

允许添加数据的字段

 protected $fillable=[
         'name','thumbnail'
 ];

表单验证
 php artisan make:request ProjectsRequest
 

 public function rules()
    {
        return [
            'name' => [
                'required',
                Rule::unique('projects')->where(function ($query) {
                    return  $query->where('user_id', request()->user()->id);
                })
            ],
            'thumbnail' => 'image|dimensions:min_width=260'
        ];
    }
​
    public function messages()
    {
        return [
            'name.required' => '项目名称必填',
            'name.unique' => '项目名称必须唯一',
            'thumbnail.image' => '图片格式错误',
        ];
    }
@if($errors->any())
<ul class="alert alert-danger">
        @foreach($errors->all() as $error)
           <li>{{ $error }}</li>      
        @endforeach
</ul>
@endif

判断一个集合是否为空

 @if(count($projects)>0)
 @if(!$projects->isEmpty())
 @each

  <div class="card-deck">
        @each('projects._card',$projects,'project')
    </div>

_card.blade.php

<div class="col-3 my-3">
    <a href="projects{{ $project->id }}" class="card">
        <img class="card-img-top" src="{{ asset('storage/thumbs/original/'.$project->thumbnail) }}" alt="">
        <div class="card-body">
            <h5 class="card-title text-center"> {{ $project->name }}</h5>
        </div>
    </a>
</div>

删除功能

{!! Form::open(['route'=>['projects.destroy',$project->id],'method'=>'DELETE']) !!}
 <button type="submit" class='btn btn-default'>
      <i class="fa fa-btn fa-times"></i>
 </button>
{!! Form::close() !!}

编辑功能

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!