第2节课中我们安装了官方的一个简易blog项目,该项目中已搭建了一个基本应用的结构,但在实际开发中,往往项目的结构并不是这样,今天这堂课我们从0开始新建一个项目,一切都是空白,真正从0开始

一: 安装laravel框架

1. 新建项目文件夹tutorial
2. 虚拟主机配置
  • 建入口文件夹public和文件 index.php

  • 修改homestead.yaml和host文件,工作环境为home,域名tutorial.app

3. putty登录虚拟机生成并配置composer.json 和 package.json文件

composer.json, php包配置文件

   {
    "name": "advance100/tutorial",
    "description": "有声有色出品laravel系列教程",
    "keywords": [
        "framework",
        "laravel",
        "advance100",
        "tutorial",
        "laravel学习教程"
    ],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=7.0.0",
        "advance100/helper": "^2.0",
        "fideloper/proxy": "~3.3",
        "laravel/framework": "5.5.*"
    },
    "require-dev": {
    },
    "autoload": {
        "psr-4": {
        }
    },
    "autoload-dev": {
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "scripts": {
     },
    "config": {
        "preferred-install": "dist",
        "sort-packages": true,
        "optimize-autoloader": true
    },
    "repositories": {
        "hooks": {
            "type": "composer",
            "url": "https://larapack.io"
        }
    }
}

package.json, node包配置文件

   {
    "private": true,
    "scripts": {
        "dev": "npm run development",
        "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
        "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
        "watch-poll": "npm run watch -- --watch-poll",
        "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
        "prod": "npm run production",
        "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
    },
    "devDependencies": {
        "axios": "^0.16.2",
        "bootstrap-sass": "^3.3.7",
        "cross-env": "^5.0.1",
        "jquery": "^3.1.1",
        "laravel-mix": "^1.0",
        "lodash": "^4.17.4",
        "vue": "^2.1.10"
    }
}
4. 安装laravel和laravel-mix

后台(安装在vendor下)

vagrant@homestead:~/abcde/study/tutorial$ composer config -g repo.packagist composer https://packagist.phpcomposer.com
vagrant@homestead:~/abcde/study/tutorial$ composer install

安装后的包有

包名 说明
advance100 调试会用到
doctrine 数据库中会用到
laravel 重点
mtdowling mtdowling/cron-expression,用这个来解析cron表达式
psr -
symfony laravel请求,响应,Cookie等继承自它
egulias egulias/email-validator邮箱校验封装,Yii2也用的是它
nesbot nesbot/carbon,PHP 日期、时间和时区处理 API 及组件,参考
ramsey ramsey/uuid用来生成唯一识别码,参考
tijsverkoyen tijsverkoyen/css-to-inline-styles转为页面内的style,在发邮件时特有用
composer 自动加载管理
erusev erusev/parsedown用来解析markdown文件,参考
monolog 错误日志处理
paragonie paragonie包中的random_compat用来生成随机数
swiftmailer 电子邮件
vlucas 环境变量处理,为配置文件服务
autoload.php 自动加载对外文件

前端(安装在node_modules下)

vagrant@homestead:~/abcde/study/tutorial$ sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
vagrant@homestead:~/abcde/study/tutorial$ sudo cnpm i

说明:在虚拟机使用npm安装包时,如果是非administrator用户执行vagrant up的话,此处会报Install fail! Error: EPROTO: protocol error, symlink '_axios@0.16.2@axios' -> '/home/vagrant/abcde/study/tutorial/node_modules/axios',有两个办法解决,一是直接在windows主机安装,这个办法最为简单,二是以管理员的身份执行 vagrant up,这也可以,但有个小问题,会另开一个虚拟机,关闭虚拟机,退出,另再以另外身份登录后启动 vagrant up.
我是直接在win10的dos下安装

D:\03www2018\study\tutorial>npm install -g cnpm --registry=https://registry.npm.taobao.org
D:\03www2018\study\tutorial>cnpm i

在D:\03www2018\study\tutorial\node_modules有1900个项目(windows安装是1894个)

二:建数据库tutorial

字符集utf8mb4 -- UTF-8 Unicode,排序规则 utf8mb4_general_ci
grant all privileges on tutorial.* to daqi@localhost identified by "daqi168" WITH GRANT OPTION;
这里的用户名daqi和密码daqi168等会在下面的配置文件.env.home中会用到

三:新建项目tutorial

打开PhpStorm, Create New Project From Existing Files,指定下面三个项

Project Root项目根目录,指的是工程目录
Resource Root资源根目录 指的是资源目录 比如图片外部资源的存放目录
Excluded 一定要将node_modules排除掉,否则太大了,建项目会卡

创建下面文件夹及文件

项目根目录
│   composer.json
│   composer.lock
│   package.json 
│   artisan//console入口文件   
├───public
│   └╌╌╌╌ index.php // web入口文件
├───node_modules(下面略)
├───vendor
│       ├╌╌ composer
│       ├╌╌ doctrine
│       ├╌╌ egulias
│       ├╌╌ erusev
│       ├╌╌ laravel
│       ├╌╌ league
│       ├╌╌ monolog
│       ├╌╌ mtdowling
│       ├╌╌ nesbot
│       ├╌╌ paragonie
│       ├╌╌ psr
│       ├╌╌ ramsey
│       ├╌╌ swiftmailer
│       ├╌╌ symfony
│       ├╌╌ tijsverkoyen
│       ├╌╌ vlucas
│       ├╌╌ autoload.php
│       └╌╌ advance100
│                   ├╌╌ helper
│                   ├╌╌ laravel-ext //此处放laravel框架扩展,不建议项目直接继承laravel框架
│                   └╌╌ laravel-tutorials
│                                 └╌╌src 
│                                     ├╌╌lesson01
│                                     ├╌╌lesson02
│                                     ├╌╌lesson03
│                                     ├╌╌lesson04 //本节课文件夹,每一课是一个独立的项目
│                                     └╌╌lesson05
lesson04项目下文件结构
//将第2课中相应的文件夹拷贝过来就行
┌───app   
├───bootstrap
├───config
├───database
├───resources
├───routes
├───storage

composer.json中加上

    "autoload": {
        "psr-4": {
            "App\\":"./vendor/advance100/laravel-tutorials/src/lesson04/app",
            "Advance100\\Laraext\\":"./vendor/advance100/laravel-ext",
            "Advance100\\Tutorial\\":"./vendor/advance100/laravel-tutorials/src/lesson04"
        }
    },

检查是否有语法错误 vagrant@homestead:~/abcde/study/tutorial$ composer validate
更新自动加载文件 vagrant@homestead:~/abcde/study/tutorial$ composer dumpautoload

四: 部分重要文件

1.指定环境配置文件.env.home

放在D:\03www2018\study\tutorial\vendor\advance100\laravel-tutorials\src\lesson04下面

2. console入口文件 artisan

此入口文件可以为任意名字,我改为a,少写几个字母

3. web入口文件 index.php
4. 生成项目的key

参考源代码IlluminateFoundationConsoleKeyGenerateCommand::handle里面讲了如何生成这个key的
,它会用到配置文件中的cipher配置加密算法为AES-256-CBC
vagrant@homestead:~/abcde/study/tutorial$ php a key:generate自动会修改.env.home中的APP_KEY配置

五:数据迁移

六:数据填充


advance100
599 声望80 粉丝

0he1.com在线课堂