上一节我们已经搭建好了homestead环境,这一节我们来初始化一个项目。
使用批处理管理vagrant
@ECHO OFF&PUSHD %~DP0 &TITLE Homestead
set homesteadVagrant=D:\homestead
:Menu
echo.&echo 1、启动Homestead
echo.&echo 2、关闭Homestead
echo.&echo 3、重载Homestead配置
echo.&echo.
set /p a=输入回车:
IF NOT "%a%"=="" SET a=%a:~0,1%
if "%a%"=="1" Goto UP
if "%a%"=="2" Goto DOWN
if "%a%"=="3" Goto RELOAD
echo.&echo 输入无效,请重新输入!
PAUSE >NUL && CLS && GOTO Menu
:UP
echo 正在启动homestead...
cd /d %homesteadVagrant%
vagrant up
CLS && ECHO.&ECHO 启动完成,任意键返回! &&PAUSE >NUL && CLS && GOTO MENU
:DOWN
echo 正在关闭Homestead...
cd /d %homesteadVagrant%
vagrant halt
CLS && ECHO.&ECHO 关闭完成,任意键返回! &&PAUSE >NUL && CLS && GOTO MENU
:RELOAD
echo 正在重载Homestead配置...
cd /d %homesteadVagrant%
vagrant reload --provision
CLS && ECHO.&ECHO 重载完成,任意键返回! &&PAUSE >NUL && CLS && GOTO MENU
将上述内容保存为homestead.bat 注意要修改一下homesteadVagrant
改为你电脑具体存放的位置。
以后双击homestead.bat就能快速管理homestead虚拟状态。
创建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 为我们生成默认界面。
打开 Code 文件夹可以看到刚刚创建的 Laravel 应用,Laravel 默认会为我们生成了一堆文件和文件夹,每一个文件的置放目录和位置都有它的用意。这些目录结构都是经过 Laravel 作者精心设计的,为的就是统一开发规范,强调约定高于配置的原则。
文件夹结构简介
表 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.4
的 1.x.x
版本,比如 1.4.0
、1.4.1
、1.11.0
、1.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 页面,可看到我们的个人信息已经成功显示在页面上。
.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_NAME
和 APP_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
。