# 3. 第一個路由 UsersController
> 2017\.08.09 內容重新修改整理,代碼優化
正如上一篇 [Ruby 程序員學習 laravel 框架筆記 (2)-跑 laravel 的 hello world](https://www.rails365.net/articles/ruby-cheng-xu-yuan-xue-xi-laravel-kuang-jia-bi-ji-2-pao-laravel-de-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)-在數據庫中創建一條數據](https://www.rails365.net/articles/ruby-cheng-xu-yuan-xue-xi-laravel-kuang-jia-bi-ji-4-zai-shu-ju-ku-zhong-chuang-jian-yi-tiao-shu-ju)
- 0. 介紹
- 1. php 開發環境安裝
- 2. 跑 laravel 的 hello world
- 3. 第一個路由 UsersController
- 4. 在數據庫中創建一條數據
- 5. 簡單的用戶認證
- 6. 修改 User model
- 7. User model 的 getter 方法
- 8. view 的更多知識
- 9. 在 view 中共享變量
- 10. blade layout
- 11. 使用 @include 來整理 view
- 12. Blade if/else/unless/or
- 13. factories, faker and seeding
- 14. Blade foreach
- 15. 分頁
- 16. 用中間件來限制用戶必須登錄
- 17. Route group
- 18. CURD 實踐之改變用戶表結構
- 19. CURD 實踐之為新添加的屬性修改注冊功能
- 20. CURD 實踐之用 username 來代替 email 登錄
- 21. CURD 個人中心頁面
- VIM 的 laravel 插件
- VIM 中有效地查看 php 源碼