laravel - 在 Laravel 中对一个函数执行两个操作,可能吗?
问题描述
我的应用程序中有 2 个用户角色,管理员和前任。
管理员可以创建多个模型...
如果,我将我与 ID 1 联系起来?我检索前者的信息。
所以,我的函数 index() 允许检索用户的 id
public function index()
{
if($has_role = auth()->user()->hasRole('admin')){
$formers = Former::first()->paginate(5);
return view('admin.formers.index', compact('formers'));
} else{
$formers = Former::where('email', Auth::user()->email)->paginate(5);
return view('admin.formers.index', compact('formers'));
}
}
好吧,对于用户admin,我想创建一个搜索栏...
我在函数 index()之前创建了它并且有效
public function index(Request $req)
{
if ($req->search == "") {
$formers = Former::paginate(5);
return view('admin.formers.index', compact('formers'));
} else {
$validated = $req->validate([
'search' => 'alpha',
]);
$formers = Former::where('nom', 'LIKE', '%' . $validated['search'] . '%')->paginate(5);
$formers->appends($req->only('search'));
return view('admin.formers.index', compact('formers'));
}
}
现在,我想在一个函数中调整我的两个动作,你可以吗?
您认为我可以获取user_id并在同一功能中制作搜索栏吗?
谢谢
解决方案
我会做的是以下几点:
- 添加一个为两个角色提供数据的操作。
- 仅向管理员显示搜索,但在服务器端忽略这一事实,因为从安全角度来看,非管理员是否可以搜索并不重要。无论如何,他们仅限于他们的结果。
基本上,这可以通过以下方式实现:
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
public function index(Request $request)
{
$user = $request->user();
$formers = Former::query()
->when($user->hasRole('admin') !== true, function (Builder $query) use ($user) {
$query->where('email', $user->email);
})
->when($request->has('s'), function (Builder $query) use ($request) {
$query->where('nom', 'like', '%'.$request->input('s').'%');
})
->paginate(5);
return view('admin.formers.index', compact('formers'))
->with('display_search', $user->hasRole('admin'));
}
然后,您可以在视图中简单地使用$display_search
变量来决定是否要显示搜索:
@if($display_search)
<form method="post" action="...">
<input type="text" name="s" placeholder="Type to search...">
</form>
@endif
推荐阅读
- sql - 如何在关于数字的 sql case 语句中测试条件
- oracle - Jmeter 和 Oracle 连接 - JDBC 请求
- sql - 尝试在 MS Access 中创建 case 语句时出错
- data-binding - UI5中更新模型,使用formatter时双向数据绑定变成单向
- python - 使用 pandas 在 Python 中有条件地对 DataFrame 进行分组
- c - 指针的数组表示法
- amazon-web-services - 具有管理策略的 AWS 用户被 CLI 命令拒绝
- google-bigquery - BigQuery:发生内部错误,无法完成请求。错误:7367027
- c++ - constexpr std::string_view::find_last_of 不适用于带有 libstdc++ 9 的 clang 8
- python - 如何计算单词出现次数而不限于仅精确匹配