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

2015-3-7   /   阅读数:288346   /   分类: 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

评论:

vilay
2015-06-14 11:18
大神,问个弱智问题,是不是数据库表名一定要加s
JohnLui
2015-06-14 11:46
@vilay:根据标准美式英文习惯用法来决定是否加s
vilay
2015-06-15 09:45
@JohnLui:能不能详细说明下啊,没懂什么意思
litbear
2015-06-13 15:20
您好 博主 我下载了Laravel5.1 routes.php里只注册了根的路由,并且写法也不是之前那种基于反射的方式而是直接返回了一个return view('welcome');
请问是5.1版本去掉了自带的auth视图吗?
litbear
2015-06-14 09:39
@litbear:经查阅【https://laravel-news.com/2015/06/laravel-5-1-released/】证实 Eric Barnes :With 5.1 the auth routes and views are no longer included so I don't think it's needed any longer. Of course I could be wrong.
那么另一个问题来了,composer如何安装制定版本的Laravel呢?
JohnLui
2015-06-14 11:45
@litbear:仔细看文章哦,我在上面安装的时候指定了版本哦~
litbear
2015-06-14 12:42
@JohnLui:明白了 THX
allen
2015-06-10 15:29
不好的教程比没有教程危害更大,特别是对初学者,database/seeds/PageTableSeeder.php 中的Page命名空间信赖于项目名,不是App\Page,我的项目是laraveldemo,所以应该是use laraveldemo\Page;否则会报错PHP Fatal error:  Class 'App\Page' not found
JohnLui
2015-06-10 16:02
@allen:
凤翼天堂
2015-07-21 14:49
@allen:我也遇到了这个问题 谢谢 相同方法解决了!
younh
2015-06-10 00:01
指教下大神,在本地环境配置和测试laravel5无问题,为什么上传到虚拟空间后只有根目录首页能显示,其他都报无法访问的错误呢?路由那边的问题吗?路径和数据库链接我检查过没问题,就是不知道问题在哪
JohnLui
2015-06-10 11:13
@younh:目测是 .htaccess  Apache 伪静态问题。
younh
2015-06-10 11:46
@JohnLui:感谢提醒,问题已解决,是虚拟空间的服务器是iis的缘故。。。把htaccess转换成web.config后,一切正常了
Xander
2015-06-07 17:13
我去我竟然配成功了,不容易啊
lemo
2015-06-05 22:38
你好,看了你的教程进行数据填充的时候提示 Class DatabaseSeeder does not exist     已进行dump-autoload操作,而且我是根据你的例子写的是PageTableSeeder为什么提示的是 DatabaseSeeder 求解答
JohnLui
2015-06-10 11:13
@lemo:应该是低级错误,你再检查一下
凤翼天堂
2015-07-21 14:51
@lemo:也出现了这个问题 请问你当时是怎么解决的
duluwa
2015-06-04 08:38
小白请教一个两个问题。。

第一个:迁移数据的时候执行到php artisan fresh 这一步,然后发现migrations文件夹里的create文件都消失了,然后在想第二次执行php artision migrate的时候显示Nothing to migrate。现在无法第二次数据库迁移。。。

第二个:routes里添加auth以后访问首页显示找不到auth文件夹
JohnLui
2015-06-04 11:31
@duluwa:php artisan fresh 的意思就是删掉重来。“想第二次执行php artision migrate的时候显示Nothing to migrate”,这是一个特性/bug,只能先手动清空数据库,删掉所有的表,再进行第二次迁移。

第二个问题目测是理解错了路由。。。
初学者
2015-06-02 16:46
出了个问题折腾了好一段时间! 如果碰到一下错误提示的朋友,不妨试一下。

php artisan migrate 命令执行后提示一下错误

[PDOException]                                    
SQLSTATE[HY000] [2002] No such file or directory


解决方法:
根目录下有个.env的文件打开后找
host=localhost  把这一段改成
host=127.0.0.1 才能顺利执行
Yison
2015-05-27 10:39
ok,还是之前没细看浏览器的请求时间,是谷歌字体的原因。感谢楼主!
Yison
2015-05-27 10:28
楼主你好,刚接触这个框架,我已经安装完了,注册登陆都好用了,但是有个问题咨询下 为什么运行起来这么缓慢?我打开welcome页面就等很久?请问这个如何优化一下,我百度了下貌似没人反应运行缓慢的问题。我是默认安装的,程序包就20M 是因为加载了太多的插件导致运行缓慢吗?
初学者
2015-06-02 16:54
@Yison:浏览器->开发者模式->网络

看看页面加载的时候是不是导入google字体了? 如果你不翻x墙的话加载谷歌字体这一块会拖延很长时间。
希望对你有帮助
kidjourney
2015-05-26 15:15
chmod 777 不是什么好习惯吧。。。。
JohnLui
2015-05-27 10:11
@kidjourney:但是授予其他任何权限都是跑不起来的哦
Jack
2015-05-21 22:26
本地服务器配置都ok了www.laravel5.com都通过apache配置到了laravel5/public了能出现laravel5的图片了加上home就不显示了
JohnLui
2015-05-21 23:13
@Jack:应该是伪静态没有配置
墨风
2015-05-22 17:29
@JohnLui:我也是同样的问题,Apache 已经开启mod_rewrite了,权限设置里面也同样设置了,但是还是出现这个问题
乌鸦
2015-05-21 13:24
大神求救阿。
今天我在实验室用composer create-project laravel/laravel 安装的时候,一直抱错!之前一直好好的,而且现在宿舍电脑安装也没问题。。。一直无法解决。
cmd错误信息:

Generating autoload files
Could not open input file: artisan
Script php artisan clear-compiled handling the post-install-cmd event returned with an error

  [RuntimeException]
  Error Output:

create-project [-s|--stability="..."] [--prefer-source] [--prefer-dist] [--repos
itory-url="..."] [--dev] [--no-dev] [--no-plugins] [--no-custom-installers] [--n
o-scripts] [--no-progress] [--keep-vcs] [--no-install] [--ignore-platform-reqs]
[package] [directory] [version]
JohnLui
2015-05-21 15:38
@乌鸦:尝试翻墙吧
是这样子啦
2015-05-21 09:17
看完教程结尾的大作业内容,我在想pages数据表和articles数据库表各自代表含义和区别,不然难以下手。
JohnLui
2015-05-21 15:37
@是这样子啦:他们差不多啦,完全模仿就行~
无邪
2015-05-19 14:35
你好, 我这个运行php artisan migrate  。提示 Could not open input file: artisan 。这是什么意思啊。 我把文件路径调的laravel 根目录。 composer 也是安装好的。 求解
JohnLui
2015-05-19 15:18
@无邪:根目录下应该有一个文件,叫 artisan
是这样子啦
2015-05-20 15:03
@无邪:应该是文件权限问题,敢问你是神马系统环境
求救2
2015-05-17 12:44
php artisan migrate,这条命令在哪里输入啊?
是这样子啦
2015-05-19 08:43
@求救2:例如,我的项目根目录为C:\wamp\www\laravel。 laravel文件夹下存在artisan。 那么用命令 cd C:\wamp\www\laravel切到该文件目录下使用php artisan migrate。
求救。。。
2015-05-17 09:31
http://fuck.io:88/home,这一步不能出现教程说的登陆框,而是出现了404not find 大神求救解决。环境为WAMP,访问http://127.0.0.1:88/没问题。
JohnLui
2015-05-17 11:13
@求救。。。:伪静态失败~
求救2
2015-06-28 19:17
@JohnLui:那怎么设置呀?
hoi
2015-07-03 11:58
@求救。。。:WAMP 默认没有打开 rewrite 模块,打开它就可以了。
我也用的WAMP,本来想和其它项目区分开来,使用 http://localhost/laravel/ 作为项目的根路径,结果发现这样也会出现你描述的问题,后来改回 htpp://localhost 就正常了。
结论:
1、项目要配置在根路径 / ;
2、apache 的 rewrite 模块要打开。
Angel
2015-05-17 09:03
老师,请教一下?这个错,怎么解决啊?Warning: require(F:\testphp\th-online\weixin\bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in F:\testphp\th-online\weixin\bootstrap\autoload.php on line 17

Fatal error: require(): Failed opening required 'F:\testphp\th-online\weixin\bootstrap/../vendor/autoload.php' (include_path='.;C:\xampp\php\PEAR') in F:\testphp\th-online\weixin\bootstrap\autoload.php on line 17
JohnLui
2015-05-17 11:14
@Angel:composer update忘了执行了?
laravel初学者_
2015-05-15 14:21
大哥您好 数据库怎么配置。照着步骤都最好了
php artisan migrate打这个
出现了这个
[PDOException]
  SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
然后怎么处理了 求帮忙谢谢
JohnLui
2015-05-15 14:32
@laravel初学者_:这就是账号密码错误
redsword
2015-06-03 18:38
@laravel初学者_:这样,你先把.env 文件里的DB_PASSWORD=password 改成空,即 DB_PASSWORD=  
然后在mysql(我用的是xampp)里手动建一个空的laravel5数据库

然后再运行migrate命令
gglinux
2015-05-13 21:59
您好,请教下。不知道为什么始终进入不了laravel的欢迎页面。

1:用浏览器打开的时候没有任何错误提示,就是无法加载(服务器未发生数据)。
2:如果在public文件夹下直接写一个index.html替换掉index.php,能够访问到index.html。
3:storage的权限是777。
4:php的版本是PHP 5.5.9-1ubuntu4 (cli).
5:初始化的时候,composer没有提示错误
JohnLui
2015-05-14 00:14
@gglinux:尝试在index.php里输出数据,一行一行地尝试,最终能定位到哪一步有问题。
gglinux
2015-05-14 10:06
@JohnLui:我把bootstrap/autoload.php第30行以下的注销掉,他就能显示出欢迎页了。这时候会生成新的compiled.php文件。搞不明白为什么会这样。。。之前这个compiled.php的权限就是777了。。。难道是这个自带的compiled.php文件有问题
// $compiledPath = __DIR__.'/../vendor/compiled.php';
// echo $compiledPath;
// if (file_exists($compiledPath))
// {
//     require $compiledPath;
// }
JohnLui
2015-05-14 10:11
@gglinux:说明 Composer 运行失败
gglinux
2015-05-14 10:31
@JohnLui:....
Generating autoload files
Generating optimized class loader
Compiling common classes
Application key [iXziec00aQMs3g9FvADQrnO4mI2MZXB0] set successfully.

Composer运行时没有报错了。。。按理说注销掉compiled.php那几行,不会影响后续的工作吧
JohnLui
2015-05-14 10:42
@gglinux:"按理" 按的是谁的理
gglinux
2015-05-14 10:49
@JohnLui:
$compiledPath = __DIR__.'/../vendor/compiled.php';
// if (file_exists($compiledPath))
// {
//     require $compiledPath;
// }

这段代码的含义,如果存在该文件的话,就返回呗。我注销了(不存在),应该有后续的处理的(例如生成新的)。就是不知道这样的话,会不会影响后期的工作,我觉得应该不会。而且不知道具体的错误原因,还是个疙瘩,好蛋痛。。。
JohnLui
2015-05-14 11:18
@gglinux:应该就是 Composer update 没有成功的原因,你开 VPN 试试吧

发表评论:

© 2011-2019 岁寒  |  Powered by Emlog