Laravel文件上传

Laravel文件系统是基于Frank de Jonge的Flysystem扩展包
提供了简单的接口,可以操作本地端空间、AmazonS3、Rackspace Cloud Storage
可以非常简单的切换不同的保存方式,但仍使用相同的API操作
支持 local ftp s3 rackspace
默认是local 就是本地
s3是亚马逊的配置,在国内用的很少,国内可以弄个阿里云OSS 七牛存储
本人laravel版本是5.2

然后我们新建一个控制器方法,然后添加对应的路由

Route::any('/upload',"StudentController@upload");

public function upload(Request $request){
   if($request->isMethod('POST')){
      //var_dump($_FILES);
      //exit;
      $file = $request->file('files');
      //dd($file);
      //判断文件是否上传成功
      if($file->isValid())
      {
         //原文件名
         $originalName = $file->getClientOriginalName();
         //文件扩展名
         $ext = $file->getClientOriginalExtension();
         //文件MImeType
         $type = $file->getClientMimeType();
         //文件临时绝对路径
         $realPath = $file->getRealPath();
         //为了避免重名
         $filename = date('YmdHis').'-'.uniqid().'.'.$ext;
         echo $filename;
         $bool = Storage::disk('uploads')->put($filename,file_get_contents($realPath));
         //var_dump($bool);
      }
      echo 'ok';
   }
   return view('student.upload');
}

模板文件是根据auth下面login.blade.php修改的如下:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Login</div>
                <div class="panel-body">
                    <form class="form-horizontal" role="form" method="POST" action="{{ url('/login') }}">
                        {{ csrf_field() }}

                        <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
                            <label for="email" class="col-md-4 control-label">E-Mail Address</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}">

                                @if ($errors->has('email'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('email') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
                            <label for="password" class="col-md-4 control-label">Password</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control" name="password">

                                @if ($errors->has('password'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('password') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-md-6 col-md-offset-4">
                                <div class="checkbox">
                                    <label>
                                        <input type="checkbox" name="remember"> Remember Me
                                    </label>
                                </div>
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-md-6 col-md-offset-4">
                                <button type="submit" class="btn btn-primary">
                                    <i class="fa fa-btn fa-sign-in"></i> Login
                                </button>

                                <a class="btn btn-link" href="{{ url('/password/reset') }}">Forgot Your Password?</a>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

OK,完成了,测试下

创建一个自动加载

  1. 在运行环境目录下创建一个文件夹 mkdir composer2
  2. 用composer 初始化:
    cd composer2
    composer init   根据提示输入相应的信息 然后初始化成功,看到目录下有composer.json
  3. vim composer.json
    加入:

    "autoload": {
        "psr-4": {
            "" : ""
        }
    }
  4. composer install
  5. 然后新建一个控制器类 如下图:
  6. 在控制器类写入测试代码
  7. 在composer2目录下创建入口文件index.php 编写代码:
    <?php
       require __DIR__.'/./vendor/autoload.php';
       $student = new \app\controllers\StudentController()
  8. 运行一下,没有报错吧,实现了自动加载

laravel Artisan的使用

  • Artisan 是laravel 中自带的命令行工具的名称
  • 由强大的Symfony  Console组件驱动的
  • 提供了一些对应用开发有帮助的命令
  • 查看所有可用的 Artisan命令:php artisan 或 php artisan list
  • 查看命令的帮助信息:php artisan help XXX
    例:比如我们要查询迁移这个命令的使用方法:php artisan help migrate
    例:查询如果使用make model :php artisan help make:model

Artisan基本使用
查看laravel 版本:php artisan –version
查看所有路由:php artisan route:list
Artisan 功能使用:
创建控制器:php artisan make:controller StudentConller
创建模型:php artisan make:model Student
创建中间件:php artisan make:middleware Activity
生成auth: php artisan make:auth  然后使用迁移命令:php artisan migrate 看下数据库里面是不是生成了表(要先去env里面配置下数据库信息哦)

新建迁移文件

新建一个students 表的迁移文件
php artisan make:migration create_students_table(迁移文件的名字)
例:php artisan make:migration create_students_table –create=students
([maɪˈgreɪʃn]迁移,移居)

生成模型的同时生成迁移文件
php artisan make:model Student -m
例子:php artisan make:model Article -m

前面我们创建好的迁移文件 Student迁移文件 如下图

修改下 迁移文件 加上我们需要的自动 然后执行

php artisan migrate 完成迁移

数据填充

1.创建一个填充文件,并完善填充文件
php artisan make:seeder StudentTableSeeder

2.执行单个填充文件
php artisan db:seed –class=StudentTableSeeder
成功后看下数据库

3.批量执行填充文件
修改下DatabaseSeeder.php文件

php artisan db:seed

composer的使用

  1. 新建一个目录使用命令:composer init 初始化 按照提示输入初始需要的名称等信息
  2. composer search XXXXX  搜索 例:composer search phpmailer
  3. composer show –all XXXXX 列出所有可用的软件包  例:composer show –all phpmailer/phpmailer
  4. composer require XXXX  安装新的依赖包,并将依赖写入当前目录的 composer.json 文件中 例:composer require phpmailer/phpmailer
  5. composer install 依据当前目录下的 composer.lock(锁文件) 或 composer.json 文件,所定义的依赖关系,安装依赖包。(比如修改composer.json后,可用执行composer install 执行安装)
  6. composer update 更新依赖版本或者修改了composer.json 可用执行update命令
  7. composer config –lists 查看composer的配置信息
    学会上面这些命令 用composer 安装laravel yii2 tp5等是不是很容易了
  8. 如果还是不太明白 网上搜了一个视频可用参考下:https://www.imooc.com/learn/702 第一章有讲解composer的基本用法

ORM是什么?如何理解ORM

本文转自网络

一、ORM简介
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。
这种方案存在以下不足:
1.持久化层缺乏弹性。一旦出现业务需求的变更,就必须修改持久化层的接口
2.持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾的相关程序代码,增加了软件的维护难度。

ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁。Java典型的ORM中间件有:Hibernate,ibatis,speedframework。
ORM的方法论基于三个核心原则:
· 简单:以最基本的形式建模数据。
· 传达性:数据库结构被任何人都能理解的语言文档化。
· 精确性:基于数据模型创建正确标准化了的结构。

二、ORM的概念
让我们从O/R开始。字母O起源于”对象”(Object),而R则来自于”关系”(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。

ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。
ORM技术特点:
1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

三、ORM的优缺点
ORM的缺点是会牺牲程序的执行效率和会固定思维模式。
从系统结构上来看,采用ORM的系统一般都是多层系统,系统的层次多了,效率就会降低。ORM是一种完全的面向对象的做法,而面向对象的做法也会对性能产生一定的影响。

在我们开发系统时,一般都有性能问题。性能问题主要产生在算法不正确和与数据库不正确的使用上。ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和和数据的加工处理上,如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和加工处理,这样就容易产生性能问题。
在对对象做持久化时,ORM一般会持久化所有的属性,有时,这是不希望的。
但ORM是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。但我们不能指望工具能一劳永逸的解决所有问题,有些问题还是需要特殊处理的,但需要特殊处理的部分对绝大多数的系统,应该是很少的。

phpstrom 添加laravel智能提示

用laravel的时候发现 phpstrom并不能很好智能提示于是度娘上搜了一下,方法如下:

  1. 先在phpstrom 中添加插件 如下图 (我的机子已经装过)
  2. composer 安装 barryvdh/laravel-ide-helper
    直接在terminal中执行: composer require barryvdh/laravel-ide-helper
    耐心等待一会
  3. 安装成功后,在 项目中的 conifg/app.php 的providers的数组中添加类的支持

    Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class,
  4. 重启phpstrom 已经完美提示laravel

laravel 安装

laravel 中文网站: https://www.golaravel.com/

安装方式一:下载安装

  1. 下载
    可以从github上下载 官方开源地址:https://github.com/laravel/laravel/ 默认打开是 master分支 最新版本,可以选择你需要的版本点击 右边 clone or download 即可
  2. 安装
    放在web运行目录 指向public 目录,
    (1)如果出现错误“failed to open stream: No such file or directory in /bootstrap/autoload.php”  在laravel目录下 运行 composer install  然后抽支烟或者喝杯咖啡,静静等一会,要点时间的…… (如果composer 还没安装,那需要先安装下composer哦)
    (2)如果出现:“Whoops, looks like something went wrong.”按照下面方法操作
    1.开启调试模式
    打开项目目录下config/app.php修改:
    ‘debug’ => env(‘APP_DEBUG’, true)
    2.修改根目录.env.example文件为.env: mv .env.example .env
    3.执行命令生成key
    php artisan key:generate
    结果出现 set successfully.
    执行好后,查看下.env文件 看看生成的key 是不是在文件里面啦,现在刷新页面试试,看到了帅气的

    安装方式二:通过composer  create-project 安装

    laravel 为什么可以通过composer安装呢?因为composer里有laravel包
    在要安装的WEB目录下输入命令: composer create-project –prefer-dist laravel/laravel laravel_test(laravel_test 是你要安装的目录名称 可以自己定义)
    耐心等待一会就安装成功了
    我本地MAC环境PHP 是5.6.3的 所以选择的5.2版本安装的