当前位置: 首页 > news >正文

初中生电脑作业做网站wordpress 制作单页

初中生电脑作业做网站,wordpress 制作单页,网站建设项目经验怎么写,wordpress使用自己的模板一、原理描述 hyperf中,不难发现比如自定义控制器中获取参数,hyperf.php中容器获取,传入的都是接口,而不是实体类。 这是因为框架中的配置文件有设置对应抽象类的子类,框架加载的时候将其作为数组,使用的…

一、原理描述

hyperf中,不难发现比如自定义控制器中获取参数,hyperf.php中容器获取,传入的都是接口,而不是实体类。

这是因为框架中的配置文件有设置对应抽象类的子类,框架加载的时候将其作为数组,使用的时候通过数组对应子类。

实现这个功能就需要composer autoload 代理,即生成的composer.lock文件再处理。但是需要其余对应的composer拉取的程序在composer.json中设置对应数据。

例如

//vendor\hyperf\http-server\composer.json
"extra": {"branch-alias": {"dev-master": "2.2-dev"},"hyperf": {"config": "Hyperf\\HttpServer\\ConfigProvider"}}
//vendor\hyperf\db-connection\composer.json"extra": {"branch-alias": {"dev-master": "2.2-dev"},"hyperf": {"config": "Hyperf\\DbConnection\\ConfigProvider"}}
#vendor/hyperf/http-server/src/ConfigProvider.php
namespace Hyperf\HttpServer;use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;class ConfigProvider
{public function __invoke(): array{return ['dependencies' => [RequestInterface::class => Request::class,ServerRequestInterface::class => Request::class,ResponseInterface::class => Response::class,],'annotations' => ['scan' => ['paths' => [__DIR__,],],],];}
}#vendor\hyperf\db-connection\src\ConfigProvider.php
namespace Hyperf\DbConnection;use Hyperf\Database\Commands\Migrations\FreshCommand;
use Hyperf\Database\Commands\Migrations\GenMigrateCommand;
use Hyperf\Database\Commands\Migrations\InstallCommand;
use Hyperf\Database\Commands\Migrations\MigrateCommand;
use Hyperf\Database\Commands\Migrations\RefreshCommand;
use Hyperf\Database\Commands\Migrations\ResetCommand;
use Hyperf\Database\Commands\Migrations\RollbackCommand;
use Hyperf\Database\Commands\Migrations\StatusCommand;
use Hyperf\Database\Commands\ModelCommand;
use Hyperf\Database\Commands\Seeders\GenSeederCommand;
use Hyperf\Database\Commands\Seeders\SeedCommand;
use Hyperf\Database\ConnectionResolverInterface;
use Hyperf\Database\Connectors\ConnectionFactory;
use Hyperf\Database\Connectors\MySqlConnector;
use Hyperf\Database\Migrations\MigrationRepositoryInterface;
use Hyperf\DbConnection\Listener\RegisterConnectionResolverListener;
use Hyperf\DbConnection\Pool\PoolFactory;class ConfigProvider
{public function __invoke(): array{return ['dependencies' => [PoolFactory::class => PoolFactory::class,ConnectionFactory::class => ConnectionFactory::class,ConnectionResolverInterface::class => ConnectionResolver::class,'db.connector.mysql' => MySqlConnector::class,MigrationRepositoryInterface::class => DatabaseMigrationRepositoryFactory::class,],'commands' => [ModelCommand::class,GenMigrateCommand::class,InstallCommand::class,MigrateCommand::class,FreshCommand::class,RefreshCommand::class,ResetCommand::class,RollbackCommand::class,StatusCommand::class,GenSeederCommand::class,SeedCommand::class,],'listeners' => [RegisterConnectionResolverListener::class,],'annotations' => ['scan' => ['paths' => [__DIR__,],],],'publish' => [['id' => 'config','description' => 'The config for database.','source' => __DIR__ . '/../publish/databases.php','destination' => BASE_PATH . '/config/autoload/databases.php',],['id' => 'query-listener','description' => 'The listener of database to record log.','source' => __DIR__ . '/../publish/DbQueryExecutedListener.php','destination' => BASE_PATH . '/app/Listener/DbQueryExecutedListener.php',],],];}
}

以bin/hyperf.php为例,加载autoload.php文件,执行Hyperf\Di\ClassLoader::init()设置,执行

$application->run();输出命令。

1.1 Hyperf\Di\ClassLoader::init()

Hyperf\Di\ClassLoader::init() 加载配置文件、composer.lock,并合并数据。

主要使用Composer::getMergedExtra('hyperf')['config'],就是composer.lock中extra中的hyperf中config值。

根据config中的值,调用其__invoke()获取数组,并设置。

在上述过程中,涉及ProviderConfig::load();运行,会对ProviderConfig::$providerConfigs数据进行初始化。

ProviderConfig::load()获取的值中包括每个composer拉取的程序中ConfigProvider.php文件中的内容,当然也就包括commands。

ProviderConfig::load()在之后也会被使用。

ClassLoader::init()会调用其构造函数,打印ClassLoader构造中的$config = ScanConfig::instance($configDir);结果,可以看到类内的成员变量包括cacheable、configDir、paths、collectors、ignoreAnnotations、globalImports、dependencies、classMap。

就bin/hyperf.php而言,此时并没有使用配置中的commands数据。

1.2 /config/container.php

hyperf.php中随后加载/config/container.php。

container.php中通过$container = new Container((new DefinitionSourceFactory(true))());,调用DefinitionSourceFactory的构造和__invoke()方法。

DefinitionSourceFactory::__invoke()中通过ProviderConfig::load();加载配置,获取配置中的dependencies数组,最后返回key和object对应的数组。

container.php文件最后返回 Hyperf\Di\Container类,其构造参数的为DefinitionSourceFactory::__invoke()返回的数组。

Hyperf\Di\Container构造方法中会设置$this->definitionSource和$this->resolvedEntries。

1.3 $container->get()

$application对象通过$application = $container->get(Hyperf\Contract\ApplicationInterface::class);获取。调用$container->get()会先判断Container::resolvedEntries是否有数据,有则返回,否则使用Container::make()使用Container::definitionSource创建数据。最后返回对应的实体类。

即为,$application = $container->get(Hyperf\Contract\ApplicationInterface::class);返回ApplicationFactory类,ApplicationFactory构造最后返回Symfony\Component\Console\Application类。

Hyperf\Contract\ApplicationInterface::__invoke()会先执行。其中运行Application::__construct(),设置默认值,比如默认命令为“list”。__invoke()还会将commands数据添加到Symfony\Component\Console\Application中。

1.4 Application::run()

调用 $application->run();,就是调用Symfony\Component\Console\Application::run()。

对于配置文件中commands的处理、console的使用也是在Application::run()方法中。

Application::run()调用Application::doRun()。

doRun()中执行默认的命令“list”,运行Symfony\Component\Console\Command\ListCommand::execute(),其中运行DescriptorHelper::__construct()。

ListCommand::execute()通过DescriptorHelper::describe()运行TextDescriptor(默认)的父类Descriptor::describe()。

Descriptor::describe()中通过其子类实现的describeApplication()方法,获取项目中的commands(配置中的commands),这里即为TextDescriptor::describeApplication()。

TextDescriptor::describeApplication()中通过调用 ConsoleOutput->write()输出内容。

每个命令的execute()方法通过其父类Symfony\Component\Console\Command:run()调用。

dorun()中调用doRunCommand(),这其中会调用Command:run()。

二、原理总结

http://www.lakalapos1.cn/news/4990/

相关文章:

  • 做宠物的网站页面素材
  • 如何破解网站后台网址自己搭建服务器网站开发软件
  • 关于拳馆网站建设计划书济南手机网站建设公司
  • 58同城会员网站怎么做全球外贸平台排名
  • 东莞市国外网站建设多少钱无需登录免费观看的直播
  • 做网站的公司怎么找国内建站平台排名
  • 旅游网站建设仙游县网站建设
  • 59网站一起做网店女鞋win2008安装wordpress
  • 优化网站关键词wordpress内链
  • 简单网站设计模板做网站前必须设计原型吗
  • 媒体查询做响应式网站有哪些html编程题题库
  • 营销型网站开发公司做游戏和做网站哪个难
  • 网站开发的流程和步骤是什么建筑工程网络推广
  • 如何建立网站域名WordPress调用npr电台
  • 站酷网手机版服装公司简介模板
  • dw做的网站 图片的路径上海市网站设计
  • 保定做网站设计阿里云里做网站能上百度首页么
  • 用什么做网站后台的WordPress 编辑器2016
  • 合肥网站建设外包网页视频怎么下载插件
  • 网站建设规划书 简版永久免费的网站软件
  • 中国工程建设焊接协会网站美术网站建设
  • 做最便宜的网站建设用什么网站能直接做dj
  • 小程序免费制作网站北辰正方建设集团有限公司网站
  • 如何开通自己的网站白山商城网站建设
  • win7 添加asp网站使页面具有动态效果的网站建设技术是
  • 医院网站推广渠道搜索引擎推广网站
  • 哪些网站专做新闻wordpress更换本地主题
  • 做网站的费用如何入帐简单好看个人主页网站模板
  • 社保官方网站登录入口一站式做网站多少钱
  • uc酷站中的美图网站影视网站开发工程师