安装
- 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
- Migration: 有版本控制的数据库
- Eloquent:非常强大的 Eloquent ORM , 通过 ORM 可以轻松对 DB 进行 增删查改(CURD:create,update,read,delete)操作
- tinker 工具: 在命令行中执行数据库的增删查改操作
- DB builder: 数据库查询构建器
- \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() 调用,
- 类的变量变化之后是存储在类里面而不是实例里面