cakephp help 元件和 model 下的 save 的 問題

edited 十月 2013 in CakePHP
我開始配服 使用 cakephp 做專案的老大們了.

因為真的很奇怪?

最近 同事們想 玩 CAKEPHP 所以小弟免為其難的先用 CAKEPHP 來組一個開發環境.

結果.....

%^#$%@$%@#%

蠻想寫信去 官方罵xxx的...
00793     function save($data = null, $validate = true, $fieldList = array()) {
00794         $db =& ConnectionManager::getDataSource($this->useDbConfig);
00795         $_whitelist = $this->whitelist;
00796 
00797         if (!empty($fieldList)) {
00798             $this->whitelist = $fieldList;
00799         } elseif ($fieldList === null) {
00800             $this->whitelist = array();
00801         }
00802 
00803         if ($data) {
00804             if (countdim($data) == 1) {
00805                 $this->set(array($this->alias => $data));
00806             } else {
00807                 $this->set($data);
00808             }
00809         }
00810 
00811         if ($validate && !$this->validates()) {
00812             $this->whitelist = $_whitelist;
00813             return false;
00814         }
00815 
00816         if (!$this->beforeSave()) {
00817             $this->whitelist = $_whitelist;
00818             return false;
00819         }
00820         $fields = $values = array();
00821 
00822         if (count($this->data) > 1) {
00823             $weHaveMulti = true;
00824             $joined = false;
00825         } else {
00826             $weHaveMulti = false;
00827         }
00828 
00829         foreach ($this->data as $n => $v) {
00830             if (isset($weHaveMulti) && isset($v[$n]) && in_array($n, array_keys($this->hasAndBelongsToMany))) {
00831                 $joined[] = $v;
00832             } else {
00833                 if ($n === $this->alias) {
00834                     foreach (array('created', 'updated', 'modified') as $field) {
00835                         if (array_key_exists($field, $v) && (empty($v[$field]) || $v[$field] === null)) {
00836                             unset($v[$field]);
00837                         }
00838                     }
00839 
00840                     foreach ($v as $x => $y) {
00841                         if ($this->hasField($x)) {
00842                             $fields[] = $x;
00843                             $values[] = $y;
00844                         }
00845                     }
00846                 }
00847             }
00848         }
00849         $exists = $this->exists();
00850 
00851         if (!$exists && $this->hasField('created') && !in_array('created', $fields)) {
00852             $fields[] = 'created';
00853             $values[] = date('Y-m-d H:i:s');
00854         }
00855 
00856         if ($this->hasField('modified') && !in_array('modified', $fields)) {
00857             $fields[] = 'modified';
00858             $values[] = date('Y-m-d H:i:s');
00859         }
00860 
00861         if ($this->hasField('updated') && !in_array('updated', $fields)) {
00862             $fields[] = 'updated';
00863             $values[] = date('Y-m-d H:i:s');
00864         }
00865 
00866         if (!$exists) {
00867             $this->id = false;
00868         }
00869         $this->whitelist = $_whitelist;
00870 
00871         if (count($fields)) {
00872             if (!empty($this->id)) {
00873                 if ($db->update($this, $fields, $values)) {
00874                     if (!empty($joined)) {
00875                         $this->__saveMulti($joined, $this->id);
00876                     }
00877 
00878                     $this->afterSave();
00879                     $this->data = false;
00880                     $this->_clearCache();
00881                     return true;
00882                 } else {
00883                     return false;
00884                 }
00885             } else {
00886                 if ($db->create($this, $fields, $values)) {
00887                     if (!empty($joined)) {
00888                         $this->__saveMulti($joined, $this->id);
00889                     }
00890 
00891                     $this->afterSave();
00892                     $this->data = false;
00893                     $this->_clearCache();
00894                     $this->validationErrors = array();
00895                     return true;
00896                 } else {
00897                     return false;
00898                 }
00899             }
00900         } else {
00901             return false;
00902         }
00903     }
<?php echo $html->input('User/username', array('size' => 20)); ?>

==>

<input name="data[User][username]" size="20" value="" type="text" id="UserUsername" />

這樣子 POST 出去 只有 PHP 看的懂 JAVASCRIPT 未必看的懂....

也因為這樣 版型邏輯層 有問題不打緊..

接下來是強迫大家在 MODEL 下 的 SAVE 等 METHOD 一定要吃這種格式.

XXXX %$#@%#%@#%# 說 CAKEPHP是玩具實在太客氣了.

應該說是一個設計不良的垃圾 <<< 氣頭上.

唉唉唉~~

###################################

不過也不全都是缺點.

至少它在 MODEL 層的 WHERE 條件 和 JOIN 的 參數 用法蠻創新的 ...

^^!! 多吸取它一些好的 再溶為己用 ....

鳴鳴~~ 好爛的一套 FRAME WORK ...

本來為期二星期要全部完工 看來要再托上 一星期 ^^!! .


有人有其它經驗分享嗎???

經實驗 是如此 希望有 新的做法出現....

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=3124

評論

  • edited 一月 2008
    蠻想寫信去 官方罵xxx的...

    恩,提供一個網址:
    http://groups.google.com/group/cake-php

    ...(逃)...
  • edited 一月 2008
    有批評才會進步阿~
    不過我並不覺得那個 input 的寫法有何不妥,在JavaScript下你可以用id去取值,並不一定非要用name去取值~
  • edited 一月 2008
    RE :tokimeki

    JS 有些 表單 的物件屬性 我記得是無法 去表示這種格式的.

    不是說一定要用 NAME 而是 陣列格式.

    JS 的表單物件並不能照單全收.
  • edited 一月 2008
    RE :
    恩,提供一個網址:
    http://groups.google.com/group/cake-php

    ...(逃)...

    ########################################

    CAKEPHP的缺點 還真的蠻多的.

    積怨太深 要罵 XXX 當然要用 非公開式的去罵..
  • edited 一月 2008
    其實我玩 CAKEPHP 才第三個星期.

    每天都有 美爽爽的發現 ,雖然公司指定要用它寫TOOL

    發現 在 FORM 下 , 要有復雜的 JS 邏輯時.

    是要把 MODEL 打掉 還是要把 VIEW的HELPER 打掉.

    再來 好好的寫 JS 邏輯?

    加上我最近又發現它不支援 primary key composed

    在 官方提供的 MODEL 和 HELPER

    我實在覺得它們 上不了枱面的東西.

    只能在家當玩具般的把玩.

    若要 讓它更好用 , 可能要自己 .

    依據官方的規則 加上一堆東西才能使用.

    我配服的其中一點是?

    即然 它沒有支援 primary key composed

    那在專案設計上 大家如何用 CAKEPHP 去做

    RELATION DB 的開發?

    在入DB時 CREATED 和 UPDATED 和 MODIFY 三個欄位 也寫死在 MODEL 做 DATATIME 的格式 .

    變成 一定要 CREATED 這三個 FIELD

    雖然它的美意是要把這些邏輯封裝起來.

    但是確沒有考慮到實用性的問題.

    光有名氣 但是 確 沒有很好用啊? 不是嗎?
  • edited 一月 2008
    JavaScript DOM 是利用HTML標籤中的 id 屬性指定頁面元件,而不是 name 屬性。

    var elm = document.getElementById(id);

    要用 name 屬性取得頁面元件,必須用 getAttribute('name') = xxx 去比對。

    在表單元件中, name 屬性只是用來提供表單欄位名稱之用,對 JavaScript 的操作而言,基本無影嚮。
  • edited 一月 2008
    我覺得我又在烏賊了.

    小弟指的 NAME 是

    HTML INPUT TYPE 內 的 NAME 的格式

    <input type="text" name = "test[Fun][title]" value="TEST" >

    在 FORM 的 OBJ 中 test[Fun][title] 這樣的格式

    剛說明的太抽像了 .

    #

    我記憶中 無法 去解析 .

    但在 shirock 及 tokimeki 的指導下 .

    用 id 屬性指定頁面元件 的方法小弟沒試過.

    謝謝指導 .

    趕緊來試看看...

    ^^!! 不過 primary key composed 的問題看起來目前無解 .
  • edited 一月 2008
    <script>
    var test = document.getElementById('TestTitle').value ;
    alert(test);
    </script>

    實驗了一下 .

    JS 用 ID 可以 取代用 NAME 的方式.

    上了一課 謝謝分享.
Sign In or Register to comment.