※ 本文為 ott 轉寄自 ptt.cc 更新時間: 2014-07-20 18:18:24
看板 PHP
作者 j87b0003 (I'm 邱老虎)
標題 [心得] CI不死…
時間 Tue Jul 15 23:48:06 2014



雖然CI很久沒更新了…(我也離開寫程式行業二~三年)
不過近四個月,也越來越有心得,後來就慢慢找到自己的習慣開發方式
我自己個人:
【Model】
    負責與資料庫,所以幾乎會寫概觀的通用性
    通常會有:
    get_list($where, $limit, $offset, $order)
        用來分頁/列表用
    get_where($where)
        取得單一資料
    on_duplicate_batch($data)
        資料新增與更新
    delete($where)、add($data)、update($data, $where)
        後面的新增和更新幾乎都很少用了

【Libs】
    介於model和controller中間
    把model的功能性除原本的,也做更多擴充,做更多細項
        get_list_rows($where) =>> model->get_list($where)->num_rows()
        get_by_id($id)        =>> model->get_where(array('id' => $id ))
        on_duplicate($data)   =>> modetl->on_duplicate_batch(array(0 => $data))
        delete_by_id($id)     =>> model_delete(array('id' => $id ))

【Controller】
    現在習慣CUID就分成:
        list_all($page)
            會對應到Libs的get_list,然後做分頁功能
        add
            餵一個假資料到view
        alter($id)
            對應到Libs的get_by_id
        save($ajax)
            這部份寫成可以用ajax處理,或是post,再以Libs的on_duplicate

【View】
    以add、alter為例,會共用同一個view,
    在js檢查完後,直接以
        var data = {
            field : field_data
        }
    送到Controller的save,只需要$this->input->post($data),接收後,
    用on_duplicate就可以存入了,而不需各別接收每個欄位變數


【其他變形】
    常常網頁開發會遇到資料欄位不統一情況,然後就會浪費去多開一個資料表
    實際上資料表不會存超過十筆XDDDDDD
    這部份我就以json來儲存,資料表規劃會如下:
    id:資料表編號
    type: 屬於哪一種資料型態
    data: 資料內容,這部份就以json型態存入
          例:[{id:0, name:''},{id:1, name:''}]

    所以在Libs裡,就會寫上一個存入/取出的function

    function get($type){
       $result = model->get_where(array('type' => $type))->result_array()
           $result[0]['content'] = json_decode($resulst[0]['content'], TRUE)
       return $result[0]
    }

    function on_duplicate($data){
        $data['content'] = json_encode($data['content']);
        model->on_duplicate_batch(array(0 => $data))
    }

    而在controller可以寫一個通用的:
    function uni_save($ajax = TRUE){
        $flag = 1
        $data = $this->input->post('data');
        Libs->on_duplicate($data)
        $ary = array('flag' => $flag)
        if($ajax)echo $ary;
        else return $ary;
    }

    在view裡:
        js則是以這樣寫
        var data = []
        $('.data_area').each(function(index){
            var tmp ={
                'id'   : index,
                'name' : $(this).find('.name').val()
            }
            data.push(tmp)
        });


        var ary = {
            'id'   : $('#id').val()
            'type' : $('#type').val()
            'data' : data
        }

        $.ajax{
            data: { 'data' : ary}
            url : controller/save
        }
        不過這種通用的有最大缺點就是,無法針對個別做刪除,
        只能每次做更新,
        個人拿來的用途是:廣告的圖片和連結、產品的分類、郵遞區號等
        泛用性算是非常廣XD


差不多是這樣啦,相信還有更好的寫法...

--
當對一切絕望的時候,
這時候的樂觀,只是從悲觀所堆積出來:)

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.105.39.7
※ 文章網址: http://www.ptt.cc/bbs/PHP/M.1405439293.A.393.html
alog:去玩個Rails吧:)1F 07/16 01:23
shadowjohn:去玩nodejs吧:)2F 07/16 01:40
j87b0003:nodejs…搭no-sql db真的很好用= =……3F 07/16 05:28
boboptt:推一個!曾是 CI 人,現在 Laravel4F 07/16 07:55
Laravel:不玩玩看我嗎XD5F 07/17 11:23
j87b0003:Laravel之前有小碰,但說明文件不是很親民…(遮臉6F 07/17 13:00
ilay:symfony也不錯啊..7F 07/17 17:27
ilay:symfony玩熟了還可以跨入drupal8 module 開發咧
jazzjas:我覺得lara的文件和相關資源很完整,台灣社群也蠻活絡,很9F 07/17 18:57
jazzjas:值得考慮
hit1205:(握住j87b0003的手)11F 07/18 00:02
rickysu:來試試Symfony吧,文件齊全到看不完 XD (握住一堆人的手)12F 07/18 09:12
shadowjohn:推 symfony 之前出差也用了一陣子,滿不錯的...13F 07/18 10:12
j87b0003:大家手牽手圍一圈,來淨化什麼東西吧(握手14F 07/18 21:54

--
※ 看板: ott 文章推薦值: 0 目前人氣: 0 累積人氣: 356 
分享網址: 複製 已複製
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇