我正在创建一个更改日志记录系统,用于复制对表所做的更改。这个函数基本上使用了beforeUpdate()钩子,并允许我在该表的ChangeLog中复制旧数据。我还想用一些特定信息标记它,例如发出请求的IP地址,以及发出请求的用户ID。
用户ID存储在BaseController类内部的全局变量中,任何使用$ this-> userId的控制器都可以访问它,但是,我不希望必须将该用户ID显式传递给每个模型电话,所以我希望能够使用我的各种型号访问$ this-> userId,但laravel模型显然不会让你通过引用$ this-> userId来与控制器交谈。 / p>
有谁能告诉我如何解决这个问题?我一直在挖掘几个小时,找不到能满足我需要的东西?
非常感谢, 涉
答案 0 :(得分:1)
通过创建范围,您可以在模型中获取userID值。 例如,在文章模型中,如果我想检查文章的作者是否是当前用户,我可以将自己的范围设为:
public function scopeUserid($query,$id){
$query->where('user_id',$id);
}
在控制器中,您可以通过
传递userID$allArticlesFromCurrentAuthor = Article::userid($this->userId)->get();
我希望它有所帮助。
答案 1 :(得分:1)
基本上,如果您不想传递依赖关系,您有两种方式:
1 - 使用会话:您可以将ID存储在会话中并在任何地方获取
2 - 创建一个服务提供者或类来存储您想要的数据,并在以后使用app Registry检索它:
为此,您可以创建一个类来存储数据,然后在服务容器上绑定实例:
$service = new ServiceClass( $id ); //this will contain the data you need: i.e the ID
$app->instance('your_key', $service); //store the instante in the IoC Container
现在,您可以随时随地取回实例:
$service = $app->make('your_key');
您还可以创建一个Facade来访问它
最后要注意的是:以这种方式编写的代码闻起来像是糟糕的全球性东西'所以你应该考虑将依赖性传递给你的模型,只要你能