PHP创建laravel项目

1,022 阅读4分钟

安装

  • Mac环境:一切可以用brew搞定
    • brew安装valet
    • Mac环境:一切可以用brew搞定
      • brew安装valet 【juejin.cn/post/684490…
        • brew update
        • 通过 Homebrew 安装 PHP 7.1: brew install homebrew/php/php71

        • 通过 Composer 安装 Valet: composer global require laravel/valet

        • 配置并安装valet: valet install

        • ping foobar.dev 若有回应则表示valet 安装成功

        • 每次系统启动都会自动启动valet,不需要手动start

        • 使用: 修改域名 valet link app-name : 可以使用app-name.dev / app-name.test 访问当前目录【执行该命令后需要设置hosts文件将127.0.0.1绑定到这个域名上:sudo vim /etc/hosts】

    • brew安装php7.1+
    • 将macOS自带的PHP升级到最新
    • brew安装redis
      • mac中redis配置文件:/usr/local/etc/redis.conf 【将daemonize守护进程改成yes】
    • brew 安装MySQL 5.7+
  • Windows环境:
    • 安装wamp【Apache】  ||  vargrant,docker【Nginx】 ||  phpStudy (本次选用phpStudy)
    • php配置环境变量: 在phpStudy目录下找到php.exe 所在目录(\php\PHPTutorial\php\php-7.1.13-nts)【
      • php必须配置环境变量之后才能安装composer
      • 可能需要开启OpenSSL才能安装composer【phpStudy--打开配置文件--php.ini文件中将extend  OpenSSL 前面的分号去掉】
    • 安装composer:【下载安装包解压即可】必须安装composer才能安装laravel     https://getcomposer.org/download/
    • 安装laravel: 本次选用laravel框架  https://www.golaravel.com/    http://laravelacademy.org/post/5744.html
      • 通过Laravel安装器:(首先,通过 Composer 安装 Laravel 安装器)

        composer global require "laravel/installer"

        确保 ~/.composer/vendor/bin 在系统路径中,否则不能在任意路径调用 laravel 命令。

        安装完成后,通过简单的 laravel new 命令即可在当前目录下创建一个新的 Laravel 应用,例如,laravel new blog 将会创建一个名为 blog 的新应用,且包含所有 Laravel 依赖。该安装方法比通过 Composer 安装要快很多:

        laravel new blog
      • 通过composer create-project,你还可以在终端中通过 Composer 的 create-project 命令来安装 Laravel 应用:

        composer create-project --prefer-dist laravel/laravel blog
    • 安装redis: http://www.runoob.com/redis/redis-install.html
      • github教程:https://github.com/ServiceStack/redis-windows
      • 安装包地址: https://github.com/ServiceStack/redis-windows/raw/master/downloads/redis-latest.zip
      •  先到github上面下载zip包,然后放到C盘program file下面解压 ( windows版:https://github.com/MSOpenTech/redis/releases )
      •  文件介绍:

        - redis-benchmark.exe #基准测试

        - redis-check-aof.exe # aof

        - redischeck-dump.exe # dump

        - redis-cli.exe # 客户端

        - redis-server.exe # 服务器

        - redis.windows.conf # 配置文件
      • 启动Redis : 使用命令【redis-server.exe redis.windows.conf】,启动redis 服务。
    • 安装完redis并启动之后,安装predis扩展【laravel需要用到】:$ composer require predis/predis . 这时候可能存在重名问题,laravel项目中的config/database.php 需要修改redis配置。redis默认是没有设置密码的,只需要把redis password字段注释掉【或者可以将env中的redisPassword值置为null,记得重启php artisan serve】
    • 开启项目(php artisan serve), 项目.env文件连接好本地数据库,启用redis,启动postman,测试接口地址
    • redis启动命令: 
      • redis-server.exe  redis.conf   win7
      • 常用的redis服务命令:

        卸载服务:redis-server --service-uninstall

        开启服务:redis-server --service-start

        停止服务:redis-server --service-stop

    • 附加工具:
      • 安装cmder,命令行工具
      • 安装 Navicat , MySQL 5.7+

入门demo 

新手入门指南---简单任务管理系统:laravelacademy.org/post/3291.h…

  • 安装依赖: $ composer install 
  • 运行laravel项目: $ php artisan serve     // artisan 是laravel的命令接口
  • 数据库迁移:用php代码完成数据库表的创建和修改
    • $ php artisan make:migration create_tasks_table --create=tasks
    • $ php artisan migrate    //如果已有项目,则直接迁移数据表
  • Eloquent 模型: 
    • Laravel 使用的默认ORM(对象关系映射)是Eloquent,Eloquent使用模型让数据存取变得简单轻松,通常每一个Eloquent模型都有一个与之对应的数据表
    • $ php artisan make:model Task  创建一个与刚创建的task表对应的task模型  

CSRF 攻击

http://laravelacademy.org/post/7820.html

CSRF(跨站请求伪造):通过伪装授权用户的请求来攻击授信网站的恶意漏洞

在laravel应用中定义html表单,都需要引入CSRF令牌字段,这样CSRF中间件才能对请求进行验证,使用辅助函数 csrf_field() 可以生成包含CSRF令牌的隐藏输入字段

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

中间件:路由 跳转之前的检验层

 $php artisan make:middleware CheckToken    //在app/Http/MiddleWare文件下生成CheckToken.php文件


中间件分三类:

  • 全局中间件: 一般很多地方需要用到的中间件就放在这里
  • 中间件组 :app/Providers/RouteServiceProvider 自动将中间件组 web 应用到 routes/web.php 文件,将中间件组 api 应用到 routes/api.php
  • 指定路由中间件:$routeMiddleware   默认情况下,$routeMiddleware 包含一些laravel自带的中间件。自己的中间件只需要在后面追加,并分配一个key


MySQL

  1. Migration: 有版本控制的数据库
  2. Eloquent:非常强大的 Eloquent ORM , 通过 ORM 可以轻松对 DB 进行 增删查改(CURD:create,update,read,delete)操作
  3. tinker 工具: 在命令行中执行数据库的增删查改操作
  4. DB builder: 数据库查询构建器
  5. \DB::enableQueryLog();      $query->get();   dd(\DB::getQueryLog());   输出执行语句


Trait

Trait 是php5.4引入的新概念,看上去既像类又像接口,其实都不是。

Trait 可以看做类的部分实现,可以混入一个或多个现有的PHP类中。

作用:表明类可以做什么,提供模块化实现

Trait是一种代码复用技术,为php的单继承限制提供了一套灵活的代码复用机制


PHP基础

OOP编程:Object Oriented Programming 面向对象编程

public:类中,类外使用

protected:只能在类和继承类中使用,不能在类外使用

private:只能在类里面使用,不能在类外使用

父类:公共方法可以放在父类中,

子类:子类默认继承父类的所有方法,可以重新定义父类同名方法

抽象类【abstract class】:类的基础上再推进了一层,不能通过new来实例化抽象类。一旦抽象类中声明有一个抽象方法【abstract public function getArea(),这里不能用大括号,否则会报错】,则抽象类的子类必须实现该方法,否则就会报错,保证程序的一致性

接口【interface】:跟抽象类有点相似,【把接口比喻成契约协议。劳动合同:接口,合同条款:接口中的方法,implements:按手印】

依赖注入:blog.csdn.net/u011250882/…

<?php

    interface Logger {
        public function save($msg);
    }
    class FileLogger implements Logger{
        public function save($msg)
        {
            var_dump('file'.$msg);
        }
    }

    class DBLogger implements Logger{
        public function save($msg)
        {
            var_dump('DB'.$msg);
        }
    }

    class UserController{
        protected $logger;
        public function __construct(Logger $logger)   //依赖注入
        {
            $this->logger = $logger;
        }
        public function register()
        {
            $user = 'jelly';
            $this->logger->save($user);
        }
    }

    $user = new UserController(new DBLogger('file'));   // 在某处需要换一个依赖注入的时候只需要修改一个
    $user->register();

命名空间namespace:比喻成文件和文件夹,路径。

自动加载:解决多个require引入的问题 【一般一个类一个文件】

 可以在composer.json 中加入 autoload:{}【使用psr-4或者psr-0自动加载标准】,然后执行composer install 。最后在  单文件入口中引入 vender/autoload.php  【入后文件:public/index.php】

静态属性和静态方法:

  • 可以直接用  Math::add() 调用,
  • 类的变量变化之后是存储在类里面而不是实例里面