菜鸟的蜕变:教你一步一步创建基于laravel5的简易论坛系统(1)

北城以北 提交于 2020-01-08 02:13:04

本教程示例代码见:

本人个人博客站:www.anzichen.com

本人新浪微博:Ann子尘

本教程交流群: 96094083

大家在任何地方卡住,最快捷的解决方式就是去看我的示例代码或者在交流群里面提出来。


Laravel 5 中文文档:

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

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

本项目最终效果图


默认条件

本 文默认你已经有配置完善的 PHP + MySQL 运行环境,懂得 PHP 网站运行的基础知识。跟随本教程走完一遍,你将会得到一个基础的包含登录的简单 luntan 系统,并将学会如何使用一些强大的 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 的文件夹。

然后将learnlaravel5 的文件夹重命名为luntan。

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

 

打开文件夹apache-》conf=》extra=》http-vhosts.conf

然后在Apache虚拟地址配置文件http-vhosts.conf中最后面将网站根目录配置为 luntan/public。

 

在后面添加如下内容<VirtualHost *:80>
    DocumentRoot "D:\ampp\htdocs\phpb\luntan\public"
    ServerName www.bbs.com
    ServerAlias bbs.com
</VirtualHost>



 

然后用记事本打开文件夹 C:\Windows\System32\drivers\etc中的hosts文件

在文件最后面添加如下内容

127.0.0.1      www.bbs.com
127.0.0.1      bbs.com


如果你还是不会配置,建议去学会配置,网上资料很多。注意,要一直配置到 ***/luntan/public。

重启Apache服务器


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

 

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

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

3. 数据库建立及迁移

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

DB_HOST=localhost

DB_DATABASE=luntan

DB_USERNAME=root

DB_PASSWORD=password

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

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

php artisan migrate

得到的结果如下:

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

4. 模型 Models

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

运行一下命令,建立贴文、分类、评论相应模型类:

php artisan make:model Article
php artisan make:model Categoryphp artisan make:model Comment

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

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

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

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

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


接下来进行 Article 、Category和Comment  类对应的 articles、categories 表和 comments表的数据库迁移,进入 `luntan/database/migrations` 文件夹。

在 ***_create_articles_table.php 中修改:

<?phpuse Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration;class CreateArticlesTable extends Migration{    /**     * Run the migrations.     *     * @return void     */    public function up()    {        Schema::create('articles', function(Blueprint $table)        {            $table->increments('id');            $table->string('user_id');            $table->string('title');            $table->text('content');            $table->integer('category')->default(0);            $table->timestamps();        });    }    /**     * Reverse the migrations.     *     * @return void     */    public function down()    {        Schema::drop('articles');    }}

在 ***_create_categories_table.php 中修改:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function(Blueprint $table)
        {
            $table->increments('id');
            $table->string('name');
            $table->string('color');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('categories');
    }

}



在 ***_create_comments_table.php 中修改:

<?phpuse Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration;class CreateCommentsTable extends Migration {    /**     * Run the migrations.     *     * @return void     */    public function up()    {        Schema::create('comments', function(Blueprint $table)        {            $table->increments('id');            $table->integer('message_id');            $table->integer('message_user_id');            $table->integer('user_id');            $table->integer('state')->default(0);            $table->string('content');            $table->timestamps();        });    }    /**     * Reverse the migrations.     *     * @return void     */    public function down()    {        Schema::drop('comments');    }}



 

然后执行命令:

php artisan migrate

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

5. 数据库填充 Seeder

在 `luntan/database/seeds/` 下新建 `ArticleTableSeeder.php` 文件,内容如下:

<?phpuse Illuminate\Database\Seeder;use App\Article;class ArticleTableSeeder extends Seeder {  public function run()  {    DB::table('articles')->delete();      Message::create([        'user_id'   => '1',        'title'       => '安子尘',        'content'   => '子,安于尘世。',        'category'    =>    '1',      ]);  }}

在 `luntan/database/seeds/` 下新建 `CatogryTableSeeder.php` 文件,内容如下:

<?php

use Illuminate\Database\Seeder;
use App\Category;

class CategoryTableSeeder extends Seeder {

  public function run()
  {
    DB::table('categories')->delete();

      Category::create([
      	'id'	=>	'1',
        'name'   => '杂谈',
        'color'    => '202, 60, 60',
      ]);
  }
}



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

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

这一句为

$this->call('ArticleTableSeeder');
$this->call('CatogryTableSeeder');

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

composer dump-autoload

php artisan db:seed

去看看articles 表和categories表,是不是多了一行数据?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!