我有这样的功能:
func_seo.php
<?php
function seo_title($s) {
$c = array (' ');
$d = array ('-','/','\\',',','.','#',':',';','\'','"','[',']','{','}',')','(','|','`','~','!','@','%','$','^','&','*','=','?','+');
$s = str_replace($d, '', $s);
$s = strtolower(str_replace($c, '-', $s));
return $s;
}
?>
我想在App :: Model中使用该函数。
我是这样创建的,但它不起作用:
<?php
class MyModel extends AppModel{
var $name = 'MyModel';
public function beforeSave(){
$this->element('func_seo'); //Function Element View/Elements/func_seo.php
$this->data['MyModel']['name_seo'] = seo_title($this->data['MyModel']['tutorial_name']);
return true;
}
}
?>
答案 0 :(得分:1)
此代码应格式化输出Helper。这也将确保代码可以在项目之间轻松重用。最好将它放入类似于Utils插件的东西,并将其作为应用程序之间的git子模块共享。
如果要将已更改的数据存储到数据库中,请将其设为behaviour。
您的示例代码是错误的,因为当您尝试在模型中呈现错误的元素时,它违反了MVC pattern。
你的变量命名很糟糕。 $ a + $ b = $ c。嘿,你知道我打算用这个计算一个约会吗?不。总是给变量有意义的名字。 Check the coding conventions并关注他们。 Clean code也是一本很好的读物。
还要注意范围关键字,不要将var与public / protected / private混合使用。如果您不知道它们的含义,请检查this page。
答案 1 :(得分:0)
你可以使用这样的功能。
<?php
class MyModel extends AppModel {
var $name = 'MyModel';
public function beforeSave() {
$this->data['MyModel']['name_seo'] = $this->seo_title($this->data['MyModel']['tutorial_name']);
return true;
}
public function seo_title($s) {
$c = array(' ');
$d = array('-', '/', '\\', ',', '.', '#', ':', ';', '\'', '"', '[', ']', '{', '}', ')', '(', '|', '`', '~', '!', '@', '%', '$', '^', '&', '*', '=', '?', '+');
$s = str_replace($d, '', $s);
$s = strtolower(str_replace($c, '-', $s));
return $s;
}
}
?>
或者您可以在App控制器
中实现此功能public function seo_title($s) {
$c = array(' ');
$d = array('-', '/', '\\', ',', '.', '#', ':', ';', '\'', '"', '[', ']', '{', '}', ')', '(', '|', '`', '~', '!', '@', '%', '$', '^', '&', '*', '=', '?', '+');
$s = str_replace($d, '', $s);
$s = strtolower(str_replace($c, '-', $s));
return $s;
}
在您的控制器中,您可以像这样设置
$this->request->data['MyModel']['name_seo'] =
$this->seo_title($this->request->data['MyModel']['tutorial_name']);
答案 2 :(得分:0)
我不知道使用你自己的这类功能的最佳做法是什么,但实际上我会把func_seo.php
中的东西放到Behavior中,所以你的所有模型都可以像$this->seoTitle()
。
将这样的通用函数包含在应用程序中也可能是设计错误。
答案 3 :(得分:0)
此功能已作为Inflector :: slug
存在