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

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

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

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

Laravel 5 中文文档:

默认条件

本文默认你已经有配置完善的 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 ):

fa96f693c544c9041ffc201a38ae9ecf.png

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 (请自行替换域名),结果竟然跳转到了登陆页?

cf3cd0d6053a4361d573d9251d776223.png

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

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

e4aa267135d7253f21dbb171344bb3e0.png

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

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

执行 shell 命令:

cd learnlaravel5

sudo chmod -R 777 storage

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

c995634660deaef659cdf82dede64d0e.png

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

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

得到的结果如下:

98ef7bb5ab668ac21024dfd841ce430b.png

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

至此,数据库迁移已完成,你可以打开 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.php 和 Page.php,这是两个 Model 类,他们都继承了 Laravel Eloquent 提供的 Model 类 Illuminate\Database\Eloquent\Model,且都在 \App 命名空间下。这里需要强调一下,用命令行的方式创建文件,和自己手动创建文件没有任何区别,你也可以尝试自己创建这两个 Model 类。

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

如果你从其他框架转过来,可能对这里一笔带过的 Model 部分很不适应,没办法,是因为 Eloquent 实在太强大了啦,真的没什么好做的,继承一下 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 表,是不是多了十行数据?

WRITTEN BY

9918749bb4d134e0a0a19c7c9d51aff8.png

程序员,Swift Contributor,正在写《iOS 可视化编程与 Auto Layout》。

评论:

cd2f9e5020ca3751f0064c1aae05adb3?s=40&d=mm&r=g

2018-10-24 04:12

好赞

17795660dc39be85b37e2e2a4b81fd6f.png

酱酱鱼

2018-02-02 18:08

有用么

2df72c8b69f8f67a7569e3454e2fd4f2?s=40&d=mm&r=g

Albert

2018-01-10 10:44

请问你这个博客系统是什么做的呢?是用laravel还是wordpress?

f2eb4aff4d2bcce79de0c4ced545de54.png

2018-01-10 11:00

@Albert:请看底部

17795660dc39be85b37e2e2a4b81fd6f.png

lili

2017-08-22 17:15

[Illuminate\Database\QueryException]

SQLSTATE[42S01]: Base table or view already exists: 1050 La table 'users' existe d茅j脿 (SQL

: create table `users` (`id` int unsigned not null auto_increment primary key, `name` varc

har(255) not null, `email` varchar(255) not null, `password` varchar(255) not null, `remem

ber_token` varchar(100) null, `created_at` timestamp null, `updated_at` timestamp null) de

fault character set utf8mb4 collate utf8mb4_unicode_ci)

[PDOException]

SQLSTATE[42S01]: Base table or view already exists: 1050 La table 'users' existe

执行php artisan grate 报了上面的错误,如何避免呢

5df9f9891111dc9e3a36e774a3775b66?s=40&d=mm&r=g

2017-04-01 17:01

[Symfony\Component\Debug\Exception\FatalErrorException]

Cannot declare class CreateUsersTable, because the name is already in use

这个是咋回事呢?我已经清空数据库了,说我那个名字已经在使用了,咋解决/我的事wamp64位,php7.0.1版本,laraval是5.2.15刚入手的,之前用过一下thinkphp。请大家指教一下。

87b410d3585ebf710098be66373ecce5?s=40&d=mm&r=g

柚子

2017-04-16 15:22

@哲哲别:这个数据叫迁移自己会创建附属的数据库,你没有清干净,你这个截图,有点抽象,谁看了,我想一直半会也想不起来

5df9f9891111dc9e3a36e774a3775b66?s=40&d=mm&r=g

2017-04-01 16:21

我的直接弄的5.2版本,很多有些不一样呀,不知道怎么创建数据表。。。创建模型之后,没有出现在 ***_create_articles_table.php这些。不知道怎么搞了,版本之间变化好大呀!

1f139a43208534277ff58ad9701b178e?s=40&d=mm&r=g

zhouciming

2017-03-30 00:59

按你的教程,我一切都是成功的。唯一不解的是:插入的记录中,create_at填充的时间总是比实际的时间小8个小时,中国在东8区,所以这个8与时区设置有关。但是我的php.ini中已经设置了timezone = PRC了,那么为什么还会出现这个问题呢,请指教!!!

5df9f9891111dc9e3a36e774a3775b66?s=40&d=mm&r=g

2017-04-01 16:17

@zhouciming:这个时区要自己重新配置,在D:\wamp64\www\laravel-v5.2.15\config\app.php,这里需要配置一下    'timezone' => 'PRC',就可以了

1f139a43208534277ff58ad9701b178e?s=40&d=mm&r=g

zhouciming

2017-04-01 16:43

@哲哲别:非常感谢,已经找到这个位置了!

7bebec093b1bb4f93467d4214751d562?s=40&d=mm&r=g

幸运儿

2017-03-17 18:01

你好,怎么做到登录之后跳转到登录前的页面呢?谢谢

87b410d3585ebf710098be66373ecce5?s=40&d=mm&r=g

柚子

2017-04-16 15:24

@幸运儿:重定向

7bebec093b1bb4f93467d4214751d562?s=40&d=mm&r=g

幸运儿

2017-04-17 18:22

@柚子:我的意思是,你登录之前的页面是不确定的。但是你登录之后要跳转到登录前的页面。你重定向的url写死吗?我是想问怎么把它写活

17795660dc39be85b37e2e2a4b81fd6f.png

Alen

2017-10-16 20:00

@幸运儿:你可以这样 redirect()->back()

17795660dc39be85b37e2e2a4b81fd6f.png

拾荒少年

2017-02-26 18:39

博主威武!!!

e529df4238a7f8acd863c8bdf788a770?s=40&d=mm&r=g

2017-01-12 10:23

看过你的教程之后,感觉很清晰,条理性很强,赞。

17795660dc39be85b37e2e2a4b81fd6f.png

gaga

2016-12-28 22:39

不错,赞一个

000a808133425e07b5067e32ff6f58de?s=40&d=mm&r=g

snail

2016-09-07 14:46

博主好脏~~~域名亮瞎了。艹

c3ce0667366e4d9d32653112402939df.gif

c3ce0667366e4d9d32653112402939df.gif

c3ce0667366e4d9d32653112402939df.gif

17795660dc39be85b37e2e2a4b81fd6f.png

2016-08-19 13:41

93年的小伙伴这么强~

cd9254147f2d9380fb749cb8d1fdb71e.gif

cd9254147f2d9380fb749cb8d1fdb71e.gif

cd9254147f2d9380fb749cb8d1fdb71e.gif

cd9254147f2d9380fb749cb8d1fdb71e.gif

17795660dc39be85b37e2e2a4b81fd6f.png

2016-07-15 18:25

Uncaught TypeError: Argument 1 passed to App\Exceptions\Handler::report() must be an instance of Exception, instance of Error given, called in /home/dong/www/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php on line 73 and defined in /home/dong/www/laravel/app/Exceptions/Handler.php:25

Stack trace:

#0 /home/dong/www/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(73): App\Exceptions\Handler->report(Object(Error))

#1 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleException(Object(Error))

#2 {main}

thrown

大神这是什么意思?

cae7c7a380e72f9789d17fb3370030e8?s=40&d=mm&r=g

Ebychu

2016-06-23 15:35

00c9d8e8322de036b66bb9a5abd1d07a.gif讲的好棒奥,不过生成测试数据,用faker组件会不会更方便一些呢

d298d92aef5c78094c6172a27b6b70c2?s=40&d=mm&r=g

rolla

2016-05-11 16:04

很棒的教程,简直玩得停不下来

a4c8b98519d59a3e7a0fa7ae87bb23e8?s=40&d=mm&r=g

2016-05-07 15:37

感谢分享!

e5dc682ee824845b507ebc1dfa20dd57.gif

Laravel 很不错,这几天一直在学习。

1f3d11da6d6bc165d1f5c82125b0889b?s=40&d=mm&r=g

2016-04-29 23:09

rewrite规则,简单方便,http://wp.iyouths.org/292.html

1ad9356e9d92cbe419f6c0a294c1e447?s=40&d=mm&r=g

2016-04-24 10:23

00c9d8e8322de036b66bb9a5abd1d07a.gif

请问下 访问不存在的路由 laravel下如何接管啊!!

比如 我定义的路由的路由是test 然后访问一个不存在的路由地址比如new

这个时间如何接管这个new路由

thinkphp 有empty接管

dca1d7dcb8f8f8718b5f718272dfaef2?s=40&d=mm&r=g

YiHong

2016-04-14 11:58

老师,在实际开发中,每次修改表结构都会在database/migrationgs目录下生产一个.php文件,假如是一个大型的项目,那得生产100多个.php文件。您怎么解决这种问题?

b4e096582b34593bde61edea25d594f0?s=40&d=mm&r=g

justId

2016-09-22 17:51

@YiHong:这个简单啊,其实真正作用的是方法里的函数,建表的话也可以按照模块来分migrate文件,数据填充也是这个思路

发表评论:

昵称

邮件地址 (选填)

个人主页 (选填)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值