php-Yii2,组件,创建单个实例并在Web应用程序中的任何位置访问它
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-Yii2,组件,创建单个实例并在Web应用程序中的任何位置访问它,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3419字,纯文字阅读大概需要5分钟。
内容图文
![php-Yii2,组件,创建单个实例并在Web应用程序中的任何位置访问它](/upload/InfoBanner/zyjiaocheng/686/98bdf5e0686c45b2b844c0819a8db45c.jpg)
我想在yii2中创建一个可以在整个Web应用程序中访问的组件,但是只能创建一个实例,并且能够在需要时检索该实例.
namespace app\components;
use yii;
use yii\base\Object;
class ContentManagerComponent extends Object
{
public function init(){
parent::init();
}
public function toBeUsed (){
return 'some variable';
}
}
然后,我希望能够在Web应用程序的其他部分中调用该组件,例如在控制器中.
namespace app\Controllers;
use yii;
use app\controllers
class SomeController extends Controller {
public function actionDoSomething(){
$contentComponent = Yii::$app->content;
$someVariable = $contentComponent->toBeUsed()
return $this->render( 'someView',[
'variable' => $someVariable,
]
}
}
我还将该组件放在了web.php文件中.
$config = [
'components' => [
'content' => [
'class' => 'app\components\ContentManagerComponent',
],
],
],
我最后要讲的是phpstorm告诉我该类不存在.我还希望像应用程序中的其他组件一样具有intelisense.
智力:
noIntele:
更新:#
如下面的答案所建议,通过添加此行,我可以使intelisense工作. / ** @var ContentComponent $contentManager * /
但是,我厌倦了每次想要使用内容组件时都总是在上面键入内容.因此,我在需要内容组件的组件的基类中创建了一个函数,该组件使用Yii :: app-> content方法返回Continent组件.在将返回Content Component的函数上方,我添加了以下注释:它将返回ContentComponent和ContentComponent的类.现在为了让我在智能感知工作中使用该组件.我所要做的就是$this-> getContentComponent. Phpstorm将能够确定内容组件属于返回的类.贝娄就是一个例子.
class BaseClass extends object
{
/**
* @return ContentComponent
*/
function getContentComponent () {
$contentComponent = Yii::app->content;
return $contentComponent
}
}
class SomeClass extends BaseClass
public function someFunction () {
$contentComponent = $this->getContentComponent;
}
解决方法:
PHPStorm无法识别您的自定义组件,因为它们是在框架加载时动态创建的,并在运行时附加到Yii :: $app,这就是PHPStorm无法识别您的自定义组件的原因.因此,在有人为PHPStorm等IDE开发智能插件之前,您必须进行一些调整才能实现目标.
您有2个选择:
>创建一个新的Yii.php文件(在根目录中)以供所有
必要的文档,这将告诉整个项目中的PHPStorm
有关您的组件的信息(如果您想创建仅对控制台/ Web /两者均可用的组件,我在此处给出了完整的示例),请参阅* @property ContentManagerComponent $content(More read-归功于samdark Alexander Makarov,Yii核心贡献者之一) :
<?php
use app\components\ContentManagerComponent;
use yii\BaseYii;
/**
* Class Yii
* Yii bootstrap file.
* Used for enhanced IDE code autocompletion.
*/
class Yii extends BaseYii
{
/**
* @var BaseApplication|WebApplication|ConsoleApplication the application instance
*/
public static $app;
}
/**
* Class BaseApplication
* Used for properties that are identical for both WebApplication and ConsoleApplication
*
* @property ContentManagerComponent $content
*/
abstract class BaseApplication extends yii\base\Application
{
}
/**
* Class WebApplication
* Include only Web application related components here
*
*/
class WebApplication extends yii\web\Application
{
}
/**
* Class ConsoleApplication
* Include only Console application related components here
*/
class ConsoleApplication extends yii\console\Application
{
}
>在要使用组件的任何地方创建一个PHP文档
会告诉PHPStorm您的变量是组件的实例:
public function actionDoSomething()
{
/** @var ContentManagerComponent $contentComponent */
$contentComponent = Yii::$app->content;
$someVariable = $contentComponent->toBeUsed();
return $this->render('someView', [
'variable' => $someVariable,
]);
}
如您所见,选项1是Yii框架的核心贡献者之一提供的解决方案,因此,我认为这是目前正确的选择(直到JetBrains或任何插件将提供本机支持)
内容总结
以上是互联网集市为您收集整理的php-Yii2,组件,创建单个实例并在Web应用程序中的任何位置访问它全部内容,希望文章能够帮你解决php-Yii2,组件,创建单个实例并在Web应用程序中的任何位置访问它所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。