昨天我們寫了修改和刪除,今天我們要為報名活動的人完善最後一個報名相關的功能,那就是活動查看。我們要讓報名活動的人能夠簡單的察看自己報名過甚麼活動以做準備,那我們打算幫他加上第二個頁面,讓他可以和article的index一樣查看。
那我們要怎麼新增「我的活動」呢?
我們先到resources\views\layouts\navigation.blade.php
中,在我們的活動列表下增加我們的「我的活動」:
<!-- Navigation Links -->
<div class="hidden space-x-8 sm:-my-px sm:ml-10 sm:flex">
<x-nav-link :href="route('articles.index')" :active="request()->routeIs('articles.index')">
{{ __('活動列表') }}
</x-nav-link>
</div>
<div class="hidden space-x-8 sm:-my-px sm:ml-10 sm:flex">
<x-nav-link :href="route('attend')" :active="request()->routeIs('attend')">
{{ __('我的活動') }}
</x-nav-link>
</div>
這時你會發現,我們沒有要經過任何的controller那我們的route怎麼辦呢?由於我們沒有要經過conotroller,所以必須到web中去定義我們的路徑並為他取名,這樣laravel才能夠找到這條路徑並導過去。那我們先到web去吧,routes\web.php
:
Route::get('/events/attend', function () {
return view('events.attend');
}) ->middleware(['auth', 'verified']) -> name('attend');
這樣我們就完成了我們的命名,要記得為他加上middleware來預防報錯,沒有名字的人要怎麼報名活動呢?為了預防這個我們必須告訴他登入後才能夠查看,那之後我們只需要完成我們的blade就可以了,但是在這之前我們還有東西想講講。
是不是有人會想如果controller中的function不夠用怎麼辦?我想要實作一些功能但我早就已經用完那七個function了,難道我只能再建一個controller?有沒有別的方法?
其實這個問題的解決方法也非常的容易,和我們上面的方法很像,這邊拿我們的程式作範例:
/**
* 點名表獲取
*/
public function gainCheck(Request $request)
{
$article = Article::find($request -> article_id);
$article -> send_already = 1;
$article -> save();
return redirect() -> route('dashboard') -> with('notice','');
}
我們這邊我們創了一個新的function叫做gaincheck,他並不屬於原先的七個,所以在他的controller中並沒有他的route,這樣你在直接叫他的時候就會出現這個route沒有定義的報錯,那我們只需要到web中去定義他就可以了。
Route::any('/joiners/gainCheck', [App\Http\Controllers\JoinerController::class, "gainCheck"]
)->name('gainCheck');
雖然很容易,但是在呼叫時要記得用他的名字去呼叫他這樣才叫得到喔!
那我們去將我們的blade寫完來完成今天吧。
<x-app-layout>
<x-slot name="header" >
<div class="flex space-x-12">
<div class="font-semibold text-xl text-gray-800 leading-tight">
<a href="{{ route('attend') }}" class="text-gray-600 hover:text-gray-900 dark:text-gray-400 dark:hover:text-white focus:outline focus:outline-2 focus:rounded-sm focus:outline-red-500">
{{ __('參加的活動') }}
</a>
</div>
</div>
</x-slot>
<div class="m-6"></div>
@foreach(auth() -> user() -> joinArticles as $article)
<div class="py-2">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8 ">
<div class=" bg-white shadow-sm sm:rounded-lg divide-y">
<div class="text-lg p-6 text-gray-900 ">
<div class="flex justify-between items-center">
<div class="font-semibold px-4">
<a href = "{{ route('articles.show', $article) }}"> {{ $article->title }} </a>
</div>
</div>
<div class = "ml-2 text-base text-gray-500 py-4 px-6">
{{ $article->summary }}
</div>
</div>
</div>
</div>
</div>
@endforeach
</x-app-layout>
這樣我們就完成了我的活動的察看了。
今天也是程式碼相對簡單的一天,但是今天的概念卻相當實用呢,若是要完成許多功能的時候,今天介紹的東西就會不斷的被使用到,所以之後如果忘記也可以回來看看要怎麼做喔,明天我們要來看看到底有誰報名了我的活動,我倒是要好好看清楚他的資料,那我們明天一起來看看吧,明天見,掰掰!