iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 9
0
Modern Web

PHP laravel的邂逅系列 第 9

DAY09-Controller介紹 PART 2

DAY09-Controller介紹PART 2

昨天的controller中的index已經可以正常執行,今天來講解其他幾個Function。

下面的語法可以一次幫你建立好CRUD的路由,在web.php只要留下下面這一行就可以了。

//  routes/web.php
Route::resource('news','Newscontroller');

終端機打入下面語法,就會顯示目前所有的路由,方便查看,如果忘記有寫哪些路由,就可以這樣查詢。

php artisan route:list

public function create(){
    return '新增一筆資料';
}

網址打上:http://127.0.0.1:8000/news/create ,看看有沒有正常執行

public function show($id){
    return '最新消息'.$id;
}

網址打上:http://127.0.0.1:8000/news/1 ,就可以看到上面的字串跟傳進去的id

edit、update、destroy、show,這幾個Function都是傳參數進去,可以修改特定的某筆資料。

controller單個行為寫法

如果你的controller只處理單個行為的話,就可以使用__invoke的方法,而在route裡面也只要寫上controller的名字就可以抓到controller的資料。

//web.php
Route::get('user/{id}', 'ShowProfile');
//controller
<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Controllers\Controller;

class ShowProfile extends Controller
{
    public function __invoke($id)
    {
        return view('user.profile', ['user' => User::findOrFail($id)]);
    }
}


controller middleware用法

可以在route的後面加上middleware字樣和名稱即可使用

Route::get('profile', 'UserController@show')->middleware('auth');

也可以在controller中加入middleware使用

class UserController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');

        $this->middleware('log')->only('index');

        $this->middleware('subscribed')->except('store');
    }
}

或是直接在midddleware裡面加入閉包寫middleware,如果你的middleware程式碼很少的話就可以使用這個方法,就不用在特別新增一個middleware了。

$this->middleware(function ($request, $next) {
    // ...
    return $next($request);
});

在後續章節會有完整的CRUD教學


上一篇
DAY08-Controller介紹PART 1
下一篇
DAY10-View介紹
系列文
PHP laravel的邂逅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
neohsu1214
iT邦見習生 ‧ 2019-03-02 00:28:48

Route::get('user/{id}', 'ShowProfile');
是否該改為
Route::get('/user/{id}', 'ShowProfile');

0
neohsu1214
iT邦見習生 ‧ 2019-03-02 00:38:53

是否漏了UserController建立的指令?
php artisan make:controller --resource UserController

Route::get('profile', 'UserController@show')->middleware('auth');
是否需改為
Route::get('/profile', 'UserController@show')->middleware('auth');

我要留言

立即登入留言