因为你直接调用函数,并没有经过容器。容器还有一个 call 方法,传递参数类似于 call_user_func_array ,只是其还多了第三个参数,默认方法。 其次,第一个参数可以是路由那样的 命名空间/类名@方法名 ,也可以是 [对象,方法名],的形式去传递。第二个参数中,对象值在容器中有注册挂载的,会自动处理,你也可以手动指定,通过数组键值对的方式, 比如 esCanShowQuery 的 Builder 对象,你可以不传递第二个参数,就会自动创建 Builder对象,并且成功调用,你也可以自己指定。['builder'=>$query] ,其中 数组的键名就是形参名字,值就是要给定的值。 app()->call([Document::class,'esCanShowQuery']) // or app()->call([Document::class,'esCanShowQuery'],['builder'=>$query]) // 如果是非静态方法,需要先实例化,静态方法直接传递类名
因为你直接调用函数,并没有经过容器。
容器还有一个 call 方法,传递参数类似于
call_user_func_array
,只是其还多了第三个参数,默认方法。其次,第一个参数可以是路由那样的
命名空间/类名@方法名
,也可以是[对象,方法名]
,的形式去传递。第二个参数中,对象值在容器中有注册挂载的,会自动处理,你也可以手动指定,通过数组键值对的方式,
比如
esCanShowQuery
的Builder
对象,你可以不传递第二个参数,就会自动创建 Builder对象,并且成功调用,你也可以自己指定。
['builder'=>$query]
,其中 数组的键名就是形参名字,值就是要给定的值。