• 2 رای - 4 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
بحث تحلیلی Codeigniter
#1
Lightbulb 
چرا Codeigniter ؟
من این دلایل رو می تونم برای انتخاب CodeIgniter بیان کنم
1. ساختار ساده
2. سرعت بالا
3. عدم استفاده از MVC های پیچیده و غیر قابل فهم برای برنامه نویسان تازه کار
4. امکان گسترش هسته بدون تغییر کد های هسته
5. امکان ایجاد کتابخانه به سادگی
6. داکیومنت کامل و ساده

من با اکثر برنامه نویس های این فریم ورک صحبت کردم ، نزدیک 2 سال هم فوکوس کامل داشتم روی این فریم ورک. اکثریت برنامه نویسان این فریم ورک این عوامل رو دخیل بر استفاده از فریم ورک می دونند و مهمترین عامل رو هم دکیومنت ساده و کامل کد ایگنیتر می دونند.

در مقایسه با دیگر فریم ورک ها خیلی ساده و روان هست و می شه گفت بهترین گذینه برای افرادی که به تازگی این کار رو شروع کردند و برای آشنایی با فریم ورک می تونند به راحتی روی این فریم ورک کار کنند. اما این فریم ورک دارای عیب هایی هم هست از جمله نداشتن یک orm مناسب. متاسفانه ( به نظر من ) با ایجاد Active Record ها فقط کار خودشون رو دشوار کردن و چه بسیار راحت تر بود نوشتن یک ORM تا نوشتن یک اکتیو رکورد. اما حالا واقعا بهتر شده در نسخه های قدیم یه باگ خیلی بزرگ توی همین اکتیو رکورد داشتند که خوشبختانه به دادش رسیدن اما دیر. متاسفانه Full VIEW SUPPORT هم نیست.

با هم یه نگاهی به ام وی سی این فریم ورک می کنیم
[عکس: appflowchart.gif]
همین طور که می بینید کار خیلی ساده ای رو انجام می ده در مقابل دیگر فریم ورک ها. از طرفی معمولا برنامه نویسان تازه کار بیشتر از این هم توقع ندارند و معمولار کارهاشون با همین فریم ورک راه می افته.

به نظر من این فریم ورک می تونه کار آمد باشه اما نمی شه روش به عنوان یک فریم ورک کاملا حرفه ای حساب بازکرد چون از نظر حرفه ای هم خیلی MVC ضعیف تری داره. CI بطور کامل ساخته شده توسط Ellislab, Inc از صفر نوشته شده و هسته خاصی هم استفاده نشده و تماما کار خودشون.
CodeIgniter URLs
URL ها به سادگی سازماندهی شدند واز ترفند خاصی استفاده نشده به علاوه اینکه شما نمی تونید هر کارکتری برای URL انتخاب کنید . یادمه قبلا مجبور شدم تغییراتی انجام بدم تا URL فارسی رو قبول کنه
کد پی‌اچ‌پی:
example.com/class/function/arg1/arg2.. 
پشتیبانی از URL Suffix
در تنظیمات این قابلیت وجود داره که بتونید پسوند دلخواه خودتون رو به URL اضافه کنید
پشتیبانی از Query Strings
می تونید URL رو به این صورت تغییر بدید
کد پی‌اچ‌پی:
index.php?c=products&m=view&id=345 

Controllers
به سادگی با این کد می تونید یک کنترل داشته باشید
کد پی‌اچ‌پی:
<?php
class Blog extends Controller {

    function 
index()
    {
        echo 
'Hello World!';
    }
}
?>
کافیه فانکشن های جدیدی رو اضافه کنید و کنترلر خودتون رو کامل کنید
به عنوان مثال برای ارسال اطلاعات مانند GET باید این کار رو بکنید
برای این URL
کد پی‌اچ‌پی:
example.com/index.php/products/shoes/sandals/123 

کد پی‌اچ‌پی:
<?php
class Products extends Controller {

    function 
shoes($sandals$id)
    {
        echo 
$sandals;
        echo 
$id;
    }
}
?>
output
کد پی‌اچ‌پی:
// sandals 123 

Processing Output
امکان گرفتن خروجی بصورت فانکش هم وجود داره ، به این صورت
کد پی‌اچ‌پی:
function _output($output)
{
    echo 
$output;


Private Functions
این قابلیت وجود داره که در یک کنترل توابعی رو به عنوان توابع Private بنویسید که این توابع از طریق URL قابل دسترس نیستند
کد پی‌اچ‌پی:
function _utility()
{
  
// some code

کد پی‌اچ‌پی:
example.com/index.php/blog/_utility
آندرلاین در ابتدای نام تابع باعث Private شدن تابع می شه

Views
ویو در کدایکنیتر خیلی ساده پایه ریزی شده فقط کافیه با این دستور View مورد نظر خودتون رو که در پوشه view وجود داره فراخونی کنید
کد پی‌اچ‌پی:
$this->load->view('name'); 
توجه : در CI ویو به صورت خود کار فراخوانی نمی شه و شما باید در انتهای فانکشن ویو مورد نظر خودتون رو فراخوانی کنید
ار سال مقادیر به ویو هم توسط آرایه و آجکت امکان پذیر هست
کد پی‌اچ‌پی:
$data = array(
               
'title' => 'My Title',
               
'heading' => 'My Heading',
               
'message' => 'My Message'
          
);

$this->load->view('blogview'$data);
// or
$data = new Someclass();
$this->load->view('blogview'$data); 

کد پی‌اچ‌پی:
<html>
<
head>
<
title><?php echo $title;?></title>
</head>
<body>
    <h1><?php echo $heading;?></h1>
</body>
</html> 

امکان دریافت خروجی تنها هم در ویو وجود داره
کد پی‌اچ‌پی:
$string $this->load->view('myfile'''true); 

Models
مودل ها هم در حد امکان ساده پایه ریزی شدن

با این دستور مودل فراخوانی می شه
کد پی‌اچ‌پی:
$this->load->model('Model_name'); 
مسیر مودل هم باید به این صورت باشه
کد:
application/models/user_model.php
بعد از فراخوانی هم به این صورت می تونید استفاده کنید
کد پی‌اچ‌پی:
$this->Model_name->function(); 
می تونید برای مودل یک نام نمایشی یا همون Alias در نظر بگیرید
کد پی‌اچ‌پی:
$this->load->model('Model_name''fubar');

$this->fubar->function(); 

نمونه یک مودل
کد پی‌اچ‌پی:
class Blog_controller extends Controller {

    function 
blog()
    {
        
$this->load->model('Blog');

        
$data['query'] = $this->Blog->get_last_ten_entries();

        
$this->load->view('blog'$data);
    }

Helper Functions
CI برای پوشش ویو یک سری فانکشن به عنوان Helper تعریف کرده که شما می تونید از توابع اون در ویو استفاده کنید
برای فراخوانی می تونید از روش های زیر استفاده کنید
1. فراخوانی تکی
کد پی‌اچ‌پی:
$this->load->helper('name'); 
2. فراخوانی بصورت چند پارامتری
کد پی‌اچ‌پی:
$this->load->helper( array('helper1''helper2''helper3') ); 
3. فراخوانی توسط aautoload
کد:
application/config/autoload.php
نمونه یک هلپر
کد پی‌اچ‌پی:
// any_in_array() is not in the Array Helper, so it defines a new function
function any_in_array($needle$haystack)
{
    
$needle = (is_array($needle)) ? $needle : array($needle);

    foreach (
$needle as $item)
    {
        if (
in_array($item$haystack))
        {
            return 
TRUE;
        }
        }

    return 
FALSE;
}

// random_element() is included in Array Helper, so it overrides the native function
function random_element($array)
{
    
shuffle($array);
    return 
array_pop($array);

البته باید به این پارامتر در کافیگ هم دقت کنید
کد پی‌اچ‌پی:
$config['subclass_prefix'] = 'MY_'

Plugins
پلاگین ها در CI قبل از کتابخانه ها لود می شوند البته اگر بصورت autoload تعریف بشند و گر نه که در زمان فراخونی لود می شوند

نحوه فراخوانی هم همانند Helper هست با این تفاوت که بجای load->helper از load->plugin استفاده می شه
کد پی‌اچ‌پی:
$this->load->plugin('name');
$this->load->plugin( array('plugin1''plugin2''plugin3') ); 

البته باید توجه کنید که پلاگین ها می تونند کلاس نباشند

Libraries
کتابخانه ها کلاس هایی هستند که شما می تونید در پروژه خودتون لود و استفاده کنید
کد پی‌اچ‌پی:
$this->load->library('class name'); 


Hooks - Extending the Framework Core
Hooks ها وضیفه اعمال تغییرات بر روی هسته کدایگنیتر رو دارند برای شما ابتدا باید در فایل کانفیگ application/config/config.php این تنظیم رو انجام بدید

کد پی‌اچ‌پی:
$config['enable_hooks'] = TRUE

ادامه دارد.
  پاسخ
#2
سلام تغييراتي كه گفتي براي urlهاي فارسي دادي رو ميشه به ما هم بگي؟
  پاسخ
تشکر شده توسط :
#3
متاسفانه همین نداشتن orm برای کسانی که در حال حاضر دارند با این فریم ورک کار میکنند. مشکلاتی ایجاد کرده. چند وقتی هست که یک بازی آنلاین رو یک تیم با این فریم ورک پیاده سازی کرده. و الان با مشکلات زیادی در زمینه دیتابیس و کم آوردن این پروژه در مقابل مراجعه کنندگان مواجه شده .

فعلا یک سرور 8 هسته ای و 12 گیگ رم جواب گوی این پروژه نیست.
  پاسخ
تشکر شده توسط :
#4
صفحه اول یادتون نره بچه هااااااااااااااا
  پاسخ
تشکر شده توسط :
#5
نقل قول:صفحه اول یادتون نره بچه هااااااااااااااا
چیکار کنیم اعلان ؟
نقل قول:متاسفانه همین نداشتن orm برای کسانی که در حال حاضر دارند با این فریم ورک کار میکنند.
در ادامه می گم که چطور Doctrine رو به Codeigniter وصل کنید
چطوری به این فریم ورک Layout اضافه کنید
چطوری از Ajax در Codeigniter
و ....

حدود 2..3 سال روی این فریم ورک کار کردم و با زیر و بم اون به طور کامل آشنایی دارم.
به نظر می تونه فریم ورک خوبی باشه اما برای کار های کوچیک ، کار های بزرگ فقط مخصوص Symfony هستند.
نقل قول:سلام تغييراتي كه گفتي براي urlهاي فارسي دادي رو ميشه به ما هم بگي؟
چشم فقط اعلان یکم درگیرم به محض اینکه وقتم آزاد بشه آموزش کاملی در این ضمینه ارائه می کنم
  پاسخ
تشکر شده توسط : oia molana Maysam.m
#6
نقل قول:سلام تغييراتي كه گفتي براي urlهاي فارسي دادي رو ميشه به ما هم بگي؟
بخاطر دیر شدن معذرت خواهی می کنم.

ببینید در CI توسط کانفیگ و یه کتابخانه به نام URI تمامی کارهای مربوط به URL ها انجام می شه.
در حال حاضر ( متاسفانه ) URL ها به این صورت تشخیص داده می شوند که یک سری کارکتر های مجاز وجود داره در فایل کانفیگ و در کتابخانه URI اگر URL جزئی از این کارکتر ها بود اجازه اجرا داده می شه و گر نه که شما با خطای The URI you submitted has disallowed characters مواجه خواهید شد. چون ( دلیلش رو نمی دونم) شما نمی تونید در رگولار کارکتر های فارسی رو پیاده سازی کنید ( حداقل من نتونستم) مجبورید بیاید و صورت مسئله رو تغییر بدید. یعنی به جای اینکه بگیم این کارکتر ها مجاز هستند می گیم این کارکتر ها غیر مجاز هستند.
برای شروع به فولدر Config در application برید و فایل config.php رو در یک ادیتور باز کنید. خط شماره 126
کد پی‌اچ‌پی:
$config['permitted_uri_chars'] = 'a-z ~%.:_\-'
خط بالا رو با خط پایین جایگذین کنید
کد پی‌اچ‌پی:
$config['permitted_uri_chars'] = '~%.:_\-'

سپس در فایل URI.php در مسیر system/libraries در خط 191
کد پی‌اچ‌پی:
if ( ! preg_match("|^[".str_replace(array('\\-','\-')),'-',preg_quote($this->config->item('permitted_uri_chars'))."]+$|i"$str)) 
خط بالا رو با خط پایین جایگذین کنید
کد پی‌اچ‌پی:
if ( ! preg_match("|^[\w".str_replace(array('\\-','\-')),'-',preg_quote($this->config->item('permitted_uri_chars'))."]+$|i"$str)) 

البته اگر از نسخه های قدیمی تر استفاده می کنید باید در خط 189
کد پی‌اچ‌پی:
if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i"$str)) 
خط بالا رو با خط پایین جایگذین کنید
کد پی‌اچ‌پی:
if ( ! preg_match("|^[\w".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i"$str)) 
  پاسخ
تشکر شده توسط : oia scooter arlabbafi Maysam.m
#7
سلام .به قول معروف لذت بردیم. ممنون
من به شدت مشتاقم در مورد layout ,ajax در ci صحبت کنی
  پاسخ
تشکر شده توسط :
#8
چشم ، امشب آموزش اینکه چطور Layout در Codeigniter ضاضافه کنیم و می زارم
  پاسخ
تشکر شده توسط : scooter
#9
سلام دوستان
من یه چیزایی در مورد Doctrine و نحوه ی اتصال به اون رو برای codeigniter اینجا پیدا کردم اگه کسی علاقه داشت بره ببینه خیلی جالبه !!
راستی میشه در مورد این Layout برا codeigniter بیشتر توضیح بدین اصلا چی هست این Layout
با تشکر
  پاسخ
تشکر شده توسط :
#10
چشم . حتما .منتظر باشید. به زودی Big Grin
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان