Laravel 解决闭包的依赖关系

2024-02-02

Laravel 能够自动在控制器构造等中注入依赖项。 例如:

class Test {
    public function __construct(Request $request) {}
}

App::make('Test');

控制器的构造函数将接收适当的请求外观。

有没有办法用闭包来做到这一点?

例如:

$closure = function(Request $input) {};
App::make($closure); // resolving the closure dependencies

不,这是不可能的,你可以在这里阅读 IoC 容器代码:

laravel/vendor/laravel/framework/src/Illuminate/Container/Container.php在线的466

正如你所看到的,它尝试解析和解析父类的__constructor通过反射的方法。

我认为实施起来会很有趣,因为通过扩展Container类也支持闭包。

我做了一些测试以确保这是可能的,所以它们是:

    class t4 {
        public $x = "inject me";
    }

    interface t5 {}

    $t3 = function(t4 $test) {
        return print($test);
    };
    $r = new ReflectionFunction($t3);
    $params = $r->getParameters();
    $injection = $params[0]->getClass();
    if (!$injection->isInstantiable()) {
        throw new Exception('Provided type hint is not instantiable');
    }
    $typehinted = $injection->newInstance();
    print($typehinted->x); // prints "inject me"

类型提示 t5 将抛出异常。

这回答了问题

有没有办法用闭包来做到这一点?

至于如何实现它,我认为你应该完全了解反射和 Laravel IoC 容器的工作原理。我认为这不会在不久的将来实现,因为 Laravel 基本上是基于类构建的。您的用例是什么?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 解决闭包的依赖关系 的相关文章

  • PHP条件,如果当前页面,则链接突出显示[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个带
  • 我可以让 swagger-php 在查询字符串上使用数组吗?

    我使用 Swagger php 当我定义查询字符串上的参数时 它可以是一个数组 但据我所知 它不支持这种查询字符串 https api domain tld v1 objects q 1 q 5 q 12 我相信这会被设定in the co
  • 更改 Woocommerce 中“我的帐户”页面上的标题

    我见过大量有关如何使用 WooCommerce 我的帐户仪表板重新排序 更改导航和页面的示例 但我一生都无法弄清楚如何更改每个部分的主要标题 我的帐户 订单 下载 地址等 我已经搜索过模板 但没有任何乐趣 我尝试使用条件 php 注释来回显
  • 正则表达式上的换行符

    我试图替换两个标签之间的所有内容 但我无法构建正确的表达式 这就是我所做的
  • 为什么在 CDI 中使用构造函数而不是 setter 注入?

    我在这里找不到任何合理的答案 所以我希望它不是重复的 那么为什么我应该更喜欢 setter 或构造函数注入而不是简单的注入 Inject MyBean bean 如果您需要在类初始化期间对注入的 bean 执行某些操作 我会使用构造函数注入
  • Symfony2:为什么请求传递到受 Symfony2 中 AppCache 影响的 Kernel.Terminate EventListener

    在我的 Symfony2 2 应用程序中 我使用 onKernelTerminate EventListener 以便我可以在渲染响应后进行一些 繁重 处理 以便用户收到更快的响应时间 在我的控制器中 我在请求上设置了一个属性 以便当事件侦
  • 使用 ImageMagick 和 PHP 将 PNG 转换为 JPG 并将透明背景设置为白色

    将图像从 PNG 转换为 JPEG 时 如何使用 ImageMagick 带有 php 扩展 将透明背景设置为白色 在撰写本文时 您尚未指定正在使用哪个扩展 但如果您使用命令行 则命令将是 convert image png backgro
  • get url 重定向时 File_get_contents() 不起作用

    我正在使用的功能是 function http post url data data url http build query data data len strlen data url date default timezone set
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 如何将我的 init 函数中的代码集中到所有控制器中?

    public function init this gt view gt user Zend Auth getInstance gt getIdentity this gt view gt siteName Zend Registry ge
  • 对 SimpleXML 数据进行排序和分组

    我正在对 XML 文件中的出版物数据进行排序和分组 我目前使用的方法效果很好大部分情况下 尽管我觉得有一种更有效的方法来完成我想要完成的任务 以下是目标节点的示例
  • 重写 URL,将 ID 替换为查询字符串中的标题

    我对 mod rewrite 很陌生 但我做了一些搜索 但找不到这个问题的答案 我有一个网站 它只有一个 PHP 页面 根据查询字符串中传递给它的 ID 提供数十页内容 我想重写 URL 以便此 ID消失并替换为从数据库中提取的页面标题 例
  • 如何在 Zend MVC 中实现 SSL

    我之前已经通过使用特定的安全文件夹 例如服务器上的 https 文件夹与 http 文件夹 实现了安全页面 我已经开始使用 Zend Framework 并希望应用程序的某些部分 例如登录 使用 https 我在谷歌上搜索过 甚至在这里搜索
  • PHP print_r() 中 _r 的含义是什么?

    我见过这个答案 https stackoverflow com questions 13103410 what does r suffix mean就这样 但我不确定它对于 PHP 是否相同 如果是 可重入的含义是什么 From PHP n
  • PHP 中的引用

    我正在编写一个自定义博客引擎 并且希望拥有类似于 Wordpress 的引用 我可以查看 WordPress 源代码 但我真的更喜欢某种教程 但到目前为止我还没有找到 有没有关于在 PHP5 中实现 trackbacks 或 pingbac
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • Stream_context_set_params 不适用于 ssh2.sftp 包装器

    我想使用类似的功能here http www php net manual en function stream notification callback php 请检查以下代码 function notify notification
  • 如何清除 APC 缓存而不使 Apache 崩溃?

    如果 APC 存储大量条目 清除它们会导致 httpd 崩溃 如果 apc clear cache user 花费的时间超过 phps max execution time 调用 apc clear cache 的脚本 将在之前被 php
  • 使用 crypt() 加密

    我目前正在做一个非常安全的登录系统 但我是 crypt 函数的新手 需要一些快速帮助 我在注册过程中使用 crypt 加密密码字符串并将其保存到数据库中 但是 我如何在登录过程中解密密钥 或者我应该怎么做 或者是否可以对提交的密码字符串进行

随机推荐

  • 开源项目但对 API 密钥保密

    我想使用 GitHub API 创建一个开源项目 但我在源代码中遇到了我的密钥的问题 我从不同的地方读到 永远不要在源代码中包含任何密钥 我同意这一点 我还发现了一些关于通过网络服务器进行身份验证而不是让用户获取自己的 API 密钥的模糊参
  • Rails Byebug 没有停止应用程序

    我想使用 byebug 来调试我的应用程序 但应用程序永远不会停止 尽管我已经把byebug在我的代码中 这是我的 Gemfile group development test do Call byebug anywhere in the
  • 为什么使用 CvScalar

    我需要帮助来理解 CvScalar 的功能到底是什么 例如下面的代码中 scalar 的任务是什么 for int i 0 i lt faces size i Point center Point faces i x faces i wid
  • C 编译中出现错误“错误:杂散'\342'”,“杂散'\200'”,“杂散'\234'”[重复]

    这个问题在这里已经有答案了 I used 记事本 https en wikipedia org wiki Notepad 2B 2B编写代码 当我尝试编译它时 我使用cc lab7 c o test1编译它 我得到了一堆杂散 342 杂散
  • setup.py install_require 带选项

    我需要添加rjsmin通过我的依赖install require在 setup py 中 rjsmin提供了一种通过使用禁用 c 扩展的方法 without c extensions像下面这样切换 python setup py insta
  • 如何在Android上启动NotificationListenerService

    我想使用NotificationListenerService 访问Android 手机上的通知 我检查了很多教程 但找不到他们在哪里调用该服务 我应该在MainActivity 上使用bindService 还是startService
  • 使用 doctest 测试异常链接和回溯输出

    如何使用 doctest 测试 多重回溯 看来要用几个ELLIPSIS and
  • 在 Angular 中页面加载(模态显示)后焦点输入后在 Safari iOS 中显示键盘

    我需要在页面加载或显示输入模式后设置焦点并打开键盘 简单的 focus 适用于 Android 以及 iPad 的横向模式 然而 在纵向模式和 iPhone 上 焦点已设置 但未显示键盘 我还尝试了添加并关注附加元素的解决方案 但它不适用于
  • Python 变量作用域和类

    在Python中 如果我定义一个变量 my var 1 2 3 并尝试访问它 init 类的功能 class MyClass def init self print my var 我可以访问它并打印my var没有说明 全局 my var
  • VSCode 找不到 python(Anaconda 安装)

    我刚刚在 windows10 上安装了 anaconda3 5 2 0 和 vscode 1 27 2 实际上是删除并重新安装 并尝试在终端上执行最简单的 python 代码 但是 我收到以下错误 jac p50 mnt c Users j
  • 对于方案中的每个和地图

    这两个功能在方案上有什么区别吗 我正在使用 Dr Racket R5RS 语言制作一个模拟器游戏 我无法决定哪个更好 for each从左到右计算列表元素上的给定函数 并丢弃函数的返回值 它非常适合对列表中的每个元素进行副作用操作 map以
  • Java中的构造函数继承

    您能告诉我以下代码中的问题吗 class boxdemo1 public static void main String args boxweight weightbox new boxweight 2 3 5 4 System out p
  • 如何在 Windows 命令行上使用 Unicode 字符?

    我们有一个项目在团队基础服务器 https en wikipedia org wiki Azure DevOps Server TFS 中包含非英语字符 当尝试编写一些与构建相关的事情的脚本时 我们偶然发现了一个问题 我们无法通过 给命令行
  • 为 Github Pages 中托管的 Jekyll 博客设置自定义子域

    我创建了一个由 Jekyll 驱动的博客 并通过 GitHub Pages 托管它 现在 我想设置一个子域 blog example com 但无法使其工作 我添加了一个 CNAME 文件 其文本为 blog example com 我在我
  • 在 Windows 8.1 上安装 PHP 5.6 后 Apache 2.2 无法启动

    我正在 Windows 8 1 计算机上设置开发环境 我成功安装了Apache 2 2 并下载了php 5 6 3 Win32 VC11 x86 我在 httpd conf 的末尾添加了以下几行 PHPIniDir C PHP5 LoadM
  • c++ opencv图像不显示在boost线程内

    我正在开发c 我在那里使用的应用程序boost opencv 并创建 boost 线程并调用该线程内的函数 该函数已得到 opencv imread 我使用 cvLoadimage 检查过 但得到了相同的结果 但程序无法完成并且程序退出 请
  • KafkaConsumer 连接到错误的代理,因此无法消费

    我根据 Kafka 文档中的示例编写了一个小脚本 import org apache kafka clients consumer KafkaConsumer import org slf4j LoggerFactory import co
  • 如何在 Java 8 中生成给定长度的列表?

    我想通过调用方法 x 次来创建列表 或一般集合 在 Python 中 它会是这样的 self generated self generate for in range length 我尝试在 JDK 8 中编写类似的代码 this gene
  • PHP microtime 基准函数时间比较

    我目前正在使用这个函数来对一些 php 脚本进行基准测试 脚本获取执行所需的微时间 并将其写入服务器上的日志中 但我遇到的问题是我不知道什么是合适的时间 下面的脚本是我的一些时间 任何人都可以告诉我我想要在什么样的时间范围内吗 置于页面开头
  • Laravel 解决闭包的依赖关系

    Laravel 能够自动在控制器构造等中注入依赖项 例如 class Test public function construct Request request App make Test 控制器的构造函数将接收适当的请求外观 有没有办法