我正在使用 Laravel 製作一個公告板,我希望公告板上的文章可以透過選擇年份來顯示(例如,選擇 2022 年時,僅顯示 2022 年發布的文章)。我參考了很多類似的問題和Laravel的官方網站,但進展不順利,這是我現在得到的:
選擇「blade.php」:
<select name="article_year" onchange=""> @foreach ($year as $item) <option value="{{ $item->id}}">{{ $item->name}}</option> @endforeach </select>
「Controller.php」中的index():
$article_year = $request->get('article_year'); $data['news'] = (new Article())->where('user_year', $article_year)->get();
誰能告訴我問題出在哪裡?謝謝!
我參考的一些網站:
Laravel - HTTP 請求
Laravel 討論 - 如何從選擇框取得值
在 Laravel 中將選擇的值從視圖傳遞到控制器
控制器的完整程式碼
<?php namespace App\Http\Controllers; use App\Article; use App\Catalog; use App\User; use App\Http\Controllers\Controller; use Request; use App; class HomeController extends Controller { public function __invoke(){} public function index() { $locale = Request::segment(1); $view = 'home'; $article_year = $request->get('article_year'); $data['year'] = (new Catalog())->where('catalog_type_id', 3)->where('is_active', 1)->orderBy('sort_num', 'asc')->get(); $data['news_pin'] = (new Article())->where('is_active', 1)->where('user_year', $article_year)->orderBy('sort_num', 'desc')->get(); $data['news'] = (new Article())->where('is_active', 0)->where('user_year', $article_year)->orderBy('sort_num', 'desc')->get(); return view($view, $data); } }
P粉2538003122024-03-27 22:40:26
感謝大家的回答,每個人都給了我不同的想法並幫助我找到了答案。我的程式碼正在運行:
路由-web.php
Route::get('/', 'HomeController@index')->name('home'); Route::post('/', 'HomeController@index');
刀片.php
控制器
article_year; $data['year'] = (new Catalog())->where('catalog_type_id', 3)->where('is_active', 1)->orderBy('sort_num', 'asc')->get(); $data['news_pin'] = (new Article())->where('is_active', 1)->where('user_year', $value)->orderBy('sort_num', 'desc')->get(); $data['news'] = (new Article())->where('is_active', 0)->where('user_year', $value)->orderBy('sort_num', 'desc')->get(); return view($view, $data); } }
P粉4642089372024-03-27 14:54:15
我認為您錯過了一些傳遞索引方法的依賴項...這就是您收到 500 伺服器錯誤的原因
在你的索引方法中,你沒有傳遞 $request 變數..我認為程式碼應該是這樣的
public function index(Request $request) { $locale = Request::segment(1); $view = 'home'; $article_year = $request->get('article_year'); $data['year'] = (new Catalog())->where('catalog_type_id', 3)->where('is_active', 1)->orderBy('sort_num', 'asc')->get(); $data['news_pin'] = (new Article())->where('is_active', 1)->where('user_year', $article_year)->orderBy('sort_num', 'desc')->get(); $data['news'] = (new Article())->where('is_active', 0)->where('user_year', $article_year)->orderBy('sort_num', 'desc')->get(); return view($view, $data); }
並將此行新增至控制器檔案頂部
use Illuminate\Http\Request;