[关闭]
@artman328 2015-06-16T02:03:11.000000Z 字数 14561 阅读 1175

Laravel 5 开发

php laravel


一、Laravel 框架安装

前提条件:
系统中有 PHP 5.4+
1. 按照官方指南安装;
2. 到 https://github.com/overtrue/latest-laravel 下载 laravel-master.tar.gz,解压。

  1. 测试安装
    假定以上压缩包解压到了 D:\proj 。在命令窗口分别执行:
  1. d:
  2. cd \proj\laravel
  3. php artisan serve

如果命令行有输出:
Laravel development server started on http://localhost:8000/
然后打开浏览器,输入网址:http://localhost:8000/,能够看到输出页面,说明安装成功。

二、开发步骤

建立模型 -> 确定路由 -> 编写控制器和响应函数(使用模型) -> 编写视图

1. 模型建立

1)建立数据库迁移文件
2)执行迁移建表
3)建立对应的模型

2. 确定路由

路由文件: app/Http/routes.php

Route::请求命令(url,匿名响应函数 或 控制器@响应函数);

请求命令:get, post, put, delete ...

如:

  1. Route::get("students","StudentController@list");
  2. Route::get("something",function(){
  3. return "<h1>您请求了 something.</h1>";
  4. });

3. 编写控制器

在项目文件夹中执行:

php artisan make:controller 控制器名称 [--plain]

可选参数 --plain 要求不要生成任何函数。

控制器将会被生成在: app/Http/Controllers/控制器名称.php

在其中编写函数以响应请求。

4. 编写视图

如果在某控制器的一个响应函数里,有:

return view("something");

那就要有一个 resources/views/something.blade.php 的视图文件相对应。

如果上面是 "myview.something", 则对应文件是:resources/views/myview/something.blade.php,以便组织视图。

三、开发举例 —— 我喜爱的歌

将 Laravel 框架完整压缩包解压到某处,将 laravel 文件夹更名为你选择的名称,这个文件夹就是你的项目文件夹。

0、修改应用程序命名空间(默认是App)。在命令行(切换到项目文件夹下)执行:

php artisan app:name Song

1、修改 config/database.php 文件,将其中的:

'default' => 'mysql';

改为:

'default' => 'sqlite';

根据配置文件内容:

    'sqlite' => [
        'driver'   => 'sqlite',
        'database' => storage_path().'/database.sqlite',
        'prefix'   => '',
    ],

可以看出,mysqlite 的数据库文件是在 storage 文件夹中,名为 database.sqlite。 我们当然可以更改其名字,在此我们不做更改。

2、在 storage 文件夹中建立一个空文件,名为:database.sqlite。

3、建立数据迁移文件,计划建立存储歌曲的表。进入命令窗口,切换到项目所在文件夹,执行以下命令:

php artisan make:migration create_songs_table --create songs

命令执行后,会在 database/migrations 文件夹下生成一个包含 create_songs_table 的 php 文件。这是建立歌曲表的迁移文件(相当于建表计划)。

4、根据需要,修改迁移文件中建表的内容为:

$table->increments('id');
    $table->string('name');
$table->string('slug')->unique();
    $table->string('lyrics');
//$table->timestamps(); 本行注释掉了

5、执行以上迁移。在命令行执行:

php artisan migrate

成功执行后,数据库中就建立了一个叫做 songs 的表。

6、插入实验数据。在命令行执行:

php artisan tinker

进入一个交互环境,在这个环境中,Laravel 框架的注册服务都可以使用,如 DB 等。

>>>DB::table('songs')->get()
[]
>>>

以上输出说明 songs 表已经存在,只不过尚未有数据。

>>>DB::table('songs')->insert(['name'=>'Hello','slug'=>'hello','lyrics'=>'Hello Lyrics'])
true
>>>

以上就插入了一条记录。你可以根据需要多插入几条记录。

用 exit 或按 CTRL+C 退出交互界面。

7、编写路由。我们希望用 http://127.0.0.1:8000/songs 这个网址看到歌曲列表。找到 app/Http/routes.php 文件,加入以下一行:

Route::get('songs','SongController@index');

保存。

8、回到命令行,执行以下语句:

php artisan make:controller SongController

命令成功执行后,会生成一个控制器文件: app/Http/Controllers/SongController.php,打开它,你会发现它自动生成了许多函数,包括 index() 。

9、在 index() 函数中,加入以下语句:

$songs = DB::table('songs')->get();
    //以上这句需要在这个文件的顶部加入: use DB; 否则出错
    return view('songs.songlist',['songlist'=>$songs]);

10、编写视图
视图文件的默认文件夹在: resources/views 里,但根据第9条,我们的视图是 "songs.songlist", 那么,我们的视图应该是:

resources/views/songs/songlist.blade.php

因此,你要在 resources/views 下建立一个叫做 songs 的文件夹,再在其中建立一个叫做 songlist.blade.php 的文件。在这个文件中,写入以下 HTML 内容:

<h1>我喜爱的歌</h1>
<ul>
    @foreach($songlist as $song)
        <li><a href="songs/{{ $song->slug }}">{{ $song->name }}</a></li>
    @endforeach
</ul>

11、将以上所有文件保存后,在命令行输入:

php artisan serve

然后打开浏览器,在地址栏输入:

http://127.0.0.1:8000/songs

你应该能在浏览器里看到你的歌名列表,否则,请仔细检查以上步骤错误的地方。

12、下面我们来处理以上列表的链接,用于查看每首歌的详情。注意以上列表中每首歌的链接形式为:

http://127.0.0.1:8000/songs/歌曲的slug

因此,在 app/Http/routes.php 中,加入以下路由:

Route::get('songs/{slug}','SongController@show');

13、在控制器文件 app/Http/Controllers/SongController.php 的 show($slug) *函数体中,加入以下语句:

*原来参数是 idslug

$song = DB::table('songs')->where('slug',$slug)->first();
return view('songs.song')->with('thesong',$song);

14、在 resources/views/songs/ 文件夹下建立名为 song.blade.php 的文件,加入以下内容:

<h2>{{  $thesong->name }}</h2>
    @if($thesong->lyrics)
<article>
    {{ $thesong->lyrics }}
</article>
@endif

15、以上文件保存后,请进入:

http://127.0.0.1:8000/songs

然后点击歌曲名的链接,你应该能够看到每首歌的歌名和歌词(如果有歌词的话)。

16、下面我们来实现删除一首歌的功能。把 resources/views/songs/songlist.blade.php 内容改为:

<h1>我喜爱的歌</h1>
<ul>
    @foreach($songlist as $song)
        <li><a href="songs/{{ $song->slug }}">{{ $song->name }}</a>&nbsp;&nbsp;<a href="/songs/delete/{{ $song->slug }}">删除</a></li>
    @endforeach
</ul>

这样,删除一首歌的链接就是:

http://127.0.0.1/songs/delete/歌曲的slug

17、在 app/Http/routes.php 中,加入以下路由:

Route::get('songs/delete/{slug}','SongController@destroy');

18、打开 app/Http/Controllers/SongController.php, 将函数 destroy($id) 改成 destroy($slug),然后再函数体中加入:

$song = DB::table('songs')->where('slug',$slug)->first();
if($song){
        DB::delete("delete from songs where slug='$slug'");
}
return Redirect::to('songs');//此句要求在文件顶部加入: use Redirect;

19、歌曲删除完后,你不得不到 tinker 界面再次添加记录。但我们可以使用 Laravel 提供的 seed 机制为数据库提供大量样本数据。请到项目文件夹的命令行界面,执行以下命令:

composer require fzaninotto/Faker --dev

安装 Faker 的目的是为我们产生一些样本数据。

20、在 database/seeds 文件夹下建立一个叫做 SongTableSeeder.php 的文件,输入以下内容:

<?php 
use Illuminate\Database\Seeder;

class SongTableSeeder extends Seeder {

    public function run()
    {
        $faker = Faker\Factory::create('zh_CN');//创建一个伪造器
        //伪造器使用请参照:https://github.com/fzaninotto/Faker
        DB::table('songs')->delete(); //删除原有​数据

        for($i=0;$i<20;$i++){
    			DB::table('songs')->insert(
    			[
    			    'name'=>$faker->sentence,
    			    'slug'=>$faker->slug,
    			    'lyrics'=>$faker->text
            ]
            );
        }
    }

}

21、修改 database/seeds/DatabaseSeeder.php 文件,在其 run() 函数的最后一行输入:

$this->call('SongTableSeeder');

22、为了让 Laravel 知道我们新建了一个类 SongTableSeeder , 在命令行执行一次:

composer dumpautoload -o

23、在命令行执行:

php artisan db:seed

如果看到 Seeded SongTableSeeder提示,说明数据库里已经有了20条样本数据。

24、接着,我们来设计“添加歌曲”功能。首先,打开 resources/views/songs/songlist.blade.php 文件,在

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注