Laravel - 控制器从视图中获取 select 值
Laravel - Controller get select value from Views
我正在使用 Laravel 制作公告板,我希望公告板上的文章可以按 select 年份显示(例如,选择 2022 时,只显示文章 post 2022 年)。我参考了很多类似的问题和 Laravel 的官方网站,但并不顺利,这就是我现在得到的:
select 在“blade.php”中:
<select name="article_year" onchange="">
@foreach ($year as $item)
<option value="{{ $item->id}}">{{ $item->name}}</option>
@endforeach
</select>
'Controller.php' 中的索引():
$article_year = $request->get('article_year');
$data['news'] = (new Article())->where('user_year', $article_year)->get();
谁能告诉我问题出在哪里?谢谢!
我参考的一些网站:
Laravel Discuss - How to get value from Select box
Passing the value of a select from view to controller in 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);
}
}
试试这个
$article_year = $request->get('article_year');
$data['news'] = Article::where('user_year', $article_year)->get();
return $data;
我认为您错过了一些传递索引方法的依赖关系....这就是您收到 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;
谢谢大家的回答,大家给我不同的想法,帮我找到答案。我的代码正在运行:
route-web.php
Route::get('/', 'HomeController@index')->name('home');
Route::post('/', 'HomeController@index');
blade.php
<form>
<select name="article_year">
@foreach ($year as $item)
<option value="{{ $item->name}}">{{ $item->name}}</option>
@endforeach
</select>
<input type="submit" value="Submit Form" />
</form>
控制器
<?php
namespace App\Http\Controllers;
use App\Article;
use App\Catalog;
use App\User;
use App\Http\Controllers\Controller;
use App;
use Illuminate\Http\Request;
class HomeController extends Controller
{
public function index(Request $request)
{
$view = 'home';
$value = $request->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);
}
}
我正在使用 Laravel 制作公告板,我希望公告板上的文章可以按 select 年份显示(例如,选择 2022 时,只显示文章 post 2022 年)。我参考了很多类似的问题和 Laravel 的官方网站,但并不顺利,这就是我现在得到的:
select 在“blade.php”中:
<select name="article_year" onchange="">
@foreach ($year as $item)
<option value="{{ $item->id}}">{{ $item->name}}</option>
@endforeach
</select>
'Controller.php' 中的索引():
$article_year = $request->get('article_year');
$data['news'] = (new Article())->where('user_year', $article_year)->get();
谁能告诉我问题出在哪里?谢谢!
我参考的一些网站:
Laravel Discuss - How to get value from Select box
Passing the value of a select from view to controller in 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);
}
}
试试这个
$article_year = $request->get('article_year');
$data['news'] = Article::where('user_year', $article_year)->get();
return $data;
我认为您错过了一些传递索引方法的依赖关系....这就是您收到 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;
谢谢大家的回答,大家给我不同的想法,帮我找到答案。我的代码正在运行:
route-web.php
Route::get('/', 'HomeController@index')->name('home');
Route::post('/', 'HomeController@index');
blade.php
<form>
<select name="article_year">
@foreach ($year as $item)
<option value="{{ $item->name}}">{{ $item->name}}</option>
@endforeach
</select>
<input type="submit" value="Submit Form" />
</form>
控制器
<?php
namespace App\Http\Controllers;
use App\Article;
use App\Catalog;
use App\User;
use App\Http\Controllers\Controller;
use App;
use Illuminate\Http\Request;
class HomeController extends Controller
{
public function index(Request $request)
{
$view = 'home';
$value = $request->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);
}
}