Menu
本站点已经完全迁移到 Laravel China 社区,购买过课程的用户请 点击此处登录 ,然后按照迁移指南操作即可。

2.7. 第一个应用,Hello Laravel!

第一个应用,Hello Laravel!

这一节我们来创建一个基本的 Hello World Laravel 应用。上一节已经把环境部署好了,在上节的最后我们关闭了虚拟机。此时我们得先开启 Homestead 虚拟机:

> cd ~/Homestead && vagrant up
> vagrant ssh

虚拟机启动成功后,通过下面命令来新建一个名为 Laravel 的项目:

$ cd ~/Code
$ composer create-project laravel/laravel Laravel --prefer-dist "5.5.*"

完成之后,访问 http://homestead.test 你能看到如下图所示界面,这是 Laravel 为我们生成默认界面。

file

注:建议使用 composer create-project 命令来进行创建 Laravel 项目,这样能利用 Composer 的本地缓存功能和 Composer 中文镜像 来达到下载速度最优,尤其是后续的项目创建。

打开 Code 文件夹可以看到刚刚创建的 Laravel 应用,Laravel 默认会为我们生成了一堆文件,每一个文件的置放目录和位置都有它的用意所在。整个项目的目录结构都是经过 Laravel 作者精心设计的,为的就是统一开发规范,强调约定高于配置的原则。

file

文件夹结构简介

表 1.1:Laravel 文件夹结构简介

文件夹名称 简介
app 应用程序的业务逻辑代码存放文件夹
app/Console 存放自定义 Artisian 命令文件
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/assets 未编译的应用资源文件(图片、JavaScript、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",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=7.0.0",
        "fideloper/proxy": "~3.3",
        "laravel/framework": "5.5.*",
        "laravel/tinker": "~1.0",
        "predis/predis": "^1.1"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~6.0"
    },
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "extra": {
        "laravel": {
            "dont-discover": [
            ]
        }
    },
    "scripts": {
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate"
        ],
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover"
        ]
    },
    "config": {
        "preferred-install": "dist",
        "sort-packages": true,
        "optimize-autoloader": true
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

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

在添加扩展包到 composer.json 时,需要为扩展包指定版本号才能进行安装。我们从 composer.json 文件中可以看到有以下这三种方式来为扩展包来指定版本范围。

第一种如下所示:

"php": ">=7.0.0",

这行代码表示安装版本号大于或等于 7.0.0 版本的 PHP。

第二种是:

"laravel/framework": "5.5.*"

这行代码表示安装在 5.5.0 以上,5.6.0 以下的最新 Laravel 框架,它有可能是 5.5.0 甚至是 5.5.9

第三种是:

"fzaninotto/faker": "~1.4",

这行代码表示安装版本号大于 1.4 但小于 2.0 的 faker。

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

第一行 Laravel 代码

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

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

resources/views/welcome.blade.php

<!DOCTYPE html>
<html>
    <head>
        <title>Laravel</title>

        <link href="https://fonts.googleapis.com/css?family=Lato:100" rel="stylesheet" type="text/css">

        <style>
            html, body {
                height: 100%;
            }

            body {
                margin: 0;
                padding: 0;
                width: 100%;
                display: table;
                font-weight: 100;
                font-family: 'Lato';
            }

            .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! - by Summer</div>
            </div>
        </div>
    </body>
</html>

上面的 Summer 是我的常用网络 ID,你也可以替换为自己的个人信息。

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

file

FAQ

以下是环境部署的常见问题搜集,方便遇到问题的同学查阅。如果你一切正常,请无视以下。

1. SSH auth method: private key

Homestead 启动时 SSH auth method: private key 解决方案汇总

2. Failed to restart php7.0-fpm.service: Unit php7.0-fpm.service not found.

Vagrant 启动虚拟机 提示 PHP7.0 模块找不到,这个怎么处理呢?

上一篇 下一篇
评论数量: 86
945469282

http://homestead.app访问不了 是前一章 hosts文件 window 没有权限修改导致的

xzxuzhou112

@945469282 有权限修改,并且修改成功..192.168.10.10可以进入。应该是映射没成功

xzxuzhou112

终于找到问题所在,首先我是在windows下配置laravel环境.根据教程所示,在修改hosts时直接使用Atom /etc/hosts命令。这么做的后果就是进入了C:\Program Files\Git\etc目录。而实际上想要在本机映射成功,应该修改C:\Windows\System32\drivers\etc\hosts。修改git目录下的hosts文件起不了任何作用。。希望作者能在教程里更正操作,以免后续有人继续踏吭。

TMJoker

file

file
请问,遇到这种情况是怎么解决的?

kraner

@TMJoker 我也遇到这个问题,想问问看你解决了没。

Ares

@TMJoker @kraner 我跟你们情况一样,多试几遍就好了。

uncle

记得在宿主机上sudo chmod -R 777 storage

bestcyt

filecomposer create后不动了是什么原因啊

TMJoker

@bestcyt 等会吧,下载这个的时候是很费事的事情。

acfasj

@xzxuzhou112 对的~

wubuwei

@xzxuzhou112 按您的方式解决了,感谢~

ScrazyAn

很奇怪的问题,我是win10的系统,我修改了sys32下的hosts文件,我也能ping通192.168.10.10,但是在浏览器中我输入ip就无法访问,被拒绝。homestead.app也访问失败,直接EOF了。虚拟机的IP设置也没有问题,求大神帮解。。

potato

@ScrazyAn 我也是 这样 你解决了吗?

WINJAY

file
这个怎么解决的

ScrazyAn

@potato 我开机自启lantern,看了前面同学的问题,我把lantern自启关了,然后重新做了一遍,就没出现这个问题了。

ronger
ronger

各位大神帮我看一下出现这个问题,http://homestead.app访问不了

15975343813

@ronger 看看上面@xzxuzhou112 的解答,我搞好了

ronger

@15975343813 这个权限怎么改呀?我是新手。谢谢了

ronger

@15975343813 xzxuzhou112的解答的是windows系统的,我电脑是苹果的,所以我不知道怎么弄?

15975343813

@ronger 我也是windows的,你直接试试192.168.10.10 能不能行,能行其实也能跑起来,只是名字没这么好看而已。。

15975343813

@ronger 看了后面的文档,映射还是做比较好,百度了个mac的hosts位置:https://jingyan.baidu.com/article/0eb457e50554d603f1a90514.html
你看看行不行

liujiacong

按照教程一步步来,失败

about8090

windows的,直接去修改 C:\Windows\System32\drivers\etc 这个目录下面的HOSTS文件

about8090

@Aragorn 不用管它

lxdong12

是hosts的文件修改错了 用命令行打开的是git目录下的hosts文件,而实际应该是C:\Windows\System32\drivers\etc下的hosts文件

samyond

访问 http://homestead.app/ 好慢才跳出来,差不多要15秒左右。有办法可以破吗?

yc_lucien

file
啥原因

zh_qg

@yc_lucien 修改Code目录的写权限:sudo chmod -R 777 Code

EricaHu

file
我的出现这个问题了...

goodhuping

@samyond 我也遇到了这个问题,创建项目composer create-project laravel/laravel Laravel --prefer-dist "5.5.*"用了一个小时,访问的时候也得15秒才能打开,请问你现在找到解决办法了吗?

anlitong

谁能告诉我文件夹怎么打开??????

iSecret

请关掉Shadowsocks,别问我问什么。

Yangwawa

说一个我自己的问题吧,在create完成后,尝试打开homestead.app页面,由于文件缺少.env文件,倒置首页出现woops,所以大家create完成后 记得检查是否存在.env文件

kider

http://homestead.app访问不了 hosts修改正确的,怎么回事啊,有大神能解决下吗

cjw
  1. host 配置成 192.168.10.10 laraveltest.com
  2. .env.example 复制一份为 .env
  3. php artisan key:generate 生成key

应该就都可以了

yaotong

在前面一个章节的时候,因为vagrant halt的时间太长,我就用command+c关闭,再次运行,vagrant halt,没有任何提示,然后再vagrant up时,报错:
There was an error while executing VBoxManage, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["modifyvm", "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "--natpf1", "delete", "ssh", "--natpf1", "delete", "tcp27017", "--natpf1", "delete", "tcp33060", "--natpf1", "delete", "tcp44300", "--natpf1", "delete", "tcp54320", "--natpf1", "delete", "tcp8000", "--natpf1", "delete", "tcp8025"]

Stderr: VBoxManage: error: The machine 'homestead-7' is already locked for a session (or being unlocked)
VBoxManage: error: Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component MachineWrap, interface IMachine, callee nsISupports
VBoxManage: error: Context: "LockMachine(a->session, LockType_Write)" at line 507 of file VBoxManageModifyVM.cpp

我也不知道什么原因,看报错好像是session lock,所以谷歌解决办法和原因

最终的解决办法是:vboxmanage startvm xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx --type emergencystop
把上面的xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx改成你自己的Command中的第二个,然后再次运行vagrant up,就可以了,不再报错

附加:VBoxManage startvm子命令可以开启一台状态为关闭或者保存的虚拟机。该命令的语法为:
VBoxManage startvm uuid>|name... [--type gui|sdl|headless]

参考连接:
https://blog.sharpbai.com/2017/02/解决vagrant启动机器时报告session-locked问题/
http://kodango.com/use-cli-to-start-vm

希望后来人遇到这种情况的时候,可以快速解决

Jacob

我这边也是映射没有成功,C:\Windows\System32\drivers\etc已经修改了,不是你们说的那个原因(本身改的就是那个文件)

a7760764

@anlitong 文件夹怎么打开啊

a7760764

好像知道了,之前配置homestead.yml时候,将虚拟机文件夹里~/Code映射到本机~/Code时候没有该文件夹,导致没法打开文件夹

a7760764

打开homestead.app时候如果出现下面这句话 No input file specified. ,说明你的项目路径找不到,我就把我的项目名称hello-laravel变为Laravel就好了

old_e

不是说换了国内的源了的吗?怎么还是半小时都没下完/(ㄒoㄒ)/~~

Mars634350962

全程没报错,但是本机ping不通192.168.10.10这个地址。如何破????谢谢各位

aiwandcd

能ping通homestead.app 192.168.10.10 但是首页也打不开。应用部署的时候无报错。homestead.app打不开

aiwandcd

@aiwandcd 一定要严格按照作者顺序来,我一开始没有按照顺序。导致打不开homestead.app。

hewollorld

file

file

file
我访问 http://homestead.app/ 初始化项目成功,虚拟机上已经有项目了,但是没有同步到windows本地机上,请问怎么回事?

sjlssp

homestead.app访问不了,hosts修改正确,仍然不能访问的看这个
的按照这个方法可以解决问题,http://www.cnblogs.com/Skrillex/p/7813676.html

Bruce_Zhang

mac电脑 http://homestead.app 访问不了啊 访问到别人家的网址上去了 hosts文件已经改了 没有问题啊

Bruce_Zhang

@xzxuzhou112 mac 电脑 配置什么都没有问题,可就是打不开homestead.app 地址啊 打开进入别人家的网址去了

file

file

hewollorld

@hewollorld 哎,看来没人会解答了。各位有问题还是自己钻研吧

dianwang

用laravel new Laravel命令创建更简洁一点

Ealine

@aiwandcd 我也是這個問題,現在解決了,我的是因為PHP-FPM沒法正常工作,然後我使用HHVM代替后就可以了。
file

halo_young

表示我homestead环境都没搭建成功,准备用自己的方式学着敲完,不信不可以

weishour

@halo_young 我也是直接用centos7.4 + appnode搭建的生产环境来直接开发学习的

halo_young

@weishour 哈哈我是ubuntu 16.04 加 artisan serve

lpf260

如果一切都没问题,但是访问http://homestead.app打不开的话,可以试试http://homestead.app:8000

vini123

file

噗通噗通就开始了。

yuyinan

@lpf260 这个主要是看你映射的时候端口用的什么,如果是8000:80 输8000就没问题,如果是80:80就默认就行了,这个在虚拟主机配置文件里面应该有提到

yangjie

@sjlssp 厉害,果然可以!

MsteryZ

file
更新很久了...

ruizai

@TMJoker 这个错误似乎是因为没有在虚拟机中运行命令

xiaohigh

@TMJoker Laravel目录不为空 你可以换一个文件夹名安装

Dream_Sky

file 求解决

Xayah

@Dream_Sky 有解决吗?同样的问题

arvin

我遇到的提示是
Installing laravel/laravel (v5.5.22)
[ErrorException]
mkdir(): Protocol error
协议错误,已经给过最高权限了sudo chmod -R 777 vagrant/

ZeroX

@sjlssp 谢谢你 你提供的方法解决了我访问不了http://homestead.app/的问题

ThinkPHP

如果用新版 Chrome 浏览器访问 http://homestead.app 却跳到 https://homestead.app 有两个解决办法:
1、换浏览器
2、把后缀 .app 改成其他的,如 .test 等

参考:https://laravel-china.org/topics/7055/how-to-prohibit-google-browsers-from-forcing-https-to-turn

calochan

配置好域名了,ping这个域名时也能指向那个IP,可是在浏览器上只能用IP访问,域名访问不到,请指点下

calochan

已找到域名自动跳到https而不受信任不能打开的解决方案,大家可以参考 : https://superuser.com/questions/1083766/how-do-i-deal-with-neterr-cert-authority-invalid-in-chrome

liammmm

virtualbox坑真深,在Stack Overflow上看了很多,用VirtualBox-5.2.4-119785-Win试了各种方法都不好用,虚拟机登进去是emergency mode,后来降版本到VirtualBox-5.1.30-118389-Win,成功~希望大家绕坑走。

luhy118

建议在本书中第一页右上角标注下本页内容的最新更新时间,方便读者知道此页内容有没有更新

luhy118

建议在本书中每一页右上角标注下本页内容的最新更新时间,方便读者知道此页内容有没有更新

jcs12311

点击我要改进,进去后的文字是:“完成之后,访问 http://homestead.app 你能看到如下图所示界面,”
但是这个页面上面,文字却是“完成之后,访问 http://homestead.test 你能看到如下图所示”

monsoir

macOS 10.13.2 下使用 @ThinkPHP 的方法可行
1.修改 Homestead.yaml 的 sites -> map 后缀名,app -> test
2.修改 hosts 文件,映射的域名也相应修改为 test 为后缀
3.重启 vagrant
4.刷新页面,不行的话,页面关了再刷新吧

stevenjia

@jcs12311 确实文档写错了,是 homestead.app 而不是访问 homestead.test... 我也纳闷呢,看了hosts文件才知道...

zeroDog

file
请问这种情况该怎么处理啊

zengke689

file

前面配置都是对的,怎么就安装不起 laravel呢,麻烦大家看看。

leijiang

http://homestead.test 打开这个网站的时候一直被重定向,觉得非常奇怪,后来发现是自己的电脑开了小飞机~~~

leijiang

@hello12001810 是什么问题呢?重定向还是什么?如果是重定向,是不是电脑翻墙了呢?

yxiawen

安装不了?

file
一直停在这里

yxiawen

@yxiawen composer 的安装包网址是国外镜像所致,被长城防火墙屏蔽了。可执行以下命令来解决:
composer config -g repo.packagist composer https://packagist.phpcomposer.com

yxiawen

为啥链接不上?求大神指教

file

yxiawen

file

file

yxiawen
yxiawen

@yxiawen 换了最新版本的vagrant 按照步骤来就可以了。。。

file


请不要发布不友善或者负能量的内容。
刻意练习,每日精进。
19
点赞
16196
浏览
86
评论
贡献者

作者
Summer
A man seeking for Wisdom.