# زبان های اسکریپتی > PHP > CakePHP > حرفه ای: توی این فریم ورک چطور باید از مدل استفاده کنم؟

## idocsidocs

من از يه فريم ورک شبيه به کيک استفاده مي کنم، همه درخواستها به صفحه index.php مي رن، از اونجا کنترلر، مدل و ساير کتابخانه ها رو اينکلود مي کنم. مشکلي که دارم اينه که وقتي توي کنترلر يه متد اينکلود مي کنم، توي اين متد نمي تونم از مدل يه شي بسازم و از مدل استفاده کنم. لطفا راهنمايي کنيد.



class Router
{
    public $library;
    public $model;
     public $uri;
    
    public function load_controller()
    {
        $controller_name = $this->uri['controller'];
        $action = $this->uri['action'];
        $param = $this->uri['param'];
        $model = $this->uri['model'];
        $file = ROOT.DS.'admin'.DS.'controller'.DS."$controller_na  me".'_controller.php';
        
        if(file_exists($file))
        {
            require_once($file) ;
            $controller_name = ucwords($controller_name);
            $controller = new $controller_name ;
            
            if(method_exists($controller,$action))
            {
                $controller->{$action}($opt[0],$opt[1],$opt[2],$opt[3],
                $opt[4],$opt[5],$opt[6],$opt[7]);    
            }
            else
            {
                $controller->index();
            }
        }
        else
        {
            require( '/404.php);
        }
    }
    /*********************************
    * Load Model
    *********************************/
    function model($model)
    {
        if(is_array($model))
        {
            array_map(array('Router','load_model'),$model);
        }
        else
        {
            $this->load_model($model);    
        }
    }
    private function load_model($model)
    {
        $file =  ROOT.DS.'admin'.DS.'model'.DS.$model.'.php';
        if(file_exists($file))
        {
            require_once($file) ;
            $this->$model = new $model();
        }
        else
        {
            echo "NO";
        }    
    }

فرض کنيد توي متد زیر
       $controller->{$action}($opt[0],$opt[1],$opt[2],$opt[3],
                $opt[4],$opt[5],$opt[6],$opt[7]); (اين متد توسط کنترلر اينکلود مي شه)، بخوام از مدل استفاده کنم. براي اين منظور بايد چکار کنم؟

----------


## zoghal

دو روش امکان من سراغ دارم. یک استفاده از مدل به صورت استاتیک    Post::find()

در کیک هم کلاس اعزام کننه بعد از گرفتن پارمتر ها از روتر اول میاد کنترلر رو فراخوانی مییکنه و بعد پارامتر ها رو به اون مفرسته . حالا اینجاست که تمامی هلپیر ها .... و مودل ها فراخوانی میشند. شما تو روتر دارید اینکار رو انجام می دید. که 100% استباهه.

----------


## idocsidocs

> در کیک هم کلاس اعزام کننه بعد از گرفتن پارمتر ها از روتر اول میاد کنترلر  رو فراخوانی مییکنه و بعد پارامتر ها رو به اون مفرسته . حالا اینجاست که  تمامی هلپیر ها .... و مودل ها فراخوانی میشند. شما تو روتر دارید اینکار  رو انجام می دید. که 100% استباهه.


می شه بیشتر در این مورد توضیح بدید؟

اگر کیک از این روش استفاده می کنه، پس به قول شما 100 درد اشتباه می کنه، ولی چرا کیک از این روش استفاده می کنه؟

----------


## zoghal

من روش شما رو گفتم اشتباه چون در روتر دارید کنترلر ها رو  ایجاد میکنید. . روش کیک فرق میکنه که در بالا توضیح دادم دقت کنید.

----------


## idocsidocs

> در کیک هم کلاس اعزام کننه بعد از گرفتن پارمتر ها از روتر اول میاد کنترلر  رو فراخوانی مییکنه و بعد پارامتر ها رو به اون مفرسته . حالا اینجاست که  تمامی هلپیر ها .... و مودل ها فراخوانی میشند. شما تو روتر دارید اینکار  رو انجام می دید. که 100% استباهه.


این اشتباهی که من انجام دادم، چه مشکلاتی ممکنه پیش بیاره؟

البته الان نمی تونم توی ویو از مدل استفاده کنم و همش ارور می ده، فکر کنم این مشکل به همین دلیل باشه. 
میشه توضیح بدید؟

----------


## armsoftpc

به نام خدا
با سلام
دوست عزیز من یک سوال داشتم که آیا cakephp هم به اندازه ZF قدرتمند است ، دوستان این طوری توی یک تاپیک که مطرح کرده بودم جوابم رو داده بودند که کیک خیلی راحت تر از زند فریم ورک و منابع بیش تری هم در این باره داره. آیا این گونه است.
موفق باشید.

----------


## zoghal

> این اشتباهی که من انجام دادم، چه مشکلاتی ممکنه پیش بیاره؟
> 
> البته الان نمی تونم توی ویو از مدل استفاده کنم و همش ارور می ده، فکر کنم این مشکل به همین دلیل باشه. 
> میشه توضیح بدید؟


خوب خیلی مشکلات می تونید داشته باشید. 
من روال کیک 1.3 رو واستون توضیح می دم.


1- تموم درخواست ها به dispatcher ارسال میشند.
2- dispatcher میاد درخواست رو به روتر میده 
3- روتر درخواست رو تجیزیه و تحلیل میکنه و با روت های که تعریف شده مقایسه انجام میده. در آخر کشف می کنه آدرسی که وارد شده چی هست. آون آدرس رو تبدیل به متغییر های سیستمی میکنه. مثل نام کنترلر پارمتر ها و ..... 
4- پارا متر ها دوباره به dispatcher برگردونده میشند.
5- dispatcher طبق داده های روتر کنترلر رو پیدا و فرا خوانی میکنه.
6- حالا در کنترلر فراخوانی شده. توسط کنترلر پدر میاد ویو مدل . ..... هر چیزی که نیاز هست رو لود میکنه.


پس نقش روتر فقط یک مفسر هست. که آدرس رو به پارامتر های تبدیل میکنه و برعکس





> به نام خدا
> با سلام
> دوست عزیز من یک  سوال داشتم که آیا cakephp هم به اندازه ZF قدرتمند است ، دوستان این طوری  توی یک تاپیک که مطرح کرده بودم جوابم رو داده بودند که کیک خیلی راحت تر  از زند فریم ورک و منابع بیش تری هم در این باره داره. آیا این گونه است.
> موفق باشید.


دو نکته رو در نظر داشته باشید. که فریم ورک ها  فقط و فقط ابزار هستند. نه چیز دیگری. تانک ماشین قوی هست . اما ایا میتونی تو شهر باهاش اینور اونور برید؟ پس می بینید این قدرتمندی تانک بدرتون نمی خوره.

زند هم دقیقا مثل تانک هست. فریم ورکی با کلاس های کامل و ساختار شی گرایی کامل. اما همین کامل بودنش برای خیلی کارها متوسط خوب جواب نمیده. البته این بر میگرده به برنامه نویسش که اصولی جلو نبرده پروژه رو.

اما در کیک تیم پشتیبانی اومده رو بیس کار کرده و این کلاس ها رو گزاشته در اختیار برنامه نویس ها. حالا شما اگر نیاز به یک کلاس در زند دارید. خوب اشکال نداره اون کلاس رو می تونید به راحتی در کیک استفاده کنید.

آموزشش خیلی راحت تره. در مورد مستندات هم من نظری ندارم. اما در مورد کیک . فروم فارسیش رو من خودم اداره میکنم. که در مورد زند همچین چیزی نیست

----------


## idocsidocs

> آموزشش خیلی راحت تره. در مورد مستندات هم من نظری ندارم. اما در مورد کیک .  فروم فارسیش رو من خودم اداره میکنم. که در مورد زند همچین چیزی نیست


بنظرتون چقدر طول می کشه تا کیک رو یاد بگیرم؟ البته با استفاده از منابع فارسی؟

----------


## zoghal

بستگی داره چه مقدار به شی گرایی در پی اچ پی آشنایی داشته باشید. چون این مورد خیلی مهم هست. وقتی درک درستی از شی گرایی نداشته باشید. هر فریم ورکی براتون قابل درک نیست. و به مشکلات زیادی بر میخورید.

اما اگر آشنایی داشته باشید. به نظر من 1-2 ماه برای آموزشش برای آماده شده در سطح کاربردی با این فریم ورک کافی هست

----------


## armsoftpc

به نام خدا
با سلام و تشکر از zoghal
برای یادگیری باید از کجا شروع کنیم ، من توی گوگل سرچ می کردم ، کتاب آموزشی اقای لفظی رو دانلود کردم ، آیا کتب دیگری شما سراغ دارید و خلاصه توضیح بدید از کجا باید شروع کنیم.



> حالا شما اگر نیاز به یک کلاس در زند دارید. خوب اشکال نداره اون کلاس رو می تونید به راحتی در کیک استفاده کنید.


یعنی کلاس های ZF توی کیک هم هستند.
موفق باشید.*
*

----------


## zoghal

> به نام خدا
> با سلام و تشکر از zoghal
> برای یادگیری باید از کجا شروع کنیم ، من توی گوگل سرچ می کردم ، کتاب آموزشی اقای لفظی رو دانلود کردم ، آیا کتب دیگری شما سراغ دارید و خلاصه توضیح بدید از کجا باید شروع کنیم.
> 
> یعنی کلاس های ZF توی کیک هم هستند.
> موفق باشید.


خواهش عزیز.
من کتاب فارسی جز موردی که شما اشاره کردید ندیدم. اما کتاب های اینگلیسی رو من در آدرس زیر حمع آوری کردم.


```
http://cakephp.4shread.com
```

در مورد کلاس های زند . خیر کلاس ها وجود ندارند. اما شما می توند کلاس های زند یا هر کلاس دیگری رو به راحتی به کیک اضافه کنید و استفاده کنید.




درضمن فروم فارسی کیک هم به آدرس زیر آماده پاسخ گویی به سوالات شما هست.


```
http://cakephp.ir
```

----------


## armsoftpc

به نام خدا
با سلام
و آخرین سوال: آیا کیک می تواند نیاز های برای نوشتن برنامه های حرفه ای php را برطرف کرد و آیا کیک توی ایران دارای طرف داران زیادی هست یا خیر و آیا کیک قابل حمل است یا خیر!



> درضمن فروم فارسی کیک هم به آدرس زیر آماده پاسخ گویی به سوالات شما هست.


ببخشید یه سوال داشتم ، که ربطی به این موضوع نداره اما چرا انجمنتان را با ویبولتین نساخته اید.
بعد این دو انجمن cakephp.ir , cake-php.ir با هم چه فرقی می کنند ، جفتشان که یکی است ، قضیه چیست!!! :متعجب: 
با تشکر

----------


## zoghal

> و آخرین سوال: آیا کیک می تواند نیاز های برای نوشتن برنامه های حرفه ای  php را برطرف کرد و آیا کیک توی ایران دارای طرف داران زیادی هست یا خیر و  آیا کیک قابل حمل است یا خیر!


باید دید حرفه از نظر شما چی هست؟ اسکریپت های حرفه توسط افراد حرفه ای و با تجربه ایجاد میشه. تمامی فریم ورک ها فقط ابزاری در دست برنامه نویس هستند. بر سرعت بخشیدن و .... در جلو بردن پروژه. اگر از همین ابزار درست استفاده نکنید. نتیجه معکوس خواهید گرفت.

نمی دونم منظروتون چیه از طرف دار. من مرکز آماری در این ضمینه سراغ ندارم.

و اما این در مورد قابل حمل است یا خیر دیگه واقعا هیچی ندارم بگم. فریم ورک پی اچ پی هست. نه نگارشی از پی اچ پی وابستگی با پی اچ پی و یک سرویس دهنده وب و دیتابیس داره. حالا چرا شما دنبال قابل حمل بودنش هستید. من نمی دونم





> بخشید یه سوال داشتم ، که ربطی به این موضوع نداره اما چرا انجمنتان را با ویبولتین نساخته اید.
> بعد این دو انجمن cakephp.ir , cake-php.ir با هم چه فرقی می کنند ، جفتشان که یکی است ، قضیه چیست!!!


چون ویبولتن لایسنس داره. کار ما اوپن سورس هست و .........

اشکالی داره دو تا دامین داشته باشه؟ قضیه ای هم نداره.

----------

