上一节我们已经搭建好了homestead环境,这一节我们来初始化一个项目。

使用批处理管理vagrant

  1. @ECHO OFF&PUSHD %~DP0 &TITLE Homestead
  2. set homesteadVagrant=D:\homestead
  3. :Menu
  4. echo.&echo 1、启动Homestead
  5. echo.&echo 2、关闭Homestead
  6. echo.&echo 3、重载Homestead配置
  7. echo.&echo.
  8. set /p a=输入回车:
  9. IF NOT "%a%"=="" SET a=%a:~0,1%
  10. if "%a%"=="1" Goto UP
  11. if "%a%"=="2" Goto DOWN
  12. if "%a%"=="3" Goto RELOAD
  13. echo.&echo 输入无效,请重新输入!
  14. PAUSE >NUL && CLS && GOTO Menu
  15. :UP
  16. echo 正在启动homestead...
  17. cd /d %homesteadVagrant%
  18. vagrant up
  19. CLS && ECHO.&ECHO 启动完成,任意键返回! &&PAUSE >NUL && CLS && GOTO MENU
  20. :DOWN
  21. echo 正在关闭Homestead...
  22. cd /d %homesteadVagrant%
  23. vagrant halt
  24. CLS && ECHO.&ECHO 关闭完成,任意键返回! &&PAUSE >NUL && CLS && GOTO MENU
  25. :RELOAD
  26. echo 正在重载Homestead配置...
  27. cd /d %homesteadVagrant%
  28. vagrant reload --provision
  29. CLS && ECHO.&ECHO 重载完成,任意键返回! &&PAUSE >NUL && CLS && GOTO MENU

将上述内容保存为homestead.bat 注意要修改一下homesteadVagrant改为你电脑具体存放的位置。
以后双击homestead.bat就能快速管理homestead虚拟状态。
image.png

创建Laravel项目

启动homestead完成后,通过xshell连接上homestead。

xshell host:127.0.0.1 port:2222 username:vagrant password:secret

cd ~/code
composer create-project laravel/laravel Laravel --prefer-dist "6.*"

或者使用

cd ~/code
laravel new Laravel

二者的区别是上面的可以指定版本,下面的会安装最新版本。
完成之后,访问 homestead.test 你能看到如下图所示界面,这是 Laravel 为我们生成默认界面。
初始化项目 - 图2
打开 Code 文件夹可以看到刚刚创建的 Laravel 应用,Laravel 默认会为我们生成了一堆文件和文件夹,每一个文件的置放目录和位置都有它的用意。这些目录结构都是经过 Laravel 作者精心设计的,为的就是统一开发规范,强调约定高于配置的原则。

初始化项目 - 图3

文件夹结构简介

表 1.1:Laravel 文件夹结构简介

文件夹名称 简介
app 应用程序的业务逻辑代码存放文件夹
app/Console 存放自定义 Artisan 命令文件
app/Http/Controllers 存放控制器文件
app/Http/Middleware 存放「中间件」文件
bootstrap 框架启动与自动加载设置相关的文件
composer.json 应用依赖的扩展包
composer.lock 扩展包列表,确保这个应用的副本使用相同版本的扩展包
config 应用程序的配置文件
database 数据库操作相关文件(数据库迁移和数据填充)
node_modules 存放 NPM 依赖模块
package.json 应用所需的 NPM 包配置文件
phpunit.xml 测试工具 PHPUnit 的配置文件
public 前端控制器和资源相关文件(图片、JavaScript、CSS)
readme.md 项目介绍说明文件
resources 应用资源
resources/js 未编译的 JavaScript 代码
resources/sass 未编译的 SASS 代码 (将会编译为 CSS )
resources/lang 多语言文件
resources/views 视图文件
routes/api.php 用于定义 API 类型的路由
routes/channels.php 事件广播注册信息
routes/console.php 用于定义 Artisan 命令
routes/web.php 用于定义 Web 类型的路由(重点,大部分情况下本书会用到)
server.php 使用 PHP 内置服务器时的 URL 重写(类似于 Apache 的 “mod_rewrite” )
storage 编译后的视图、基于会话、文件缓存和其它框架生成的文件
storage/app 目录可用于存储应用程序使用的任何文件
storage/framework 目录被用于保存框架生成的文件及缓存
storage/logs 应用程序的日志文件
tests 应用测试相关文件
vendor Composer 依赖模块
webpack.mix.js Laravel 的前端工作流配置文件
yarn.lock Yarn 依赖版本锁定文件
.gitignore 被 Git 所忽略的文件
.env 环境变量配置文件

Composer

Composer 是一款跨平台的 PHP 依赖管理工具,其创作灵感来源于 Node.js 的 NPM 与 Ruby 的 Bundler。Laravel 使用 Composer 来作为扩展包的管理工具。你可以利用 Composer 结合 其它开源扩展包 来达到快速建站的目的。打开 composer.json 文件,可以看到 Laravel 默认集成了一些为框架提供支持的扩展包。

Composer 是一个伟大的发明,他让组件式编程成为可能,编写软件时,就如拼接乐高玩具一样。极大的提高了开发的效率和代码的可复用性,解放了生产力。

composer.json

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.2",
        "fideloper/proxy": "^4.0",
        "laravel/framework": "^6.0",
        "laravel/tinker": "^1.0"
    },
    "require-dev": {
        "facade/ignition": "^1.4",
        "fzaninotto/faker": "^1.4",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^3.0",
        "phpunit/phpunit": "^8.0"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    }
}

该文件使用 JSON 格式编写,require 键对应的是应用在 Laravel 所有环境上的扩展包,require-dev 键对应的是应用在 Laravel 开发环境上的扩展包。

在添加扩展包到 composer.json 时,需要为扩展包指定版本号才能进行安装。我们从 composer.json 文件中可以看到使用 ^ 来指定版本范围,如:

"facade/ignition": "^1.4",

^1.4 表示任意大于等于 1.41.x.x 版本,比如 1.4.01.4.11.11.01.9.99999 等。只要前面的 1 并且大于 ^ 后面指定的 1.4 都满足条件。

新手的话不要求完全弄懂 Composer,上面的知识让你能跟着教程继续下去,后面等掌握此书的知识了,慢慢能站稳脚跟了,再继续深入学习。

第一行 Laravel 代码

现在让我们来写下第一行 Laravel 代码,在页面上加入一些带有我们个人身份信息的内容。

Laravel 在项目创建时会自动为我们生成一个 welcome.blade.php 文件,这个文件将被用于渲染 Laravel 的默认视图。现在,让我们打开该文件,复制替换为以下内容,并加入你自己的一些个人信息。

resources/views/welcome.blade.php

<!DOCTYPE html>
<html>
    <head>
        <title>Laravel</title>
        <style>
            html, body {
                height: 100%;
            }

            body {
                margin: 0;
                padding: 0;
                width: 100%;
                display: table;
                font-weight: 100;
                font-family: "Helvetica Neue", NotoSansHans-Regular,AvenirNext-Regular,arial,Hiragino Sans GB,"Microsoft Yahei","Hiragino Sans GB","WenQuanYi Micro Hei",sans-serif;
                color:#777;
            }

            .container {
                text-align: center;
                display: table-cell;
                vertical-align: middle;
            }

            .content {
                text-align: center;
                display: inline-block;
            }

            .title {
                font-size: 66px;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="content">
                <div class="title">Hello Laravel!</div>
            </div>
        </div>
    </body>
</html>

接着让我们重新打开 http://homestead.test 页面,可看到我们的个人信息已经成功显示在页面上。

初始化项目 - 图4

.env 文件

接下来,我们还需要对应用根目录下的 .env 文件进行设置,为应用指定数据库名称。

.env

.
.
.
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
.
.
.

.env 文件中,除了 DB_DATABASE 之外还有其它的设置信息,接下来让我们对里面的几项配置信息进行简单讲解。

一般来说,在进行实际应用的开发过程中,应用会拥有不同的运行环境,通常会有以下环境:

  • 本地开发环境
  • 测试环境
  • 生产环境

在不同环境中,我们可能会使用不同的数据库或邮件发送驱动等配置,这时候则需要通过 .env 文件来针对不同的运行环境作不同的设置。比如上面我们所编辑的 .env 文件配置将应用在本地的开发环境(local)上。

.env 支持对应用的进行简单配置,比如你可以通过 APP_ENV 来设定当前应用的运行环境,使用 APP_DEBUG 来设定是否在应用报错时显示调试信息,使用 APP_KEY 来生成应用的密钥用于加密一些较为敏感的数据。APP_NAMEAPP_URL 分别是应用名称和访问 URL 。

APP_NAME=Weibo
APP_ENV=local
APP_KEY=base64:dIAK2B7exLbY2S54RFQdI3c6vg9/qIWWjYy5M4ESa4A=
APP_DEBUG=true
APP_URL=http://homestead.test

接下来对数据库的连接方式、数据库名、用户名密码等做相关配置:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

缓存、会话、队列等驱动的相关配置信息:

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

Redis 相关的配置信息,默认为 Redis 的通用配置:

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

邮件相关的配置信息:

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

在完成对 .env 文件的设置后,我们便可以通过传参给 getenv 方法来获取到 .env 文件中指定的值,如调用 getenv('APP_ENV') 将返回 local