感谢您收看我的第一个问题
我有些困惑。
如何将数据库的操作写入数据库并且不在每个Controller中编写该函数?
我考虑过中间件,发现必须改变我的路由注册风格
我的路线是这样的:
Route:resource('province','\\Modules\\Info\\Controllers\\P_ProvinceController');
它是否有一些很棒的方法取而代之?
public function Store(Request $request)
{
$params = $request->input('data');
$params['CreateID'] = Auth::user()->id;
$params['CreateName'] = Auth::user()->name;
$params['CreateTime'] = Carbon::now();
$province = P_ProvinceModel::Create($params);
$params['Pro_Is_Del'] = 1;
$log_info['table'] = $province->getTable();
$log_info['type'] = "create";
$log_info['user'] = Auth::user()->name;
$log_info['datetime'] = Carbon::now();
LogModel::create($log_info);
if($province){
return response()->json(array(
'status' => 200,
'msg' => '新增成功',
'data' => $province
));
}else
return response()->json(array(
'status' => 500,
'msg' => '保存失败',
));
}
感谢。
答案 0 :(得分:0)
以下是我解决模型功能的方法
首先创建一个可以保存的特征。
<?php
namespace App\Models\Observers;
trait CreatedByObserver
{
public static function bootCreatedByObserver(){
/** Simply means that whenever this model is creating a model do: */
static::creating(function($model){
if(auth()->check()){
$responsiblePerson = auth()->user()->first_name . " " . auth()->user()->last_name;
} else {
$responsiblePerson = "system";
}
/** You can set any model variables within */
$model->created_by = $responsiblePerson;
});
}
}
在保存/创建/更新/删除记录时,您需要做的就是
然后在所有模型中,您希望使用此行为添加特征。
答案 1 :(得分:0)
据我了解你的问题,你要求的方法是使你的控制器成为一个抽象类型,即控制器只需要处理路由并且不需要查看任何其他东西(如数据库,应用程序逻辑等),这是一种哲学。 laravel框架。
为了使你的控制器抽象(抽象的含义如aboave所述), 首先,您需要了解,&#34;您的应用程序逻辑是什么以及您的数据库逻辑是什么?&#34; 当您了解这两件事时,您可以轻松地将应用程序逻辑和数据库逻辑与控制器分开。
例如:
为了保留您的应用程序逻辑,您可以在项目的根目录中创建Mar 10, 2016 2:01:38 PM org.springframework.test.context.support.DefaultTestContextBootstrapper getDefaultTestExecutionListenerClassNames
INFO: Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
Mar 10, 2016 2:01:38 PM org.springframework.test.context.support.DefaultTestContextBootstrapper instantiateListeners
INFO: Could not instantiate TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener]. Specify custom listener classes or make the default listener classes (and their required dependencies) available. Offending class: [javax/servlet/ServletContext]
Mar 10, 2016 2:01:38 PM org.springframework.test.context.support.DefaultTestContextBootstrapper getTestExecutionListeners
INFO: Using TestExecutionListeners: [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@5594a1b5, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@6a5fc7f7, org.springframework.test.context.support.DirtiesContextTestExecutionListener@3b6eb2ec, org.springframework.test.context.transaction.TransactionalTestExecutionListener@1e643faf, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@6e8dacdf]
文件夹,也可以创建文件夹名称&#39; Dao&#39; (数据库访问对象)在service
的相同路径中。您需要将这些文件夹保留在作曲家的自动加载中。只需上课服务和你的Dao。
现在你的申请将是,
第一条路线,将命中控制器,然后控制器需要调用service
中的某个方法,然后服务将调用相应的service
。方法。
示例:
<强>控制器/ YourController.php 强>
DAO
<强>服务/ yourService.php 强>
Class YourController extends Controller {
public function Store(Request $request,yourservice,$yourService)
{
$this->myservice = $yourservice;
$this->myservice->store('your inputs request');
return $something ;
}
}
现在转向 Class yourService {
public function store($yourinputs,yourDao $mydao){
$this->mydao = $mydao;
//you can use your application logic here
return $this->mydao->create($yourinputs);
}
:
dao / yourdao.php
DAO
现在,您可以看到控制器只是将数据保存在数据库中,但不知道它是如何保存数据的以及应用程序逻辑是什么。 这个解释只是一个简单的方法来做一个控制器抽象的项目。还有其他各种方法可以做到这一点。例如,您可以看到Repository Design Pattern,它也被laravel core使用。
希望这个解释不会让任何人感到厌烦。 :)快乐的编码。