为了账号安全,请及时绑定邮箱和手机立即绑定

Phalcon 3.4:在控制器操作中注入组件而不使用调度程序事件

Phalcon 3.4:在控制器操作中注入组件而不使用调度程序事件

PHP
largeQ 2022-11-04 16:25:07
我正在尝试使用 laravel 方式在控制器操作中注入组件,请参阅 laravel 中的此示例:class UserController extends Controller {    /**     * Store a new user.     *     * @param  Request  $request     * @return Response     */    public function store(Request $request)    {        $name = $request->input('name');        //    }}他们使用称为“服务容器”的东西来解决操作参数,这适用于 Phalcon 吗?我确实尝试过手动制作,但没有运气!我需要这个功能来避免将每个组件定义为 Phalcon DI 中的服务。
查看完整描述

1 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

我提供了 Phalcon 文档中描述的解决方案,但进行了一些调整以满足我的需求。


我提出的解决方案是向服务容器添加新的调度事件侦听器以处理操作依赖关系,例如:


$di->setShared('dispatcher', function() {

    $evManager->attach("dispatch:beforeDispatch", function (Event $event, Dispatcher $dispatcher) {

        try {

            $methodReflection = new ReflectionMethod(

                $dispatcher->getControllerClass(),

                $dispatcher->getActiveMethod()

            );

            foreach ($methodReflection->getParameters() as $parameter) {

                $parameterClass = $parameter->getClass();

                if ($parameterClass instanceof ReflectionClass) {

                    $dispatcher->setParam($parameter->name, new $parameterClass->name);

                }

            }

        } catch (Exception $exception) {

            throw new \Exception('', Dispatcher::EXCEPTION_HANDLER_NOT_FOUND);

        }

    });

    $dispatcher = new Dispatcher();

    $dispatcher->setEventsManager($evManager);

    return $dispatcher;

}

每个框架都有自己的机制,所以如果你需要制作一些特别的东西,你必须手动制作。


查看完整回答
反对 回复 2022-11-04
  • 1 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信