首先打开Git Bash
T580@DESKTOP MINGW64 ~/Homestead (v7.8.0)
$ cd ~
$ cd Homestead/
$ vagrant.exe up && vagrant.exe ssh
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-64-generic x86_64)
_ _ _
| | | | | |
| |__ ___ _ __ ___ ___ ___| |_ ___ __ _ __| |
| '_ \ / _ \| '_ ` _ \ / _ \/ __| __/ _ \/ _` |/ _` |
| | | | (_) | | | | | | __/\__ \ || __/ (_| | (_| |
|_| |_|\___/|_| |_| |_|\___||___/\__\___|\__,_|\__,_|
* Homestead v12.3.0
* Settler v11.3.0 (Ubuntu 20.04)
* Canonical Livepatch is available for installation.
- Reduce system reboots and improve kernel security. Activate at:
https://ubuntu.com/livepatch
Last login: Sun Jun 13 03:14:11 2021 from 10.0.2.2
vagrant@homestead:~$
在虚拟机中进入 Code 文件夹:
vagrant@homestead:~$ cd Code/
vagrant@homestead:~/Code$ composer create-project laravel/laravel weibo --prefer-dist "6.*"
修改hosts
Windows 下打开 Hosts 文件:
C:/Windows/System32/Drivers/etc/hosts
Linux 下的位置:
vi /etc/hosts
文件成功打开后,在 hosts 文件最后面新增下面一行以完成设置:
192.168.10.10 weibo.test
新增站点
运行下面命令打开 Homestead.yaml 文件:
T580@DESKTOP MINGW64 ~/Homestead (v7.8.0)
$ vi Homestead.yaml
在 Homestead.yaml 文件中新增 weibo 应用的 sites 和 databases 的相关设置:
---
ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
authorize: ~/.ssh/id_rsa.pub
keys:
- ~/.ssh/id_rsa
- ~/.ssh/id_rsa.pub
folders:
- map: E:/Bak
to: /home/vagrant/Bak
sites:
- map: homestead.test
to: /home/vagrant/Code/Laravel/public
- map: weibo.test # <--- 这里
to: /home/vagrant/Code/weibo/public # <--- 这里
- map: larabbs.test # <--- 这里
to: /home/vagrant/Code/larabbs/public #
databases:
- homestead
- weibo # <--- 这里
- larabbs # <--- 这里
variables:
- key: APP_ENV
value: local
。。。
注意:如果是linux下,需要修改这里
folders:
- map: ~/Code
to: /home/vagrant/Code
我们主要设置了 sites 和 databases 两项。 sites 会将域名 weibo.test 映射到虚拟机的 /home/vagrant/Code/weibo/public 文件夹上,而 databases 则为新创建的项目指定数据库名。
重启虚拟机#
在我们每次对 Homestead.yaml 文件进行了更改之后,都需要运行下面命令来使其更改生效:
> cd ~/Homestead && vagrant provision && vagrant reloadCopy
&& 符号是 Bash 语法,起到拼接命令的作用,此处将三个命令连续执行;
vagrant provision 是命令 Vagrant 重新加载 Homestead.yaml 配置;
vagrant reload 是重启虚拟机使更改生效。
.env 文件#
接下来,我们还需要对应用根目录下的 .env 文件进行设置,为应用指定数据库名称 weibo。
.env
vagrant@homestead:~/Code$ cd weibo/
vagrant@homestead:~/Code/weibo$ vi .env
在不同环境中,我们可能会使用不同的数据库或邮件发送驱动等配置,这时候则需要通过 .env 文件来针对不同的运行环境作不同的设置。比如上面我们所编辑的 .env 文件配置将应用在本地的开发环境(local)上。
.env 支持对应用的进行简单配置,比如你可以通过 APP_ENV 来设定当前应用的运行环境,使用 APP_DEBUG 来设定是否在应用报错时显示调试信息,使用 APP_KEY 来生成应用的密钥用于加密一些较为敏感的数据。APP_NAME 和 APP_URL 分别是应用名称和访问 URL 。
APP_NAME=Weibo
APP_ENV=local
APP_KEY=base64:Xp1cGPnwzo8QUKTrBuspGY2RZTa4bVSQEyIdNZgfdTY=
APP_DEBUG=true
APP_URL=http://weibo.test
接下来对数据库的连接方式、数据库名、用户名密码等做相关配置:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=weibo
DB_USERNAME=homestead
DB_PASSWORD=secretCopy
缓存、会话、队列等驱动的相关配置信息:
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120Copy
Redis 相关的配置信息,默认为 Redis 的通用配置:
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379Copy
邮件相关的配置信息:
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
版本控制
vagrant@homestead:~/Code/weibo$ git init
Initialized empty Git repository in /home/vagrant/Code/weibo/.git/
vagrant@homestead:~/Code/weibo$ git add -A
vagrant@homestead:~/Code/weibo$ git commit -m "Initial commit"
新建分支
首先让我们使用 Git 来新建一个 static-pages 分支。
vagrant@homestead:~/Code/weibo$ git checkout master
Already on 'master'
vagrant@homestead:~/Code/weibo$ git checkout -b static-pages
Switched to a new branch 'static-pages'
移除无用视图
Laravel 默认会为我们生成一个 welcome.blade.php 视图文件,主要用于对默认页面进行渲染,这个文件对我们接下来的项目开发没有一点用处,因此我们可将其移除:
vagrant@homestead:~/Code/weibo$ rm resources/views/welcome.blade.php
接下来要构建三个静态页面分别是主页、帮助页、关于页。因此我们需要为路由指定好三个不同的 URL:
vagrant@homestead:~/Code/weibo$ vi routes/web.php
<?php
Route::get('/', 'StaticPagesController@home');
Route::get('/help', 'StaticPagesController@help');
Route::get('/about', 'StaticPagesController@about');
在上面的代码中,我们为 get 方法传递了两个参数,第一个参数指明了 URL,第二个参数指明了处理该 URL 的控制器动作。get 表明这个路由将会响应 GET 请求,并将请求映射到指定的控制器动作上。比方说,我们向 weibo.test/ 发出了一个请求,则该请求将会由 StaticPagesController 的 home 方法进行处理。我们将在下节创建 StaticPagesController,为你讲解控制器在收到请求后如何进行相关操作。
在 Laravel 中我们较为常用的几个基本的 HTTP 操作分别为 GET、POST、PATCH、DELETE。
GET 常用于页面读取 POST 常用于数据提交 PATCH 常用于数据更新 DELETE 常用于数据删除
在这四个动作中,PATCH 和 DELETE 是不被浏览器所支持的,但我们可以通过在提交表单中做一些手脚,让服务器以为这两个动作是从浏览器中发出的一样,后面我会具体讲解如何在表单中通过添加隐藏域的方式来欺骗服务器。这里你只需要有个大概的印象即可。
生成静态路由控制器(驼峰法命名)
vagrant@homestead:~/Code/weibo$ php artisan make:controller StaticPagesController
Controller created successfully.
vagrant@homestead:~/Code/weibo$ vi app/Http/Controllers/StaticPagesController.php
<?php
namespace App\Http\Controllers;
//我们用 use 来引用在 PHP 文件中要使用的类,引用之后便可以对其进行调用。
use Illuminate\Http\Request;
class StaticPagesController extends Controller
{
//
public function home()
{
return 'Home';
}
public function help()
{
return 'help';
}
public function about()
{
return 'about';
}
}
在 StaticPagesController 类中,我们新定义了三个方法,这三个方法在接受到路由发过来的请求时,将会返回各自页面的名称,这三个方法名称与路由上的定义一一对应。现在:
访问 weibo.test/ 你将看到有 “Home” 二字
访问 weibo.test/help 页面,则会看到 “help”
访问 weibo.test/about 页面,则会看到 “about”
添加静态页面视图
要在控制器中指定渲染某个视图,则需要使用到 view 方法,view 方法接收两个参数,第一个参数是视图的路径名称,第二个参数是与视图绑定的数据
vagrant@homestead:~/Code/weibo$ vi app/Http/Controllers/StaticPagesController.php
<?php
namespace App\Http\Controllers;
//我们用 use 来引用在 PHP 文件中要使用的类,引用之后便可以对其进行调用。
use Illuminate\Http\Request;
class StaticPagesController extends Controller
{
//
public function home()
{
return view('static_pages/home');
}
public function help()
{
return view('static_pages/help');
}
public function about()
{
return view('static_pages/about');
}
}
//下面这行代码,将会渲染在 resources/views
//文件夹下的 static_pages/home.blade.php 文件。
//默认情况下,所有的视图文件都存放在 resources/views 文件夹下。
//return view('static_pages/home');
在控制器中指定渲染的视图之后,接下来便是对视图进行构建了,我们需要在 resources/views 中新增下面三个视图。
vagrant@homestead:~/Code/weibo$ vi resources/views/static_pages/home.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Weibo App</title>
</head>
<body>
<h1>主页</h1>
</body>
</html>
~
vagrant@homestead:~/Code/weibo$ vi resources/views/static_pages/help.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Weibo App</title>
</head>
<body>
<h1>帮助页</h1>
</body>
</html>
vagrant@homestead:~/Code/weibo$ vi resources/views/static_pages/about.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Weibo App</title>
</head>
<body>
<h1>关于页</h1>
</body>
</html>
Blade 模板#
细心的你可能会留意到这三个文件的后缀名均为 .blade.php,而不是 .php。这是因为 Blade 是 Laravel 中提供的一套模板引擎,在 Blade 视图中我们可以使用 Laravel 为这套引擎定义的一些默认方法,并完全兼容 PHP 语法的书写。在项目运行时,Laravel 会把所有的 Blade 视图进行编译缓存成普通的 PHP 代码,因此你不必担心 Blade 会对应用产生负担。
使用通用视图
我们给应用创建了一个 default 视图,并将其放在 layouts 文件夹中,default 视图将作为整个应用的基础视图。实际上你只要保证视图文件被放置在 resources/views 目录下即可,Laravel 对视图的文件夹和文件命名并没有限制,我将 default 文件放在 layouts 文件下,只是为了让应用的目录结构让人更好理解。
vagrant@homestead:~/Code/weibo$ mkdir resources/views/layouts
vagrant@homestead:~/Code/weibo$ vi resources/views/layouts/default.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Weibo App</title>
</head>
<body>
@yield('content')
</body>
</html>
@yield('content')
上面的这行代码表示该占位区域将用于显示 content 区块的内容,而 content 区块的内容将由继承自 default 视图的子视图定义。
Laravel 的 Blade 模板支持继承,这意味多个子视图可以共用父视图提供的视图模板。接下来让我们修改之前创建的首页视图文件,来学习下如何使用 Blade 模板的继承。
vagrant@homestead:~/Code/weibo$ vi resources/views/static_pages/home.blade.php
@extends('layouts.default')
@section('content')
<h1>home</h1>
@stop
我们使用了 @extends 并通过传参来继承父视图 layouts/default.blade.php 的视图模板。
@extends('layouts.default')
使用 @section 和 @stop 代码来填充父视图的 content 区块,所有包含在 @section 和 @stop 中的代码都将被插入到父视图的 content 区块。
@section('content')
<h1>主页</h1>
@stop
vagrant@homestead:~/Code/weibo$ vi resources/views/layouts/default.blade.php
<!DOCTYPE html>
<html>
<head>
<title>@yield('title', 'Weibo App')</title>
</head>
<body>
@yield('content')
</body>
</html>
~
我们要修改默认视图文件,在代码显示标题的位置嵌入 @yield 区块:
我们给 @yield 传了两个参数,第一个参数是该区块的变量名称,第二个参数是默认值,表示当指定变量的值为空值时,使用 Weibo 来作为默认值。
vagrant@homestead:~/Code/weibo$ vi resources/views/static_pages/help.blade.php
@extends('layouts.default')
@section('title', 'help')
@section('content')
<h1>help</h1>
@stop
注意的是,当 @section 传递了第二个参数时,便不需要再通过 @stop 标识来告诉 Laravel 填充区块会在具体哪个位置结束。
下面让我们来为帮助页和关于页加上指定标题
vagrant@homestead:~/Code/weibo$ vi resources/views/layouts/default.blade.php
<!DOCTYPE html>
<html>
<head>
<title>@yiele('title', 'Weibo App') - Laravel 新手入门教程</title>
</head>
<body>
@yield('content')
</body>
</html>
Git 代码版本控制#
接着让我们将本次更改纳入版本控制中:
vagrant@homestead:~/Code/weibo$ git add -A
vagrant@homestead:~/Code/weibo$ git commit -m "基础页面"
将 Git 切换到 master 分支,并合并 static-pages 分支上的修改:
vagrant@homestead:~/Code/weibo$ git checkout master
Switched to branch 'master'
vagrant@homestead:~/Code/weibo$ git merge static-pages