当前位置:K88软件开发文章中心网站服务器框架Yii 2.0 → 文章内容

应用(Applications)

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-26 15:28:25

由  创建, 最后一次修改 2016-02-24 应用主体应用主体是管理 Yii 应用系统整体结构和生命周期的对象。 每个Yii应用系统只能包含一个应用主体,应用主体在?入口脚本?中创建并能通过表达式?\Yii::$app?全局范围内访问。补充: 当我们说"一个应用",它可能是一个应用主体对象,也可能是一个应用系统,是根据上下文来决定[译:中文为避免歧义,Application翻译为应用主体]。Yii有两种应用主体: yii\web\Application and yii\console\Application, 如名称所示,前者主要处理网页请求,后者处理控制台请求。应用主体配置如下所示,当?入口脚本?创建了一个应用主体,它会加载一个?配置?文件并传给应用主体。require(__DIR__ . '/../vendor/autoload.php');require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');// 加载应用主体配置$config = require(__DIR__ . '/../config/web.php');// 实例化应用主体、配置应用主体(new yii\web\Application($config))->run();类似其他?配置?文件, 应用主体配置文件标明如何设置应用对象初始属性。 由于应用主体配置比较复杂,一般保存在多个类似如上web.php的?配置文件?当中。应用主体属性应用主体配置文件中有许多重要的属性要配置,这些属性指定应用主体的运行环境。 比如,应用主体需要知道如何加载?控制器?,临时文件保存到哪儿等等。 以下我们简述这些属性。必要属性在一个应用中,至少要配置2个属性: yii\base\Application::id 和 yii\base\Application::basePath。yii\base\Application::idyii\base\Application::id 属性用来区分其他应用的唯一标识ID。主要给程序使用。 为了方便协作,最好使用数字作为应用主体ID,但不强制要求为数字。yii\base\Application::basePathyii\base\Application::basePath 指定该应用的根目录。根目录包含应用系统所有受保护的源代码。 在根目录下可以看到对应MVC设计模式的models,?views,?controllers等子目录。可以使用路径或?路径别名?来在配置 yii\base\Application::basePath 属性。 两种格式所对应的目录都必须存在,否则系统会抛出一个异常。 系统会使用?realpath()?函数规范化配置的路径.yii\base\Application::basePath 属性经常用于派生一些其他重要路径(如runtime路径),因此,系统预定义?@app?代表这个路径。 派生路径可以通过这个别名组成(如@app/runtime代表runtime的路径)。重要属性本小节所描述的属性通常需要设置,因为不同的应用属性不同。yii\base\Application::aliases该属性允许你用一个数组定义多个?别名。数组的key为别名名称,值为对应的路径。例如:[ 'aliases' => [ '@name1' => 'path/to/path1', '@name2' => 'path/to/path2', ],]使用这个属性来定义别名,代替 Yii::setAlias() 方法来设置。yii\base\Application::bootstrap这个属性很实用,它允许你用数组指定启动阶段yii\base\Application::bootstrap()需要运行的组件。 比如,如果你希望一个?模块?自定义URL 规则,你可以将模块ID加入到bootstrap数组中。属性中的每个组件需要指定以下一项:应用?组件?ID.模块?ID.类名.配置数组.创建并返回一个组件的无名称函数.例如:[ 'bootstrap' => [ // 应用组件ID或模块ID 'demo', // 类名 'app\components\Profiler', // 配置数组 [ 'class' => 'app\components\Profiler', 'level' => 3, ], // 无名称函数 function () { return new app\components\Profiler(); } ],]补充: 如果模块ID和应用组件ID同名,优先使用应用组件ID,如果你想用模块ID,可以使用如下无名称函数返回模块ID。?`````php [function () { return Yii::$app->getModule('user');},]?`````在启动阶段,每个组件都会实例化。如果组件类实现接口 yii\base\BootstrapInterface,也会调用 yii\base\BootstrapInterface::bootstrap() 方法。举一个实际的例子,Basic Application Template?应用主体配置中, 开发环境下会在启动阶段运行?debug?和?gii?模块。if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug'; $config['modules']['debug'] = 'yii\debug\Module'; $config['bootstrap'][] = 'gii'; $config['modules']['gii'] = 'yii\gii\Module';}注: 启动太多的组件会降低系统性能,因为每次请求都需要重新运行启动组件,因此谨慎配置启动组件。yii\web\Application::catchAll该属性仅 yii\web\Application 网页应用支持。 它指定一个要处理所有用户请求的?控制器方法,通常在维护模式下使用,同一个方法处理所有用户请求。该配置为一个数组,第一项指定动作的路由,剩下的数组项(key-value 成对)指定传递给动作的参数,例如:[ 'catchAll' => [ 'offline/notice', 'param1' => 'value1', 'param2' => 'value2', ],]yii\base\Application::components这是最重要的属性,它允许你注册多个在其他地方使用的应用组件. 例如[ 'components' => [ 'cache' => [ 'class' => 'yii\caching\FileCache', ], 'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ], ],]每一个应用组件指定一个key-value对的数组,key代表组件ID,value代表组件类名或?配置。在应用中可以任意注册组件,并可以通过表达式?\Yii::$app->ComponentID?全局访问。详情请阅读?应用组件?一节.yii\base\Application::controllerMap该属性允许你指定一个控制器ID到任意控制器类。Yii遵循一个默认的?规则指定控制器ID到任意控制器类(如post对应app\controllers\PostController)。 通过配置这个属性,可以打破这个默认规则,在下面的例子中,account对应到app\controllers\UserController,?article?对应到?app\controllers\PostController。[ 'controllerMap' => [ [ 'account' => 'app\controllers\UserController', 'article' => [

[1] [2] [3]  下一页


应用(Applications)