首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Yii2 框架核心概念之组件(手册翻译)

组件有三个重要特征(功能): 属性(properties) 事件(events) 行为(behaviors) 单独或者组合使用这些特征,可以让yii框架的类变得更加易用和可定制。...yii\base\Componet] 尽管组件很强大,但是其开销也大于普通的类对象,原因在于组件需要额外的内存和CPU时间去处理事件(events)和行为(behaviors).如果你的组件不需要事件和行为这两个特征...(功能),可以直接继承[yii\base\Object],这样你的组件在性能(效率)上和普通类对象一致,且支持属性(properties)....在重写的构造函数的结尾必须调用父类的构造函数 假设你重写了[yii\base\Object::init()|init()]方法,那么必须在重写的init方法开始调用父类的init方法 举个例子 namespace...,可以在这个时候设定默认的属性值 通过$config配置对象,在构造函数里通过对象配置可以覆盖默认值 在[yii\base\Object::init()|init()]方法里,进行初始化后的配置。

58220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Yii2 框架核心概念之属性(手册翻译)

    为了解决这个问题,yii引入了一个基础类[yii\base\Object],此类可以基于类的getter和setter方法来定义类属性。...如果一个类需要以这种方式定义属性,继承[yii\base\Object]或者[yii\base\Object]的子类 提示:几乎所有yii2框架的核心类都继承了[yii\base\Object]类或者它的子类...举个例子,getLabel()和setLabel()定义了label属性,实现代码如下 namespace app\components; use yii\base\Object; class Foo...,如果没有setter方法,那么此属性只读,尝试给该属性赋值的行为都会抛出一个[[yii\base\InvalidCallException|InvalidCallException]]异常。...同样,假设定义了setter方法的属性没有getter方法,此属性只写,尝试读取只写属性的值也会抛出一个异常,只写属性不常见。

    52220

    Yii2 源码分析 - 入口文件执行流程

    解耦,有2种注入方式:构造函数注入、属性注入 * yii\di\Container 继承了 * yii\base\Component * yii\base\BaseObject * BaseObject...PS:继承 Component 的都有 on event 和 as behavior 配置实现事件绑定 一、new yii\web\Application 时,会调用构造方法 yii\base\Application...__construct,__construct 中调用 init() * 会执行 yii\base\Application 的 init * 如果上级调用下级重写的 静态方法 时...; /** * trigger 触发通知,将此事件通知给绑定到这个事件的观察者,绑定事件的方法: * yii\base\Component 或者其子类...\gii\Module', ]; 这个 modules 的属性,在 Application 及其父类中,都是不存在的 只有私有属性 $_modules,存在于 yii\base\Module 类中

    1.2K41

    Yii2 进阶篇

    过滤器 什么是过滤器 过滤器是控制器动作执行之前或之后需要执行的代码。该代码以对象的形式执行,则应该使用类的方式定义并申明。 过滤器本质上是一种特殊的行为。...过滤器位置.png 定义过滤器 在Yii2中,自定义过滤器,需要继承 yii\base\ActionFilter 类并覆盖 yii\base\ActionFilter::beforeAction() 和.../或 yii\base\ActionFilter::afterAction() 方法来创建动作的过滤器 定义在beforeAction()中的代码会在操作执行之前执行 定义在afterAction(...,有ajax或者html或者纯文本 响应错误的方法是可以自己定义的 错误组件的实质类是yii\web\ErrorHandle其他的配置参数可以去该类中查看public属性 Session的使用 ?...控制器修改 控制器接收多个文件,应该使用UploadedFile 里的getInstances方法来绑定属性 ?

    2K31

    Yii2中关于组件的注册以及创建的方法详解

    好了,回到\yii\base\Application类的构造函数,这个函数最后调用了\yii\base\Component类的构造函数,但\yii\base\Component类是没有构造函数的,不过它继承了...(new yii\web\Application($config))->run();中的$config数组(这个数组的结构参见本文第一个截图),以数组键名作为对象属性名,对应的键值作为对象属性值进行赋值操作...类最终也继承了\yii\base\Object类,\yii\base\Object类是支持属性的,所以yii\web\Application类也支持属性(关于属性,可以参考我的另一篇博文:yii2之属性...()方法,没错,对应用实例的components属性进行赋值操作其实就是调用这个方法!   ...哈哈,别忘了,php读取不到类属性的时候会调用魔术方法get(),所以开始查找\yii\web\Application继承关系最近的祖先类中的get()方法,最后在\yii\di\ServiceLocator

    84321

    yii2.0验证

    若没有通过,你能通过 yii\base\Model::errors 属性获取相应的报错信息。...当调用 validate() 方法时,它将运行以下几个具体的验证步骤: 检查从声明自 yii\base\Model::scenarios() 方法的场景中所挑选出的当前yii\base\Model::scenario...检查从声明自 yii\base\Model::rules() 方法的众多规则中所挑选出的适用于当前yii\base\Model::scenario的规则, 从而确定出需要验证哪些规则。...验证事件 当调用 yii\base\Model::validate() 方法的过程里,它同时会调用两个特殊的方法, 把它们重写掉可以实现自定义验证过程的目的: yii\base\Model::beforeValidate...\base\DynamicModel::hasErrors() 方法来检查验证通过与否,并通过 yii\base\DynamicModel::errors 属性获得验证的错误信息,过程与普通模型类一致。

    2.6K61

    Yii2中的应用级布局

    首先我们介绍一下Controller类的render()方法的执行流程,需要查看vendor\yiisoft\yii2\base\Contorller.php文件中的render()方法源代码。...开始应用级布局 在一个应用中多个控制器使用一个布局文件,那么可以在应用级配置文件config/web.php中设置yii/base/Application的$layout属性,代码如下: $config...'viewPath' => 'xxx', ]; 配置文件config/web.php中的“viewPath”是yii\bash\Application类的属性.该类继承了yii\base\Module类...,在Module类中定义了getViewPath()和setViewPath()方法,来获取和设置视图文件路径,代码如下所示: //所在文件路径vendor\yiisoft\yii2\base\Application.php...),同理在设置viewPath成员属性时将自动调用_get()魔术方法间接调用setViewPath()方法。

    1.2K20

    yii2开发中19条推荐实践

    (必须继承yii\base\Widget) 3、渲染一个小挂件的视图(如果需要,在components/views下) 4、使用它 没看明白?...为视图的PHP代码增加一个try 在写action或模型方法的时候,为了保证代码的稳定性,我们一般都会用try....catch语法结构,但是在yii2的视图内很少有人用,记住,也要用!...对于他们的更新请使用yii2内置的TimestampBehavior行为类,则字段数据的填充我们就无需操心了,如下代码 namespace app\models; use Yii; use yii\behaviors...是父类还是行为 其实我是不排斥任何一种的,各有利弊吧,父类使用简单但是增加了耦合,行为耦合度低但是配置比直接父类复杂些。...当然从理念上说也有点不同 行为 一些类附加的属性 父类 一些类共同的属性 我的用法(不一定就是对的),尤其在模块中我喜欢为控制器增加一层父类。

    3.3K70

    WPF 双向绑定到非公开 set 方法属性在 NET 45 和 NET Core 行为的不同

    本文记录 WPF 在 .NET Framework 4.5 和 .NET Core 3.0 或更高版本对使用 Binding 下的 TwoWay 双向绑定模式绑定到非公开的 set 属性上的行为变更 在....NET Framework 4.5 下,可以使用 Binding 下的 TwoWay 双向绑定模式,绑定到非公开的 set 属性,如 private set 私有设置的属性上,实现双向更改,效果上和公开的...set 方法一样,可以成功写入 但是在 .NET Core 3.0 开始,此绑定将会提示 XamlParseException 而抛出异常 如以下的 ViewModel 代码,包含了一个 Name 属性...,此属性的 set 方法是私有的 class ViewModel : INotifyPropertyChanged { public string Name...经过我的考古,在 .NET Framework 4.6 下的行为就和 .NET Core 3.0 版本相同,是会抛出异常 敲黑板,使用双向绑定到非公开 set 方法的属性上的行为变更,不是 .NET Framework

    1.2K20

    yii2底层源码分析

    中没有构造函数,所以我们顺理成章的找找 它的父类也就是\yii\base\Application,看看父类里面是否有构造函数 \yii\base\Application没有让我们失望, 构造方法如下...yii\base\Application中的所有的属性和方法交给Yii::$app->loadedModules数组中 $this->state = self::STATE_BEGIN;...下面我们来分析下面的代码 首先是:Yii::$app = $this; 这一句指的是,将\yii\base\Application里所有的公共方法都交给了,Yii::$app,其实Yii大部分信息都在Yii...::$app变量中 当然也包括它的父类如:\yii\base\Module \yii\di\ServiceLocator \yii\base\Component \yii\base\Object $this...Object是基础类,所以绝大部分类都能直接调用配置文件中配置内容 如: var_dump(Yii::$app->name); 实际上config文件的数组中有name属性 return [

    88751

    定义多场景的表单

    extends \yii\base\Model{ const SCENE_ADD = 'add'; //添加场景 const SCENE_EDIT = 'edit'; //编辑场景 public...$article->save()){ throw new \yii\base\ErrorException('添加文章失败'); } return $article; } public...$this->_article->save()){ throw new \yii\base\ErrorException('编辑文章失败'); } return $this->_article...; } } 以上表单中,add方法就是添加文章的业务逻辑,edit方法是编辑文章咯,可是两个业务要验证的用户端输入参数都包含了title和content,所以要通过scenarios方法来声明两个场景要校验的属性名称...scenario属性(属性值就是场景的标识) 最终其实就是为了告诉validate要对哪些属性进行validate,而不是盲目地全部validate,毕竟不同场景下有不同的校验字段 深入应用 其实不能仅仅把场景理解为使用在

    45141

    Yii2 VS thinkphp5.0

    TP中的各个对象没有明显的继承关系。各自为类,定义不同的属性以及方法。 2、Yii2架构组织明确,同一类的对象必定有一个父类,在父类中定义相同的方法。...比如Controller类,在Yii中有yii/web/Controller,有yii/rest/Controller,同样是控制器,他们必定有一些相同的操作,所有相同的操作都会在yii/base/Controller...类中定义,同时通过抽象方法的形式定义控制器必须实现的方法。...YII2中,数据model时跟数据表完全映射的。一个model对象就是一条数据记录。对象的属性数据就是记录中各字段的内容。TP5中,数据model时一数据表的操作对象。提供一些数据操作方法而已。...Yii2中,new model(),然后调用save()方法,这个model就是一个完整的数据表记录,数据表的多有字段映射成为对象属性。TP中的save()方法是把记录写入数据库。然后就没了。

    2.2K20

    从配置文件的角度去了解Yii2

    Yii2为了简化开发难度,所以用户定义的目录加载方式全部使用Yii2自己定义的autoload方法(Yii.php中注册的BaseYii.php中的autoload),而不是编辑composer.json...用法是将所有路径在index.php中全部注册到全局容器Yii中.方法就是Yii::setAlias();方法....'controllerNamespace' 站点下(非module中)controller的命名空间,在MVC阶段,Yii2.0会根据这个属性结合路由自动生成controller的命名空间.module...有两种情况,如果你的module或者component甚至一个名不见经传的对象引用了yii\base\BootstrapInterface接口,并实现了bootstrap()方法.将直接调用这个方法.如果没有引用...,非常简单,只需要为你的extension添加一个Yii2能用的bootstrap入口即可(一个对象,引用yii\base\BootstrapInterface接口,并将其配置在extension的配置文件

    1.5K21

    从配置文件的角度去了解Yii2

    Yii2为了简化开发难度,所以用户定义的目录加载方式全部使用Yii2自己定义的autoload方法(Yii.php中注册的BaseYii.php中的autoload),而不是编辑composer.json...用法是将所有路径在index.php中全部注册到全局容器Yii中.方法就是Yii::setAlias();方法....'controllerNamespace' 站点下(非module中)controller的命名空间,在MVC阶段,Yii2.0会根据这个属性结合路由自动生成controller的命名空间.module...有两种情况,如果你的module或者component甚至一个名不见经传的对象引用了yii\base\BootstrapInterface接口,并实现了bootstrap()方法.将直接调用这个方法.如果没有引用...,非常简单,只需要为你的extension添加一个Yii2能用的bootstrap入口即可(一个对象,引用yii\base\BootstrapInterface接口,并将其配置在extension的配置文件

    97031
    领券