php – 我应该在admin和api之间的laravel中重新使用控制器吗?或让我的管理员使用我的API?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 我应该在admin和api之间的laravel中重新使用控制器吗?或让我的管理员使用我的API?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2586字,纯文字阅读大概需要4分钟。
内容图文
laravel的新手,并试图找出构建我的应用程序的最佳方法.
它有一个管理界面和一个API(JSON,angularjs前端).
我的路线目前看起来像:
Route::group(array('prefix' => 'admin', 'before' => 'auth.admin'), function()
{
Route::any('/', array('as' => 'admin.index', function() {
return View::make('admin.index');
}));
Route::resource('countries.products', 'ProductsController');
Route::resource('countries', 'CountriesController');
Route::resource('orders', 'OrdersController');
});
// Route group for API versioning
Route::group(array('prefix' => 'api/v1'), function()
{
Route::resource('products', 'APIProductsController', array('only' => array('index', 'show')));
Route::resource('orders', 'APIOrdersController', array('only' => array('store', 'update')));
});
在例如OrdersController&中有很多重复的逻辑. APIOrdersController.我应该以某种方式重新使用单个控制器,也许是通过内容协商?或者更好的是修改OrdersController以查询API路由而不是使用eloquent?
或者还有另一种更好的方法吗?
解决方法:
在我看来,我会将所有对象创建逻辑提取到一个合适的类(听起来像repository的好例子).这个类应该只知道它必须接收的参数,并做出相应的响应.例如:
class EloquentOrder implements OrderRepositoryInterface {
// Instance of OrderValidator,
// assuming we have one
protected $validator;
public function create($params)
{
// Pseudo-code
$this->validator = new Ordervalidator($params);
if ($this->validator->passes())
create and return new Order
else
return validator errors
}
}
然后,您的每个模块都可以在其控制器中使用此功能.
在您的API中,您可以拥有:
class APIOrderController extends APIController {
protected $repository;
public function __construct(OrderRepositoryInterface $repository)
{
$this->repository = $repository;
}
public function create()
{
// Let's imagine you have an APIAuth class which
// authenticates via auth tokens:
if (APIAuth::check()) {
$params = Input::all();
return $this->repository->new($params);
}
return Response::json(['error' => 'You are not authorized to create orders'], 401);
}
}
在管理模块中,您可以:
class AdminOrderController extends AdminController {
protected $repository;
public function __construct(OrderRepositoryInterface $repository)
{
$this->repository = $repository;
}
public function create()
{
// Now, let's imagine Auth uses a different authentication
// method, and can check for specific permissions
if (Auth::check() && Auth::hasPermission('create.orders')) {
$params = Input::all();
return $this->repository->new($params);
}
return Redirect::home()->with('message', 'You are not authorized to create orders');
}
}
如您所见,这允许您在不同的上下文中重用对象创建逻辑.在示例中,我使用了不同的身份验证方法和响应来表示灵活性,但这实际上取决于您的项目要求.
内容总结
以上是互联网集市为您收集整理的php – 我应该在admin和api之间的laravel中重新使用控制器吗?或让我的管理员使用我的API?全部内容,希望文章能够帮你解决php – 我应该在admin和api之间的laravel中重新使用控制器吗?或让我的管理员使用我的API?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。