0

У меня есть функция, как это:Как создать UDF (User Defined Function) в CakePHP

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

Вы можете использовать функцию, как это.

<?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']); 
+0

Thats не то, что он просит –

+0

средств, я должен создать функцию в каждом AppModel? Могу ли я поместить функцию в Cake/Libs/Model/AppModel.php – ynz

+0

В этом случае вы можете использовать поставщиков или написать функцию в поведении –

0

Я не знаю, что лучшая практика использования ваши собственные функции вроде этого, но я бы на самом деле положил материал из func_seo.php в Behavior, поэтому все ваши модели могут использовать его как $this->seoTitle().

Это также может быть ошибка дизайна, включающая ваши общие функции, подобные этому, в приложение.

1

Этот код должен входить в Helper, поскольку он форматирует выход. Это также гарантирует, что код может быть легко использован повторно между проектами. Лучше всего было бы поместить его во что-то вроде плагина Utils и поделиться им как подмодуль git между приложениями.

Если вы хотите сохранить измененные данные, стойкие к БД, сделайте это вместо behaviour.

Ваш примерный код неправильный, поскольку он является нарушением MVC pattern при попытке визуализации элемента в модели, которая является неправильной.

Ваше переменное имя плохо. $ a + $ b = $ c. Эй, ты знал, что я хотел рассчитать дату? Нет. Всегда указывайте переменные значащие имена. Check the coding conventions и следуйте за ними. Clean code также хорошо читается.

Также обратите внимание на ключевые слова сферы, не смешивайте var с общедоступными/защищенными/частными. Если вы не знаете, что они означают, проверьте this page.

0

Эта функция уже существует как инфлектор :: пробкового