Laravel 5 系列入门教程(一)【最适合中国人的 Laravel 教程】

2015-3-7   /   阅读数:288347   /   分类: Laravel

基于最新 Laravel 5.5 的 2017 版教程已经发布到 Github:https://github.com/johnlui/Learn-Laravel-5/issues

十分建议学习 5.5,跟 5.0 比变化非常大。


本教程示例代码见:https://github.com/johnlui/Learn-Laravel-5

大家在任何地方卡住,最快捷的解决方式就是去看我的示例代码。


Laravel 5 中文文档:

1. http://laravel-china.org/docs/5.0

2. http://www.golaravel.com/laravel/docs/5.0/


默认条件

本文默认你已经有配置完善的 PHP + MySQL 运行环境,懂得 PHP 网站运行的基础知识。跟随本教程走完一遍,你将会得到一个基础的包含登录的简单 blog 系统,并将学会如何使用一些强大的 Laravel 插件和 composer 包(Laravel 插件也是 composer 包)。

软件版本:PHP 5.4+,MySQL 5.1+

本文不推荐完全不懂 PHP 与 MVC 编程的人学习。本文不是 “一步一步跟我做” 教程。本文需要你付出一定的心智去解决一些或大或小的隐藏任务,以达到真正理解 Laravel 运行逻辑的目的。

1. 安装

许多人被拦在了学习Laravel的第一步,安装。并不是因为安装教程有多复杂,而是因为【众所周知的原因】。在此我推荐一个composer全量中国镜像:http://pkg.phpcomposer.com/ 。推荐以 “修改 composer 的配置文件” 方式配置。

镜像配置完成后,切换到你想要放置该网站的目录下(如 C:\wwwroot、/Library/WebServer/Documents/、/var/www/html、/etc/nginx/html 等),运行命令:

composer create-project laravel/laravel learnlaravel5 5.0.22

然后,稍等片刻,当前目录下就会出现一个叫 learnlaravel5 的文件夹。

本系列教程使用 Laravel 5.0 版本,5.1 版本去掉了本系列教程主要讲解的元素(Auth 系统),不建议使用 5.1 来学习。本系列教程为入门教程,目的是搞清楚 Laravel 的基本使用方法,切忌本末倒置。

然后将网站根目录配置为 learnlaravel5/public。

如果你不会配置,建议去学会配置,网上资料很多。如果自暴自弃,可以把 的第 29 行 'url' => 'http://localhost', 配置成你的子目录地址,注意,要一直配置到 */learnlaravel5/public。

使用浏览器访问你配置的地址,将看到以下画面(我在本地配置的地址为 http://fuck.io:88 ):

Image

2. 体验 Auth 系统并完成安装

—— 经过上面的过程,Laravel 5 的安装成功了?

—— 没有o(╯□╰)o

查看路由文件 learnlaravel5/app/Http/routes.php 的代码:

Route::get('/', 'WelcomeController@index');

Route::get('home', 'HomeController@index');

Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController',
]);

跟随代码里的蛛丝马迹,让我们访问 http://fuck.io:88/home (请自行替换域名),结果竟然跳转到了登陆页?

Image

没错,Laravel 自带了开箱即用的 Auth 系统,连页面都已经写好了。

让我们随意输入邮箱和密码,点击登录,你很可能得到以下画面(Mac 或 Linux 下):

Image

为什么空白?用开发者工具查看,这个请求的状态码是 500,为什么?

因为 learnlaravel5/storage 目录没有 777 权限。

执行 shell 命令:

cd learnlaravel5

sudo chmod -R 777 storage

重新访问 http://fuck.io:88/home ,随意输入邮箱和密码,如果你得到以下画面:

Image

那么恭喜你~ Laravel 5 安装成功!

不想配置镜像的同学,可以使用 Laravel 界非常著名的 安正超 搞的安装神器:https://github.com/overtrue/latest-laravel

3. 数据库建立及迁移

Laravel 5 把数据库配置的地方改到了 learnlaravel5/.env,打开这个文件,编辑下面四项,修改为正确的信息:

DB_HOST=localhost

DB_DATABASE=laravel5

DB_USERNAME=root

DB_PASSWORD=password

推荐新建一个名为 laravel5 的数据库,为了学习方便,推荐使用 root 账户直接操作。

Laravel 已经为我们准备好了 Auth 部分的 migration,运行以下命令执行数据库迁移操作:

php artisan migrate

得到的结果如下:

Image

如果你运行命令报错,请检查数据库连接设置。

至此,数据库迁移已完成,你可以打开 http://fuck.io:88/home 欢快地尝试注册、登录啦。

4. 模型 Models

接下来我们将接触Laravel最为强大的部分,Eloquent ORM,真正提高生产力的地方,借用库克的一句话:鹅妹子英!

运行一下命令:

php artisan make:model Article

php artisan make:model Page

Laravel 4 时代,我们使用 Generator 插件来新建 Model。现在,Laravel 5 已经把 Generator 集成进了 Artisan。

现在,Artisan 帮我们在 learnlaravel5/app/ 下创建了两个文件 Article.phpPage.php,这是两个 Model 类,他们都继承了 Laravel Eloquent 提供的 Model 类 Illuminate\Database\Eloquent\Model,且都在 \App 命名空间下。这里需要强调一下,用命令行的方式创建文件,和自己手动创建文件没有任何区别,你也可以尝试自己创建这两个 Model 类。

Model 即为 MVC 中的 M,翻译为 模型,负责跟数据库交互。在 Eloquent 中,数据库中每一张表对应着一个 Model 类(当然也可以对应多个)。

如果你从其他框架转过来,可能对这里一笔带过的 Model 部分很不适应,没办法,是因为 Eloquent 实在太强大了啦,真的没什么好做的,继承一下 Eloquent 类就能实现很多很多功能了。

如果你想深入地了解 Eloquent,可以阅读系列文章:深入理解 Laravel Eloquent(一)——基本概念及用法


接下来进行 Article 和 Page 类对应的 articles 表和 pages表的数据库迁移,进入 learnlaravel5/database/migrations 文件夹。

*_create_articles_table.php 中修改:

Schema::create('articles', function(Blueprint $table)
{
    $table->increments('id');
    $table->string('title');
    $table->string('slug')->nullable();
    $table->text('body')->nullable();
    $table->string('image')->nullable();
    $table->integer('user_id');
    $table->timestamps();
});

*_create_pages_table.php 中修改:

Schema::create('pages', function(Blueprint $table)
{
    $table->increments('id');
    $table->string('title');
    $table->string('slug')->nullable();
    $table->text('body')->nullable();
    $table->integer('user_id');
    $table->timestamps();
});

然后执行命令:

php artisan migrate

成功以后, articles 表和 pages 表已经出现在了数据库里,去看看吧~

5. 数据库填充 Seeder

learnlaravel5/database/seeds/ 下新建 PageTableSeeder.php 文件,内容如下:

delete();

    for ($i=0; $i < 10; $i++) { Page::create([ 'title' => 'Title '.$i,
        'slug'    => 'first-page',
        'body'    => 'Body '.$i,
        'user_id' => 1,
      ]);
    }
  }

}

然后修改同一级目录下的 DatabaseSeeder.php中:

// $this->call('UserTableSeeder');

这一句为

$this->call('PageTableSeeder');

然后运行命令进行数据填充:

composer dump-autoload

php artisan db:seed

去看看 pages 表,是不是多了十行数据?


教程(一)代码快照:https://github.com/johnlui/Learn-Laravel-5/archive/tutorial_1.zip


下一步:Laravel 5 系列入门教程(二)【最适合中国人的 Laravel 教程】

WRITTEN BY

avatar

评论:

python
2015-05-11 22:08
这是第二次从头开始看
感觉好像有很多东西都需要知道
文档只是手把手跟着写,却有很多地方又没有解释

有种依葫芦画瓢的感觉啊~
volg
2015-05-10 02:04
这个教程很有用。。。 顶!!
Hilaravel
2015-05-02 13:35
对了  再补充一下,storage已设置777权限。
JohnLui
2015-05-02 14:22
@Hilaravel:用了 sudo chmod -R 777 storage 了吗?
Hilaravel
2015-05-02 13:33
lnmp环境。安装好后访问首页 500错误  访问domain.com/home  看到URL能跳转到登录页  但还是500错误。一直都是白屏没有任何显示。求解
dougisadog
2015-04-28 14:52
直接从git 上clone的代码 执行 composer install后 更改完config的url为pubic的路径 访问 500错误
JohnLui
2015-04-28 15:29
@dougisadog:Laravel 5 中的 URL 配置没有 CI 中那么重要。500 错误可能是 storage 目录没有 777 权限。
JohnLui
2015-04-28 15:31
@dougisadog:而且“更改完config的url为pubic的路径” 是错误的,应该直接把根目录指向 learnlaravel5/public,public 目录内会有 index.php 承接访问,调用资源,返回结果。
dougisadog
2015-04-29 21:55
@JohnLui:用composer 直接create远程的景象 不用改配置就好用了   git上clone的 就还是报错 除了network500  没有其他的debug 输出 不过还是谢谢了 的研究研究源码 手册没什么用。。。
Wonvy
2015-04-22 15:38
php artisan migrate

我一到命令这里就不知道如何下手了,是windows自带的命令吗
cnxuev
2015-04-26 02:35
@Wonvy:php指的应该是安装PHP5后的php.exe文件,把文件路径加入到系统变量的path中,然后在项目文件夹(learnlaravel5)中运行上述命令即可
小乐丫中文网
2015-04-21 12:48
手机访问的界面很好
好东西
2015-04-18 03:19
好东西
Hui
2015-04-17 17:37
大神您好,文件上传成功了,把图片放到storage/uploads中了,怎么在视图中展示图片啊,img的src不会写。。
JohnLui
2015-04-17 17:38
@Hui: 上传的文件如果要显示,就必须上传到 upload 文件夹中。。。
Hui
2015-04-17 17:41
@JohnLui:upload文件夹可以在任何地方吗??还是固定的storage中?显示的时候图片路径怎么给?谢谢大神
JohnLui
2015-04-17 18:25
@Hui:上面说错了,必须传到 public 中
洪远
2015-04-17 11:47
在执行 php artisan migrate 命令之后我对 Page 表进行了修改
再执行 php artisan migrate 就提示Noting to migrate !!怎么破
更惨的是我在数据库中drop 掉了 Page 表
JohnLui
2015-04-17 12:41
@洪远:migrate 是把用于 migrate 的 PHP 代码自动映射到数据库中。如果想修改数据库结构,按照 Laravel 的使用逻辑应该是新建一个对 pages 表的 migrate 文件,修改它,然后再运行 php artisan migrate。
长安布衣侯
2015-04-11 19:45
只有一个问题,网页反应速度超慢,基本上都是需要20s才能出现。这个是怎么回事呢
leo
2015-04-13 11:25
@长安布衣侯:你说的内容应该是里面加载了google的一些字体
694297232
2015-04-07 16:16
楼主写的文章通熟易懂,此乃神文也。。。。总之非常感谢!
还有可以引用下你的链接吗?
JohnLui
2015-04-07 17:20
@694297232:可以
Hui
2015-04-07 15:33
这个新建model后会不会有文件生成?还有我想用mongodb数据库来连接,请问有教程吗?ajax这块有没有教程?
JohnLui
2015-04-07 17:18
@Hui:新建 Model 之后当然会有 Model 文件生成
用 MongoDB 只需要修改一下配置文件。Ajax 跟 Laravel 本身没有什么特殊的联系。
Hui
2015-04-07 18:18
@JohnLui:可是我怎么也找不到Model文件,model文件夹里没有,但是控制器里对数据库操作神奇的能用,还有个问题就是子视图是什么意思?是iframe那种的嵌套页面吗?谢谢大神
JohnLui
2015-04-07 18:31
@Hui:没有 model 文件夹吧
哥们我没法解答你的问题了,太基础了,建议多补补基础
Hui
2015-04-07 18:46
@JohnLui:谢谢了,刚接触laravel,感觉好难啊。
蒲蒲陈
2015-04-03 18:12
你好,向你请教一个larave5问题,我在后台建立了一个adminControll 控制器 - 公共的,后台所有的控制器都要继承于 admin
在 admin控制器中 use了一些公共资源,
如: use App\Http\Requests;
        use App\Http\Controllers\Controller;
        use Illuminate\Http\Request;
        use Redirect, Input, Auth;
现在遇到的问题是,在menus控制器里面,如果没有加载如下两个资源
       use Illuminate\Http\Request;
        use Redirect, Input, Auth;
就会报错,加载上内容正确,是不是不能再admin控制器中use呢?
JohnLui
2015-04-04 00:02
@蒲蒲陈:他们两个是独立的类,use 不能继承。
azxkill
2015-04-02 19:30
额,刚看到评论有跟我一样的问题,之前没看到,不好意思~我的也是证书的原因吗~~~
JohnLui
2015-04-03 11:56
@azxkill:是因为 Github 间歇性被墙的原因
azxkill
2015-04-02 19:28
G:\laravel>composer create-project laravel/laravel learnlaravel5
Installing laravel/laravel (v5.0.22)
  - Installing laravel/laravel (v5.0.22)
    Loading from cache

Created project in learnlaravel5
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
  - Installing jakub-onderka/php-console-color (0.1)
    Downloading: 100%
    Downloading: 100%
    Downloading: 100%
    Failed to download jakub-onderka/php-console-color from dist: The "https://a
pi.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/e0b393dacf7703fc36a4e
fc3df1435485197e6c1" file could not be downloaded: failed to open stream: 由于连
接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

    Now trying to download from source
  - Installing jakub-onderka/php-console-color (0.1)
    Cloning e0b393dacf7703fc36a4efc3df1435485197e6c1

  - Installing vlucas/phpdotenv (v1.1.0)
    Downloading: Connecting...
大哥,你好,我是第一次玩composer,请问下,我己经用了中国镜像,还出这个错是什么原因呢.我连你教程的第一步都跑不了.麻烦解答下好么~~谢谢~~
拖鞋门吹雪
2015-04-01 23:27
文中有几处 learnlaravel5/databases 应该为learnlaravel5/database 文件夹
JohnLui
2015-04-02 10:25
@拖鞋门吹雪:
chen
2015-04-01 08:04
博主,你好,请问能不能把需要的数据表,表格式贴出来。。不懂数据迁移,想自己手动创建数据库,苦于不知道结构
JohnLui
2015-04-01 10:49
@chen:建议学会数据迁移。不知道你不想学习数据迁移的原因是什么?
芳华如梦
2015-03-31 20:03
访问/home怎么是404???
我是用软链接/var/www/demo指向/documents/demo/public下的
apache的document root是/var/www
JohnLui
2015-04-01 12:22
@芳华如梦:首页能访问的话,就是伪静态问题,需要配置 .htaccess。
spike
2015-04-01 17:41
@JohnLui:我也碰到过类似的问题,确实是服务器配置问题~再来感谢下大神~
martlet
2015-03-31 11:18
在laravel中用 artisan 会在以后的开发过程中很方便吗。。。 我以前用别的框架从没用到过这样子的命令工具,都是手动敲代码,手动建立数据表,现在artisan用起来很不习惯。。 就是想请教一下, 使用laravel,可以不用 artisan 吗,会不会影响开发速度啊
JohnLui
2015-03-31 11:47
@martlet:可以不用,就是麻烦一点,也没什么问题。

发表评论:

© 2011-2019 岁寒  |  Powered by Emlog