我正在用yii框架编写一个mvc web应用程序。我有一个业务逻辑,我不确定在哪里放置它。 $usernameid=$model->random_id_gen('5');
是我正在谈论的功能。
SiteController:
<!-- snip -->
public function actionIndex()
{
$model = new Users();
if (isset($_POST['Users'])) {
//call the active record table model
$model = new Users();
//massively assign attributes
$model->attributes=$_POST['Users'];
//generate random userid
$usernameid=$model->random_id_gen('5');
<!-- snip -->
用户活动记录类:
<!-- snip -->
public function random_id_gen($length)
{
$characters = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
$max = strlen($characters) - 1;
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= $characters[mt_rand(0, $max)];
}
return $string;
}
我的问题:这个id生成器函数是否属于Active记录模型?它应该在控制器中吗?它应该是一个单独的模型,因为它是“业务逻辑”,但与数据库没什么关系?
我正在努力改善我的MVC课程“膨胀”。提前谢谢你们。
更新 我正在寻找一个特定的解决方案。如果存在这样的约定,似乎问题已经发展成“如何将库放在yii中”。
答案 0 :(得分:5)
应将MVC重命名为MVCL ..即Model-View-Controller-Library。这些函数应该进入一个独立的库系统。
控制器应该在TOP上。它有两个主要功能:接受用户输入和协调其他元素(控制器/库/视图)以进行输出。传统上,Controller从模型中询问数据。但是数据操作(最常见)应该由库中的函数完成。
可能有两个级别的库,一个可能是复杂的(基于对象),而另一个可能是简单的(基于全局函数),用于最常见的操作。类似于剥离标签,或使数据XML准备就绪,清理URL等等。整个系统可以访问简单的函数库,而无需对特定库对象进行任何实例化。
有道理吗?
答案 1 :(得分:2)
我用来放库:
通常导入protected / components(Yii :: import('application.components。*')目录,以便按需提供这些库。
这对我来说很好。
答案 2 :(得分:0)
我知道这很苛刻。但由于此特定功能与数据库或操作员逻辑(控制器)无关,并且既不与它们交互,也不属于任何一个对象。此外,它是一个简单的实用工具function
。
所以这就应该去了。 (除非你故意做CCP。)
答案 3 :(得分:0)
据我所知,我自己一直在使用它,Yii有一个帮助文件夹,这就是我用来放置你问到的帮助函数的地方。我没有使用它,因为yii有很多功能,但是我必须添加一个时间函数来显示事件的时间直到/前,这就像帮助文件夹中的魅力一样,最好的部分是Yii确切知道的我在哪里看Yii :: import ...希望有帮助