Ruby 程式設計師學習 Laravel 框架筆記 (3)-第一個路由 UsersController

hfpp2012發表於2017-08-03

2017.08.09 內容重新修改整理,程式碼優化

正如上一篇Ruby 程式設計師學習 laravel 框架筆記 (2)-跑 laravel 的 hello world所說的那樣,已經把專案的hello world跑起來了,現在我們要改它的首頁內容。

很簡單,它的內容在專案檔案中resources/views/welcome.blade.php

裡面是一些靜態的html,加上一些php程式碼混在一起。

很簡單,你開啟這個檔案,就可以修改它的內容了。

有一個地方定義了這個首頁的路由,是這個檔案:routes/web.php

內容如下:

// routes/web.php

<?php

...

Route::get('/', function () {
    return view('welcome');
});

這是個定義路由的檔案。

你可能會思考,當執行view('welcome')為什麼就會去找resources/views/welcome.blade.php呢?

原來有個檔案定義了,是這個檔案:config/view.php

// config/view.php

<?php

return [

    // 主要是這部分
    'paths' => [
        resource_path('views'),
    ],

    'compiled' => realpath(storage_path('framework/views')),

];

resource_path('views')的內容輸出來就是resources/views/welcome.blade.php這個view檔案的絕對路徑了。

1. 修改路由

找到routes/web.php檔案,新增如下內容:

<?php
...

Route::get('/users', function () {
    // 這裡定義了$users這個變數,內容是個陣列
    $users = [
            '0' => [
                'first_name' => 'Renato',
                'last_name' => 'Hysa'
            ],
            '1' => [
                'first_name' => 'Jessica',
                'last_name' => 'Alba'
            ]
        ];
    return $users;
});

然後開啟瀏覽器,輸入:http://127.0.0.1:8000/users,如下圖所示

在瀏覽器中輸出了$users變數的內容。

一般來說,我們不會在路由中放太多邏輯,我們應該把這些邏輯放到controller中。

2. 使用 php artisan 來建立 controller

像rails那樣的,我們可以用命令來生成一個controller,而這個命令就是php artisan

你在終端上輸入php artisan並回車,可以看到它有很多子命令。

現在我們要使用make:controller這個子命令。

php artisan make:controller UsersController

終端上會提示:

Controller created successfully.

表示成功建立了users這個controller,檔案位於app/Http/Controllers/UsersController.php

它的內容如下:

// app/Http/Controllers/UsersController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UsersController extends Controller
{
    //
}

我把它的內容修改如下:

// app/Http/Controllers/UsersController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UsersController extends Controller
{
    // 這部分是新增的
    public function index()
    {
        $users = [
            '0' => [
                'first_name' => 'Renato',
                'last_name' => 'Hysa'
            ],
            '1' => [
                'first_name' => 'Jessica',
                'last_name' => 'Alba'
            ]
        ];
        return $users;
    }
}

就是新增了一個 index action,內容跟之前的一樣。

最後,路由要重新指向到這個新建立的controller和action中,所以要跟著變一下:

// routes/web.php
<? php

...

Route::get('/users', 'UsersController@index');

瀏覽器還是會輸出跟原來一樣的內容。

3. 使用view

在實際開發中,controller應該放一些業務邏輯的內容,比如查詢資料庫、取一些變數之類,而要呈現給使用者的資料應該放在view中。

我們把原本在controller的$users這個變數的內容放到view中。

之前的index方法裡的return $users;改成return view('admin.users.index', compact('users'));

如下所示:

// app/Http/Controllers/UsersController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UsersController extends Controller
{
    public function index()
    {
        $users = [
            '0' => [
                'first_name' => 'Renato',
                'last_name' => 'Hysa'
            ],
            '1' => [
                'first_name' => 'Jessica',
                'last_name' => 'Alba'
            ]
        ];

        // 這行變了,表示 $users 這個變數會傳遞到view中
        return view('admin.users.index', compact('users'));
    }
}

然後找到resources/views目錄,再新建一個admin目錄,再在admin目錄下新建users目錄。

最後新建一個index.blade.php檔案,位於resources/views/admin/users/index.blade.php

resources/views/admin
└── users
    └── index.blade.php

它的內容如下:

<ul>
    @foreach($users as $user)
        <li>{{ $user['first_name'] }} {{ $user['last_name'] }}</li>
    @endforeach
</ul>

最後在瀏覽器中輸入 http://127.0.0.1:8000/users 輸出如下:

完結。

下一篇:Ruby 程式設計師學習 laravel 框架筆記 (4)-在資料庫中建立一條資料

相關文章