php - Laravel 上的存储库模式
问题描述
我想使用,Repository Pattern
但我坚持语法。我想得到我的函数 index()。
第一步,我创建我Repositories
的文件夹并创建文件AuteurRepository.php
在我的文件AuteurController我有这个:
public function index()
{
$auteurs = Auteur::oldest()->paginate(5);
return view('admin.auteurs.index', compact('auteurs'))
->with('i', (request()->input('page', 1)-1)*5);
}
在我的模型中,我只有一个文件Auteur
protected $fillable = ['name', 'firstname'];
我有两个问题:
1)在我的文件AuteurRepository 中,我应该如何创建我的函数index()?
我试过这个?
<?php
namespace App\Repositories;
use App\Auteur;
class AuteurRepository
{
public function index()
{
return Auteur::oldest()->paginate(5);
}
}
?>
我的第二个问题是在我的AuteurController我不明白该怎么做?
我现在有这个
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Auteur;
use App\Repositories\AuteurRepository;
class AuteurController extends Controller
{
protected $auteurs;
public function __construct(AuteurRepository $auteurs)
{
$this->auteurs = $auteurs;
}
public function index(Request $request)
{
return view('admin.auteurs.index', compact('auteurs'))
}
}
解决方案
1) 在我的文件 AuteurRepository 中,我应该如何创建我的函数 index()?
你可以给它取你想要的名字,index(), allRecords(), ...。并执行您需要的查询。
我的第二个问题是在我的 AuteurController 我不明白该怎么做?
如果您的存储库如下所示:
class AuteurRepository
{
public function index()
{
return Auteur::oldest()->paginate(5);
}
}
在您的控制器中,您可以像这样访问回购索引功能:
class AuteurController extends Controller
{
protected $auteurs;
public function __construct(AuteurRepository $auteurs)
{
$this->auteurs = $auteurs;
}
public function index(Request $request)
{
$auteurs = $this->auteurs->index();
return view('admin.auteurs.index', compact('auteurs'))
}
}
编辑
此外,您可以自定义一点查询。例如:
在存储库中接受 index 方法中的参数:
class AuteurRepository
{
public function index($filters)
{
$pagination = $filters['pagination'];
$order = $filters['order'];
return Auteur::orderBy('created_at', $order)
->paginate($pagination);
}
}
并在控制器中创建要作为参数传递的数组:
$filters = [
'pagination' => 5,
'order' => 'asc',
];
或者
$filters = [
'pagination' => 10,
'order' => 'desc',
];
或者您可以从请求中获取值(请确保保留默认值,以防请求输入为空)
$filters = [
'pagination' => $request->input('pagination')?: 5,
'order' => $request->input('order')?: 'asc',
];
然后将参数传递给repo:
$auteurs = $this->auteurs->index($filters);
希望能帮助到你 ;-)
推荐阅读
- java - 为什么我不能在case语句java中返回值
- javascript - 类型错误:data.map 不是函数
- ios - watchOS 是否支持自定义 SiriKit Intent 的语音快捷方式?
- python - 如何在 TensorFlow 中编写 argmax 函数?
- java - 我如何使用 peak_detection 功能 - Android Studio
- memory - 操作系统如何处理内存泄漏
- php - 明确存在时找不到文件 php(htaccess 保护)
- xml - 以 @ 开头的变量名导致错误:在 X 行的 Y 列找到无效的标记 @
- pointers - “无法添加两个指针”错误 C2110,使用 GLfloat 数组。不能
- typescript - 在 typescript 库包中找不到静态导出