我正在使用Yii框架,对于我们的网站,我们希望使其更加模块化。这对我们意味着我们想要将一些组件的逻辑分离到它们自己的组件/ app文件夹中。
目前我正在做的是使用我自己的每个Controller类扩展CController。
e.g。
class SiteController extends MyController
在MyController中,我将通过actions()方法加载组件:
public function actions() {
return array(
'login'=>array(
'class'=>'application.components.Auth',
),
'logout'=>array(
'class'=>'application.components.Auth',
),
);
}
在我的Auth组件中,我有一个run()方法:
public function run() {
// Get the action string from the URL
$uri = (Yii::app()->getRequest()->getRequestUri());
$method = 'action'.ucfirst(substr($uri,strrpos($uri,'/')+1));
// Run the method from the URI
$this->$method();
}
这将运行我在Auth组件中的操作方法。我还应该提一下,我的Auth组件不扩展CWidget,它扩展了CAction。
Inside Auth我有我的方法:actionLogin()和actionLogout()来匹配MyController中的上述操作。
当我尝试渲染我希望保留在模块化组件中的视图文件时,它不会识别组件文件夹中有视图文件,而是查看默认视图或主题文件夹。
我试图从受保护的root加载传递:'// application / components / auth / login'
注意:的 尝试这样做的总体目标是让我能够创建我的站点的多个模块化部分/应用程序/组件,其中URL结构不会更改,并且基于我如何设置操作方法数组,它将加载该URL的特定组件。我可能在网站上有两种形式的身份验证,或者未来的组件可能是根据我在actions数组中放置的内容来设置每周计划和每月计划组件的能力。
我调查了模块,但我发现网址不会保持一致。我欢迎任何有关这方面的建议。谢谢。
答案 0 :(得分:0)
首先,在组件中创建一个列出本地操作处理程序的函数
public static function actions(){
return array(
// name action and point to the location where the action class is
'GetActivity' =>'application.components.Auth.login',
'GetActivitytype' =>'application.components.Auth.logout',
);
}
按如下方式加载您的观看次数: -
return $this->renderPartial('application.components.views.auth_login',
array('model' => $userModel),
true
);