رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آموزش کدایگنایتر CodeIgniter
#16
مدل‌ها
Model ها درصورت تمایل میتونن برای کسانی که دوست دارن از ساختار سنتی MVC پیروی کنن، قابل استفاده هستن.

مدل چیه؟
مدل‌ها کلاس‌های PHP هستن که برای کار با اطلاعات در پایگاه داده‌های شما طراحی میشن. برای مثال فرض کنین از کداینگایتر برای مدیریت به وبلاگ استفاده میکنین. ممکنه بخواین یه کلاس مدل داشته باشین که شامل توابعی برای درج، بروزرسانی و استخراج مطالب وبلاگ شما باشه. در اینجا مثالی از چنین کلاس مدلی رو مشاهده میکنین:
<?php

class Blog_model extends CI_Model
{
    public $title;
    public $content;
    public $date;

    public function __construct()
    {
        // Call the CI_Model constructor
        parent::__construct();
    }

    public function get_last_ten_entries()
    {
        $query = $this->db->get('entries', 10);
        return $query->result();
    }

    public function insert_entry()
    {
        $this->title = $_POST['title']; // Please read the below note
        $this->content = $_POST['content'];
        $this->date = time();
        $this->db->insert('entries', $this);
    }

    public function update_entry()
    {
        $this->title = $_POST['title'];
        $this->content = $_POST['content'];
        $this->date = time();
        $this->db->update('entries', $this, array('id' => $_POST['id']));
    }
}

نقل قول:نکته: متدهای مثال بالا از متدهای موجود در کلاس کوئری‌ساز دیتابیس استفاده میکنن. به‌منظور سادگی، در این مثال ما مستقیماً از آرایه‌ی $_POST['ltr] استفاده کردیم. این موضوع کلاً خوب نیست و روش رایج‌تری که باید بکار بره، استفاده از کتابخانه‌ی ورودی هست: [ltr]$this->input->post('title)

ساختار داخلی یک مدل
کلاس‌های مدل در مسیر application/models ذخیره میشن و میتونن داخل پوشه‌های فرعی هم درصورت نیاز به نظم بیشتر قرار داده بشن. الگوی اولیه‌ی یه کلاس مدل اینطوریه:
class Model_name extends CI_Model
{

    public function __construct()
    {
        parent::__construct();
    }
}

که باید بجای Model_name اسم کلاستون رو باید بنویسید. اسم کلاس باید با حرف اول بزرگ نوشته بشه و بقیه‌ی حروف کوچک هستن. مطمئن بشین که کلاستون از کلاس پایه‌ی CI_Model مشتق میشه. اسم فایل باید با اسم کلاس یکی باشه. برای مثال اگه کلاس شما دارای چنین محتوایی باشه:
class User_model extends CI_Model
{

    public function __construct()
    {
        parent::__construct();
    }
}

باید فایلش در مسیر application/model/User_model.php ذخیره بشه.

بارگذاری یک مدل
مدل‌های شما معمولاً توسط متدهای داخل کنترلر بارگذاری و فراخوانی میشن. برای بارگذاری یه مدل، از این دستور استفاده میکنیم:
$this->load->model('model_name');

اگه مدل شما توی یه پوشه‌ی فرعی باشه، باید اسم مسیر نسبی اون رو هم اعلام کنین. برای مثال اگه مدل شما در مسیر application/models/blog/Queries.php باشه، با این دستور اون رو بارگذاری میکنین:
$this->load->model('blog/queries');

وقتی که مدل بارگذاری شد، ازطریق یه شئ همنام با اسم کلاستون میتونین بهش دسترسی داشته باشین. برای مثال:
$this->load->model('model_name');
$this->model_name->method();

اگه میخواین مدلتون به یه شئ با اسم دیگه نسبت داده بشه، میتونین از پارامتر دوم متد بارگذاری استفاده کنین:
$this->load->model('model_name', 'foobar');
$this->foobar->method();

در اینجا یه مثال از یه کنترلر رو میبینید که یه مدل رو بارگذاری میکنه و بعد هم از یه ویو استفاده میکنه:
class Blog extends CI_Controller
{

    public function index()
    {
        $this->load->model('blog_model');
        $data['query'] = $this->blog->get_last_ten_entries();
        $this->load->view('blog', $data);
    }
}

بارگذاری خودکار مدل‌ها
اگه احساس میکنین نیاز به این دارین که یه مدل خاص توی کل برنامه شما موجود باشه، میتونین از CodeIgniter بخواین که اون رو درزمان آماده‌سازی اولیه سیستم بطور خودکار بارگذاری کنه. این‌کار با ویرایش فایل application/config/autoload.php و اضافه‌کردن مدل به آرایه‌ی $autoload['model'] انجام میشه.

اتصال به دیتابیس
وقتی که یه مدل بارگذاری میشه، بطور خودکار به دیتابیس متصل نمیشه. گزینه‌های زیر برای اتصال به دیتابیس در دسترس شما هستن:
  • میتونین با کمک متدهای استاندارد دیتابیس که اینجا توضیح داده شده، به دیتابیس وصل بشین (چه داخل کنترلر و چه داخل کلاس مدل)
  • میتونین به متد بارگذاری مدل بگین که بطور خودکار وصل بشه. این‌کار با کمک پارامتر اختیاری سوم و مقدار TRUE انجام میشه. تنظیمات اتصال به دیتابیس توی فایل config/database.php تعریف شده و از همونجا میتونین ویرایش کنین
    $this->load->model('model_name', '', TRUE);
  • میتونین بصورت دستی تنظیمات اتصال رو ازطریق پارامتر سوم بصورت آرایه ارسال کنین:
    $config = array(
        'hostname' => 'localhost',
        'username' => 'myusername',
        'password' => 'mypassword',
        'database' => 'mydatabase',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => TRUE,
    );
    $this->load->model('model_name', '', $config);
تشکر شده توسط:
#17
توابع کمکی
این توابع همونطور که اسمشون نشون میده، به شما کمک میکنن کارهایی که میخواین رو انجام بدین. هر فایل Helper به‌سادگی مجموعه‌ای از توابع هست که در یک دسته‌بندی خاص قرار میگیرن. برای مثال توابع کمکی URL وجود داره که به شما در ساختن لینک‌ها کمک میکنه، یا توابع کمکی فرم که به شما توی ایجاد عناصر فرم کمک میکنه، و یا توابع کمکی متن که برای انجام عملیات قالب‌بندی مخشته باشه، تلفی روی متن مفیده، یا توابع کمکی Cookie که برای نوشتن و خوندن کوکی کاربرد داره، یا حتی توابع کمکی فایل که به شما در کار با فایل‌ها کمک میکنه و...

برخلاف اغلب سیستم‌های دیگه در کدایگنایتر، Helper ها بصورت شئ‌گرا نوشته نشدن، بلکه توابع ساده و رویه‌گرا هستن. هر تابع کمکی یه عمل مشخص انجام میده و هیچ وابستگی به توابع دیگه نداره.

CodeIgniter بطور پیشفرض فایل‌های توابع کمکی رو بصورت خودکار بارگذاری نمیکنه. بنابراین اولین قدم در استفاده از یه Helper بارگذاری اونه. وقتی که بارگذاری شد، بصورت سراسری توی کنترلر و ویوها قابل استفاده میشه.

توابع کمکی معمولاً در مسیر system/helpers یا application/helpers ذخیره میشن. کدایگنایتر اول به پوشه application/helpers نگاه میکنه. اگه این پوشه وجود نداشته باشه یا فایل کمکی داخلش قرار نداشته باشه، CI دنبال فایل کمکی توی پوشه‌ی سراسری system/helpers میگرده.

بارگذاری یه فایل کمکی
بارگذاری یه فایل Helper با کمک متد زیر خیلی ساده است:
$this->load->helper('name');

که در اینجا name اسم فایل کمکی موردنظره که البته پسوند _helper.php رو نمینویسیم. برای مثال، اگه بخوایم فایل کمکی URL رو بارگذاری کنیم که اسمش url_helper.php هست، اینطوری مینویسیم:
$this->load->helper('url');

یه فایل کمکی میتونه هرجایی داخل متدهای کنترلر بارگذاری بشه (یا حتی داخل فایل‌های ویوی شما، هرچند این‌کار روش خوبی نیست). تنها قانونی که وجود داره اینه که قبل از استفاده ازش، باید بارگذاریش کنین. میتونین توابع کمکی خودتون رو توی سازنده‌ی کلاس کنترلر خودتون بارگذاری کنین و با این‌کار، بصورت خودکار توی تمام متدها قابل‌استفاده میشن. همچنین میتونین یه فایل کمکی رو فقط توی یه متد خاص که بهش احتیاج داره بارگذاری کنین.

نقل قول:نکته: بارگذاری فایل‌های کمکی، هیچ مقداری برنمیگردونه. بنابراین سعی نکنید خروجی اون رو توی متغیری ذخیره کنین. فقط به همین‌شکل که مثال زدیم ازش استفاده کنین.

بارگذاری چند فایل کمکی بصورت همزمان
اگه میخواین چند فایل کمکی رو بطور یکجا بارگذاری کنین، میتونین اونها رو توی یه آرایه مشخص کنین. مثل این کد:
$this->load->helper(array('helper1', 'helper2', 'helper3'));

بارگذاری خودکار فایل‌های کمکی
اگه احساس میکنین نیاز دارین یه فایل کمکی خاص توی کل برنامه قابل‌استفاده باشه، میتونین به CodeIgniter بگین که اون رو بصورت خودکار درحین آماده‌سازی اولیه‌ی سیستم، بارگذاری کنه. این‌کار با ویرایش فایل تنظیمات application/config/autoload.php و اضافه‌کردن اسم فایل کمکی به آرایه‌ی $autoload['helper'] انجام میشه.

استفاده از یه فایل کمکی
وقتی که یه فایل Helper رو که حاوی تابع موردنیاز شماست، بارگذاری کردین، مثل توابع استاندارد و عادی PHP میتونین توابع داخلش رو صدا بزنین. برای مثال اگه میخواین یه لینک با کمک متد anchor() توی یکی از ویوهای خودتون بسازین، میتونین اینطوری بنویسین:
<?php echo anchor('blog/comments', 'Click Here'); ?>

که در اینجا Click Here اسم لینک و blog/comments آدرس URI موردنظر برای دسترسی به controller/method دلخواه شماست.

توسعه‌ی Helper ها
برای گسترش یه فایل کمکی، یه فایل توی پوشه‌ی application/helpers با همون اسم فایل کمکی اصلی بسازین ولی قبل از اسمش یه پیشوند MY_ بهش بدین (این مورد قابل تنظیمه. یکم پایینتر رو ببینید).

اگه کاری که میخواین انجام بدین، اضافه‌کردن برخی قابلیت‌ها به فایل کمکی موجود هست - شاید اضافه‌کردن یک یا دو تابع یا ویرایش نحوه‌ی کار یه تابع خاص - دراینصورت بهتره که بجای ویرایش فایل کمکی موجود، اون رو گسترش بدین.

نقل قول:نکته: اصطلاح «گسترش‌دادن» خیلی سطحی استفاده‌شده چون توابع کمکی بصورت رویه‌گرا هستن و درنتیجه نمیشه اونها رو گسترش‌داد چون اصطلاح گسترش‌دادن یا Extend مختص کلاس‌ها و وراثت هست؛ ولی در پشت‌پرده، این قابلیت به شما اجازه میده که توابعی رو به یه فایل کمکی اضافه‌کنید یا توابعش رو با توابع خودتون جایگزین کنین.

برای مثال، اگه میخواین فایل کمکی آرایه‌ها رو ویرایش کنین، باید یه فایل به‌اسم application/helpers/MY_array_helper.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_elements() is included in Array Helper, so it overrides the native function
function random_element($array)
{
    shuffle($array);
    return array_pop($array);
}

تنظیم پیشوند دلخواه شما
پیشوند اسم فایل برای گسترش توابع کمکی، مشابه همون پیشوندی هست که برای توسعه‌ی کتابخانه‌ها و کلاس‌های هسته‌ی فریمورک بکار رفته. برای تنظیم پیشوند دلخواه خودتون، فایل application/config/config.php رو باز کنین و دنبال این آیتم بگردین:
$config['subclass_prefix'] = 'MY_';

دقت‌کنید که تمام کتابخانه‌های بومی کدایگنایتر با پیشوند CI_ مشخص‌شدن. بنابراین از این پیشوند استفاده نکنید.

حالا چکار کنید؟
توی فهرست مطالب، لیست تمام فایل‌های کمکی موجود رو میتونین پیدا کنین. روی هرکدوم کلیک کنین تا ببینید چه‌کاری انجام میدن.
تشکر شده توسط:
#18
استفاده از کتابخانه‌های کدایگنایتر
تمام کتابخانه‌های قابل‌استفاده، در مسیر system/libraries قرار گرفتن. در اغلب موارد، برای کار با یکی‌از این کلاس‌ها، باید اون رو داخل یه کنترلر با استفاده از متد زیر، آماده‌سازی کنین:
$this->load->library('class_name');

که class_name اسم کلاسی هست که میخواین ازش استفاده کنین. برای مثال، اگه میخواین کتابخانه‌ی اعتبارسنجی فرم رو بارگذاری کنین، باید اینکار رو انجام بدین:
$this->load->library('form_validation');

به‌محض اینکه یه کتابخانه آماده شد، میتونین از اون به‌شکلی که توی راهنمای استفاده از کلاسش اعلام شده، استفاده کنید. بعلاوه میشه چند کتابخانه رو بصورت همزمان با ارسال یه آرایه برای متد بارگذاری، آماده‌سازی کرد:
$this->load->library(array('email', 'table'));
تشکر شده توسط:
#19
ساخت کتابخانه‌ی جدید
وقتی از اصطلاح «کتابخانه» استفداه میکنیم، معمولاً به کلاس‌هایی اشاره میکنیم که توی پوشه‌ی libraries قرار دارن و در قسمت مرجع کلاس‌های این آموزش درموردشون توضیح میدیم. البته در اینجا، بجای توضیح درمورد کار با کتابخانه‌های موجود، میخوایم بهتون یاد بدیم که چطور کتابخانه‌های دلخواه خودتون رو در مسیر application/libraries بسازین تا یه جداسازی مناسب بین منابع محلی شما و منابع سراسری فریمورک وجود داشته باشه.

بعنوان یک هدیه، CodeIgniter به کتابخانه‌های شما اجازه میده که کلاس‌های بومی خودش رو گسترش بدن (اگه فقط نیاز به اضافه‌کردن یکسری قابلیت به یه کتابخانه‌ی موجود دارین). حتی میتونین با استفاده‌از اسامی دقیقاً مشابه کلاس‌های اصلی، اونها رو با نسخه‌ی موجود در مسیر application/libraries جایگزین کنید.

بطور خلاصه:
  • میتونین کتابخانه‌های کاملاً جدید بسازین
  • میتونین کتابخانه‌های موجود رو گسترش بدین
  • میتونین کتابخانه‌های موجود رو با نسخه‌ی خودتون جایگزین کنین
در اینجا نحوه‌ی هرکدوم از این سه مفهوم رو با جزئیات توضیح میدیم.

نقل قول:نکته: کلاس‌های کار با پایگاه داده‌ها رو نمیشه توسعه‌داد یا با کلاس‌های شخصی خودتون جایگزین کرد. تمام کلاس‌های دیگه قابل توسعه/جایگزینی هستن.

ذخیره‌سازی
کلاس‌های کتابخانه‌ی شما باید در مسیر application/libraries قرار بگیرن چون اینجا جایی هست که کدایگنایتر در زمان بارگذاری، دنبالشون میگرده.

مفاهیم نام‌گذاری
  • اسامی فایل‌ها باید با حروف بزرگ شروع بشن. برای مثال: Myclass.php
  • تعریف کلاس‌ها هم باید با حروف بزرگ شروع بشه. برای مثال: class MyClass
  • اسامی کلاس‌ها و اسم فایل‌ها باید با هم مطابقت داشته باشن
فایل کلاس
کلاس‌ها باید از این الگوی اولیه پیروی کنن:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Someclass
{

   public function some_method()
   {
   }
}

نقل قول:نکته: ما از اسم Someclass فقط بعنوان مثال استفاده کردیم.

استفاده از کلاس شما
داخل هرکدوم از متدهای کنترلر میتونین کلاس خودتون رو با استاندارد زیر بارگذاری کنین:
$this->load->library('someclass');

که در اینجا someclass اسم فایل بدون پسوند .php هست. میتونین اسم فایل رو با حروف بزرگ یا کوچک بنویسید. CodeIgniter اهمیتی نمیده.

وقتی کلاس شما بارگذاری شد، میتونین به کلاستون با نسخه‌ی حروف کوچک دسترسی پیدا کنید:
$this->someclass->some_method(); // Object instance will always be lower case

ارسال پارامتر در زمان بارگذاری کلاس
میتونین بصورت پویا یکسری اطلاعات رو بصورت آرایه توسط متد بارگذاری، برای سازنده‌ی کلاستون ارسال کنید:
$params = array('type' => 'large', 'color' => 'red');
$this->load->library('someclass', $params);

و اگه بخواین از این قابلیت استفاده کنین، باید سازنده‌ی کلاستون رو این‌شکلی بنویسید:
public function __construct($params)
{
   // Do something with $params
}

همچنین میتونین پارامترهای ذخیره‌شده توی یه فایل تنظیمات رو ارسال کنید. کافیه یه فایل تنظیمات همنام با کلاستون بسازین و اون رو در مسیر application/config ذخیره کنید. دقت‌کنید که اگه بصورت پویا پارامترها رو به‌شکلی که الآن توضیح دادیم بفرستین، فایل تنظیمات قابل استفاده نخواهد بود.

[b]استفاده از منابع کداینگایتر در داخل کتابخانه‌ی شما
[/b]برای دسترسی به منابع بومی CodeIgniter در داخل کتابخانه‌ی خودتون، از متد get_intance() استفاده کنید. این متد، شئ والد کداینگایتر رو برمیگردونه. معمولاً توی متدهای کنترلر خودتون، هرکدوم از متدهای موجود در کدایگنایتر رو با کمک $this صدا میزنین:
$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
// etc.

هرچند $this فقط داخل کنترلرها، مدل‌ها یا ویوها قابل استفاده است. اگه بخواین از کلاس‌های CodeIgniter داخل کلاس‌های شخصی خودتون استفاده کنین، میتونین بصورت زیر کار کنید. ابتدا شئ کدایگنایتر رو داخل یه متغیر ذخیره کنین:
$CI =& get_instance();

وقتی که اینکار رو انجام دادین، میتونین از اون متغیر بجای $this استفاده کنید:
$CI->load->helper('url');
$CI->load->library('session');
$CI->load->config->item('base_url');
// etc.

نقل قول:نکته: احتمالاً متوجه شدین که متد get_instance() رو بصورت ارجاعی استفاده کردیم. این خیلی اهمیت داره. قراردادن یه ارجاع به شما کمک میکنه که از شئ اصلی CodeIgniter بجای یه کپی از اون، استفاده کنید.

از اونجا که کتابخانه، یه کلاس هست، بهتره که از مزایای کامل برنامه‌نویسی شئ‌گرا بهره‌مند بشین. بنابراین، اگه میخواین از شئ والد کدایگنایتر در تمام متدها استفاده کنید، میتونین از این روش بهره ببرین:
<?php
class Example_library
{

   protected $CI;

   // We'll use a constructor, as you can't directly call a function
   // from a property definition.
   public function __construct()
   {
       // Assign the CodeIgniter super-object
       $this->CI =& get_instance();
   }

   public function foo()
   {
       $this->CI->load->helper('url');
       redirect();
   }

   public function bar()
   {
       echo $this->CI->config->item('base_url');
   }
}

جایگزینی کتابخانه‌های بومی با نسخه‌های شخصی شما
خیلی ساده، با نامگذاری فایل‌های کلاستون همنام با یک کتابخانه‌ی بومی، میتونین کدایگنایتر رو وادار به استفاده از اون به‌جای نسخه‌ی بومی کنید. برای استفاده از این قابلیت، باید دقیقاً از همون نام فایلی که برای کتابخانه‌ای اصلی بکاررفته استفاده کنید. برای مثال، اگه میخواین کتابخانه‌ی ایمیل بومی رو با نسخه‌ی خودتون جایگزین کنین، باید یه فایل به‌نام application/libraries/Email.php بسازین و اسم کلاستون رو هم CI_Email بگذارین:
class CI_Email
{
   // Your code goes here
}

دقت‌کنید که اغلب کلاس‌های بومی با پیشوند CI_ مشخص‌شدن. برای بارگذاری کتابخانه‌ی خودتون، از همون روش استاندارد استفاده کنید:
$this->load->library('email');

نقل قول:نکته: درحال‌حاضر امکان جایگزینی کلاس‌های کار با پایگاه داده‌ها با نسخه‌ی شخصی وجود نداره.

توسعه‌ی کتابخانه‌های موجود
اگه بخواین یکسری قابلیت‌ها به یه کتابخانه‌ای موجود اضافه کنید - شاید اضافه‌کردن یکی دوتا متد - دراینصورت جایگزین‌کردن کل کتابخانه با نسخه‌ی شخصی خودتون اشتباهه. در اینجا بهتره که خیلی ساده، کلاس موجود رو گسترش بدین. توسعه‌ی کلاس موجود، مشابه جایگزینی اونه، منتها با یکسری تفاوت‌های جزئی:
  • تعریف کلاس باید از کلاس والد مشتق بشه
  • کلاس جدید شما و اسم فایلش باید با پیشوند MY_ نامگذاری بشن (این پیشوند قابل سفارشی‌سازیه که در ادامه توضیح میدیم).
برای مثال، اگه میخواین کلاس بومی Email رو توسعه بدین، باید یه فایل به‌اسم application/libraries/MY_Email.php بسازین و کدتون رو به‌این‌شکل بنویسید:
class MY_Email extends CI_Email
{
   // Your code
}

اگه نیاز به استفاده از سازنده‌ی خاصی توی کلاستون دارین، مطمئن بشین که سازنده‌ی والد رو صدا میزنید:
public function __construct($config = array())
{
   parent::__construct($config);
}

نقل قول:نکته: همه‌ی کتابخانه‌ها پارامترهای یکسانی ندارن (یا ممکنه اصلاً پارامتر نداشته باشن). قبل از توسعه‌ی یه کتابخانه، به کدش یه نگاه بندازین تا نحوه‌ی پیاده‌سازی اون رو یاد بگیرین.

بارگذاری کلاس فرعی شما
برای بارگذاری کلاس فرعی که با گسترش کتابخانه‌های بومی ساختین، از همون روش معمولی استفاده میکنیم. پیشوند رو ذکر نکنید. برای مثال اگه بخوایم مثال بالا رو بارگذاری کنیم، اینطوری مینویسیم:
$this->load->library('email');

وقتی که کلاستون بارگذاری شد، مثل سایر کلاس‌های کتابخانه از متدهاش استفاده میکنید:
$this->email->some_method();

تنظیم پیشوند دلخواه شما
برای استفاده از پیشوند اختصاصی خودتون برای کلاس‌های فرعی، فایل تنظیمات application/config/config.php رو باز کنید و دنبال این عبارت بگردین:
$config['subclass_prefix'] = 'MY_';

دقت‌کنید که تمام کتابخانه‌های پیشفرض CodeIgniter از پیشوند CI_ استفاده میکنن. بنابراین از این پیشوند برای کلاس‌های خودتون استفاده نکنید.
تشکر شده توسط:
#20
استفاده از راه‌اندازهای کدایگنایتر
راه‌انداز یا Driver نوع خاصی از کتابخانه‌هاست که یک کلاس والد و احیاناً هر تعداد دلخواه کلاس فرزند داره. کلاس‌های فرزند دسترسی به کلاس والد دارند ولی به سایر فرزندان هم‌نسل خودشون دسترسی نخواهند داشت. درایورها یک الگوی مدرن در کنترلرهای شما برای کتابخانه‌ها تعریف می‌کنن که از مزایای شکستن به چند کلاس مستقل بهره می‌برن.

Driverها در مسیر system/libraries قرار میگیرن و هرکدوم، پوشه‌ی فرعی اختصاصی خودشون رو دارن که همنام با کلاس والد کتابخانه‌ی مربوطه است. ضمناً در داخل اون پوشه، یه پوشه‌ی فرعی دیگه به‌اسم drivers قرار داره که تمام کلاس‌های فرزند احتمالی رو در بر میگیره. برای استفاده از یه درایور، اون رو ازطریق کنترلر با روش زیر راه‌اندازی می‌کنیم:
$this->load->drvier('class_name');

که در اینجا class_name اسم کلاس والد درایور موردنظر شما برای فراخوانیه. برای مثال، اگه بخوایم درایوری به‌اسم Some_parent رو صدا بزنیم، باید اینطوری بنویسیم:
$this->load->driver('some_parent');

متدهای این کلاس رو بعداً میشه اینطوری فراخوانی کرد:
$this->some_parent->some_method();

برای دسترسی به کلاس‌های فرزند یک درایور خاص، نیاز به راه‌اندازی مجزای اونها نیست و مستقیماً میشه با کمک کلاس والد اونها رو صدا زد. برای مثال:
$this->some_parent->child_one->some_method();
$this->some_parent->child_two->another_method();
تشکر شده توسط:
#21
ایجاد درایورهای شخصی
ساختار پوشه‌ها و فایل‌های درایور بصورت زیر باید درنظر گرفته بشه:
  • /application/libraries/Driver_name
    • Driver_name.php
    • drivers
      • Driver_name_subclass_1.php
      • Driver_name_subclass_2.php
      • Driver_name_subclass_3.php

نقل قول:نکته: برای حفظ سازگاری با سیستم‌های فایل حساس به بزرگی و کوچکی حروف (مثل لینوکس و مک)، پوشه‌ی Driver_name باید با حرف اول بزرگ نوشته بشه (مطابق با ساختاری که تابع ucfirst() در PHP ارائه میکنه).

نقل قول:مهم: ساختار درایورها به‌نحوی هست که کلاس‌های فرزند، از کلاس والد مشتق نمیشن و درنتیجه خصوصیات و متدهای کلاس والد درایور رو بهشون ارث نمیرسه.
تشکر شده توسط:
#22
ایجاد کلاس‌های هسته‌ی سیستم
هر زمان CodeIgniter اجرا میشه، یکسری کلاسهای پایه وجود دارن که بطور خودکار بعنوان بخشی از هسته‌ی فریمورک بارگذاری میشن. البته این امکان وجود داره که هرکدوم از کلاس‌های هسته‌ی سیستم رو با نسخه‌ی دلخواه خودتون جایگزین کنین یا حتی اون رو توسعه بدین.


نقل قول:اغلب کاربران هرگز نیاز به انجام این کار پیدا نمیکنن، ولی بهرحال قابلیت جایگزینی یا گسترش کلاس‌های هسته‌ی فریمورک برای کسانی که بخوان به‌شکل قابل‌ملاحظه‌ای هسته‌ی کدایگنایتر رو تغییر بدن، وجود داره. درگیرشدن با کلاس‌های هسته‌ی سیستم پیامدهای زیادی داره؛ بنابراین قبل از هر کاری، مطمئن بشین که میدونین دارین چه‌کاری انجام میدین.


فهرست کلاس‌های سیستم
فهرست زیر شامل فایل‌های هسته‌ی سیستم هست که هربار کدایگنایتر اجرا میشه، فراخوانی میشن:
  • Benchmark
  • Config
  • Controller
  • Exceptions
  • Hooks
  • Input
  • Language
  • Loader
  • Log
  • Output
  • Router
  • Security
  • URI
  • Utf8
جایگزینی کلاس‌های هسته
برای اینکه از کلاس‌های خودتون بجای کلاس‌های پیشفرض استفاده کنین، کلاس خودتون رو در مسیر applicate/core ذخیره کنین:
application/core/some_class.php

اگه این پوشه وجود نداره، باید بسازینش. هر فایلی که همنام با فهرست بالا باشه، بجای نسخه‌ای که معمولاً بکار گرفته میشه، مورد استفاده قرار میگیره. دقت‌کنید که کلاس شما باید از پیشوند CI_ استفاده کنه. برای مثال، اگه فایل شما Input.php هست، باید اسم کلاس رو CI_Input بگذارین:
class CI_Input
{
   // some code
}

گسترش کلاس‌های هسته
اگه تمام کاری که میخواین انجام بدین، اضافه‌کردن یکسری قابلیت به یه کتابخانه‌ی موجود هست (شاید اضافه‌کردن یک یا دو متد) اونوقت جایگزینی کامل اون کتابخانه با نسخه‌ی اختصاصی خودتون کاملاً اشتباهه. در چنین مواردی بهتره که اون کلاس رو توسعه بدین. گسترش یه کلاس مفهومی نزدیک به جایگزینی اون داره منتها با چند استثنا:
  • تعریف کلاس باید از کلاس والد مشتق بشه.
  • کلاس جدید و فایلش باید با پیشوند MY_ نامگذاری بشن (این مورد همونطور که یکم بعدتر میگیم، قابل تنظیمه).
برای مثال، اگه میخواین کلاس Input اصلی فریمورک رو توسعه بدین، باید یه فایل به اسم application/core/MY_Input.php بسازین و کلاستون رو اینطوری داخلش تعریف کنین:
class MY_Input extends CI_Input
{
   // some code
}

نقل قول:نکته: اگه نیاز به استفاده از سازنده توی کلاس خودتون دارین، مطمئن بشین که سازنده‌ی کلاس والد رو فراخوانی کردین:
class MY_Input extends CI_Input
{
    public function __construct()
    {
        parent::__construct();
    }
}

هر متدی که در کلاس شما همنام با متدهای موجود در کلاس والد تعریف بشه، بجای نسخه‌ی بومی مورد استفاده قرار میگیره (به این قابلیت میگن «رونویسی متد» در شئ‌گرایی). این ویژگی به شما اجازه‌ی تغییر رفتار هسته‌ی CodeIgniter رو میده.

اگه قصد دارین کلاس هسته‌ی Controller رو گسترش بدین، مطمئن بشین که از کلاس خودتون بعنوان کلاس والد کنترلرها استفاده کردین:
class Welcome extends MY_Controller // instead of CI_Controller
{
    // ...
}

تنظیم پیشوند دلخواه شما
برای تنظیم پیشوند اختصاصی خودتون برای کلاس‌های فرزند، فایل application/config/config.php رو باز کنید و دنبال این گزینه بگردین:
$config['subclass_prefix'] = 'MY_';
تشکر شده توسط:
#23
ایجاد کلاس‌های فرعی
در برخی مواقع ممکنه بخواین کلاس‌هایی ایجاد کنید که مستقل از کنترلرهای شما هستن ولی قابلیت استفاده از تمام منابع کدایگنایتر رو داشته باشن. این‌موضوع به‌سادگی قابل انجامه. هر کلاسی که شما در داخل کنترلر خودتون بارگذاری میکنین، میتونه به منابع داخلی CodeIgniter ازطریق فراخوانی تابع get_instance() دسترسی پیدا کنه. این تابع، شئ اصلی کدایگنایتر رو برمیگردونه.

بطور معمول برای فراخوانی هرکدوم از متدهای داخلی کدایگنایتر از $this استفاده میکنیم:
$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
// etc.

البته این $this فقط در داخل کنترلرها، مدل‌ها و ویوها قابل استفاده است. اگه بخواین از کلاس‌های CodeIgniter در داخل کلاس‌های شخصی خودتون استفاده کنید، میتونین این‌شکلی کار کنین:
$CI =& get_instance();

و حالا با کمک متغیر $CI بجای $this کار کنید:
$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
// etc.

اگه از get_instance() درون یه کلاس دیگه استفاده میکنین، شاید بهتر باشه که اون رو به یه فیلد نسبت بدین. اینطوری هروقت به شئ اصلی CodeIgniter احتیاج داشتین میتونین از اون فیلد استفاده کنین:
class Example
{
   protected $CI;

   // We'll use a constructor, as you can't directly call a function
   // from a property definition.
   public function __construct()
   {
       $this->CI =& get_instance();
   }

   public function foo()
   {
       $this->CI->load->helper('url');
       redirect();
   }

   public function bar()
   {
       $this->CI->config->item('base_ur');
   }
}

توی مثال بالا، هر دو متد foo() و bar() بعد از ایجاد شئ از کلاس Example میتونن با شئ اصلی کدایگنایتر کار کنن، بدون اینکه نیاز باشه توی هرکدوم از get_instance() استفاده کنین.
تشکر شده توسط:
#24
هوک‌ها - توسعه‌ی هسته‌ی فریمورک
قابلیت هوک‌ها یا قلاب‌های کدایگنایتر، به شما اجازه‌ی ورود به داخل روند کاری فریمورک و دستکاری اون، بدون نیاز به تغییر فایل‌های هسته رو میده. وقتی CodeIgniter اجرا میشه، یکسری مراحل پردازش رو طی میکنه که در بخش چرخه‌ی کاری برنامه درموردش توضیح دادیم. ممکنه مواردی پیش بیاد که شما بخواین یه کاری رو در مرحله‌ی مشخصی از فرایند اجرای برنامه، انجام بدین. برای مثال ممکنه بخواین یه اسکریپت دقیقاً قبل یا بعد از بارگذاری کنترلر شما اجرا بشه یا اینکه بخواین یکی از اسکریپت‌های خودتون رو در جای دیگری فراخوانی کنید.

فعال‌کردن هوک‌ها
قابلیت هوک‌ها رو میشه بطور کلی ازطریق فایل تنظیمات application/config/config.php و گزینه‌ی زیر، تنظیم کرد:
$config['enable_hooks'] = TRUE;

تعریف یک هوک یا قلاب
هوک‌ها در فایل application/config/hooks.php معرفی میشن. هر هوک بصورت یه آرایه با این الگو معرفی میشه:
$hook['pre_controller'] = array(
   'class'    => 'MyClass',
   'function' => 'MyFunction',
   'filename' => 'Myclass.php',
   'filepath' => 'hooks',
   'params'   => array('one', 'two', 'three'),
);

اندیس آرایه به اسم نقطه‌ی هوک موردنظر برای استفاده بستگی داره. توی مثال بالا، نقطه‌ی هوک pre_controller هست. فهرست نقاط هوک رو در ادامه معرفی میکنیم. عناصر زیر باید توی آرایه‌ی انجمنی هوک شما معرفی شده باشن:
  • class اسم کلاسی که میخواین صدا بزنین. اگه ترجیح میدین از روش رویه‌گرا بجای یه کلاس استفاده کنین، این آیتم رو خالی بگذارین.
  • function اسم تابع (یا متد) موردنظر برای فراخوانی.
  • filename اسم فایلی که حاوی کلاس/تابع موردنظر شماست.
  • filepath اسم پوشه‌ی شامل اسکریپت شما. دقت‌کنید که اسکریپت شما باید توی یه پوشه داخل مسیر application/ باشه و درنتیجه مسیر رو باید نسبت‌به اون پوشه بنویسید. برای مثال اگه اسکریپت شما داخل مسیر application/hooks/ هست، خیلی ساده فقط از 'hooks' بعنوان filepath استفاده می‌کنید. اگه اسکریپت شما در مسیر application/hooks/utilities/ قرار داره، باید از 'hooks/utilities' بعنوان filepath استفاده کنید و کارکتر / انتهایی رو ننویسید.
  • params هر پارامتری که میخواین برای اسکریپتتون ارسال بشه. این آیتم اختیاریه.
اگه از PHP نسخه 5.3 یا بالاتر استفاده میکنین، میشه از توابع بی‌نام (یا Closure) هم بعنوان هوک استفاده کنید. بعنوان مثال:
$hook['post_controller'] = function() {
   // do something here
};

فراخوانی متعدد یک هوک
اگه میخواین در یک نقطه‌ی هوک، چند اسکریپت رو اجرا کنید، خیلی ساده باید یه آرایه‌ی چندبعدی بسازین مثل این:
$hook['pre_controller'][] = array(
   'class'    => 'MyClass',
   'function' => 'MyMethod',
   'filename' => 'Myclass.php',
   'filepath' => 'hooks',
   'params'   => array('one', 'two', 'three'),
);

$hook['pre_controller'][] = array(
   'class'    => 'MyOtherClass',
   'function' => 'MyOtherMethod',
   'filename' => 'Myotherclass.php',
   'filepath' => 'hooks',
   'params'   => array('four', 'five', 'six'),
);

به کروشه‌های بعد از اندیس هر آرایه دقت کنید:
$hook['pre_controller'][]

این‌کار به شما اجازه‌ی فراخوانی چند اسکریپت روی یک نقطه‌ی هوک رو میده. ترتیب تعریف شما مشخص‌کننده‌ی ترتیب اجرای اسکریپت‌هاست.

نقاط هوک
فهرست نقاط هوک موجود به این صورته:
  • pre_system قبل از هر کاری درحین اجرای سیستم فراخوانی میشه. فقط کلاس‌های benchmark و hooks در این مرحله بارگذاری شدن و هیچ فرایند مسیریابی یا چیز دیگری اتفاق نیفتاده.
  • pre_controller بلافاصله قبل از فراخوانی کنترلر شما اتفاق میفته. تمام کلاس‌های پایه بارگذاری شدن و مسیریابی و کنترل‌های امنیتی انجام شده.
  • post_controller_constructor بعد از اینکه شئ کلاس کنترلر شما ایجاد شد و قبل از اینکه هر متدی صدا زده بشه، فراخوانی میشه.
  • post_controller بعد از اینکه کنترلر شما کاملاً اجرا شد، فراخوانی میشه.
  • display_override متد _display() رو رونویسی میکنه که برای ارسال خروجی نهایی برای مرورگر کاربر در انتهای اجرای سیستم بکار میره. این‌کار به شما اجازه میده که از روش خاص خودتون برای نمایش خروجی استفاده کنید. دقت‌کنید که نیاز به دسترسی به شئ اصلی کدایگنایتر ازطریق تابع get_instance() دارین و داده‌های نهایی رو میتونین ازطریق فیلد output و متد get_output() بدست بیارین. برای مثال:
    $this->CI =& get_instance();
    $output = $this->CI->output->get_output();
  • cache_override به شما اجازه میده متد دلخواه خودتون رو بجای متد _display_cache() در کتابخانه‌ی خروجی فراخوانی کنید.
  • post_system بعد از اینکه خروجی نهایی برای مرورگر کاربر ارسال شد، در پایان اجرای سیستم فراخوانی میشه.
تشکر شده توسط:
#25
بارگذاری خودکار منابع
کدایگنایتر از قابلیت بارگذاری خودکار بهره می‌بره که اجازه میده کتابخانه‌ها، فایل‌های کمکی و مدل‌ها بصورت خودکار در هربار اجرای سیستم بارگذاری بشن. اگه نیاز به منابع خاصی بصورت سراسری در کل برنامه دارین، باید برای راحتی بیشتر، بارگذاری خودکار اونها رو درنظر داشته باشین. این موارد رو میشه بصورت خودکار بارگذاری کرد:
  • کلاس‌های موجود در پوشه‌ی libraries/
  • فایل‌های کمکی موجود در پوشه‌ی helpers/
  • فایل‌های تنظیمات سفارشی موجود در مسیر config/
  • فایل‌های زبان قرارگرفته در مسیر system/language/
  • مدل‌های موجود در پوشه‌ی models/
برای بارگذاری خودکار منابع، فایل application/config/autoload.php رو باز کنید و آیتم موردنظرتون رو به آرایه‌ی بارگذاری خودکار اضافه‌کنید. دستورالعمل‌های لازم رو توی فایل برحسب نوع هر عنصر میتونین پیدا کنین.


نقل قول:نکته: پسوند .php رو موقع اضافه‌کردن عنصر به آرایه‌ی بارگذاری خودکار اضافه نکنید.


همچنین اگه بخواین CodeIgniter از فایل بارگذاری خودکار Composer استفاده کنه، فقط کافیه متغیر [ltr]$config['composer_autoload'] رو داخل فایل application/config/config.php با مقدار TRUE یا مسیر قرارگیری اون فایل تنظیم کنید.
تشکر شده توسط:
#26
توابع رایج
کدایگنایتر از چند تابع برای انجام عملیات خودش استفاده میکنه که بصورت سراسری تعریف شدن و همه‌جا در دسترس شما هستن. این توابع نیاز به بارگذاری هیچ کتابخانه یا فایل کمکی خاصی ندارن.

is_php($version)
پارامترها:
  • $version (رشته) - شماره‌ی نسخه‌ی موردنظر
مقدار بازگشتی: TRUE درصورتی که نسخه‌ی PHP درحال‌اجرا حداقل نسخه‌ای باشه که اعلام شده یا FALSE اگه اینطور نباشه.
نوع بازگشتی: منطقی

این تابع تشخیص میده که آیا نسخه‌ی PHP نصب‌شده روی سرور برابر با نسخه‌ی اعلام‌شده یا بالاتر از اون هست یا نه.

مثال:
if (is_php('5.3')) {
   $str = quoted_printable_encode($str);
}

این متد اگه نسخه‌ی PHP نصب‌شده برابر یا بالاتر از نسخه‌ی اعلام‌شده باشه نتیجه‌ی TRUE برمیگردونه و اگه نسخه‌ی PHP نصب‌شده کمتر از نسخه‌ی اعلام‌شده باشه، نتیجه‌ی FALSE میده.



is_really_wriatble($file)
پارامترها:
  • $file (رشته) - مسیر فایل
مقدار بازگشتی: TRUE اگه مسیر قابل نوشتن باشه و FALSE اگه اینطور نباشه.
نوع بازگشتی: منطقی

تابع is_writable() روی سرورهای ویندوز حتی اگه واقعاً نتونین روی فایل بنویسین، نتیجه‌ی TRUE برمیگردونه چون سیستم‌عامل فقط درصورتی به PHP نتیجه‌ی FALSE میده که توی خصوصیات فایل، خاصیت Read-Only فعال شده باشه. این تابع چک میکنه که آیا واقعاً فایل قابل نوشتن هست یا نه و برای این‌کار سعی میکنه یکبار داخلش چیزی بنویسه. معمولاً این تابع فقط توی سیستم‌هایی که اطلاعات اعلام‌شده توسط سیستم‌عامل قابل‌اعتماد نیستن توصیه میشه.

مثال:
if (is_really_writable('file.txt')) {
   echo 'I could write to this if I wanted to';
} else {
   echo 'File is not writable';
}

نقل قول:نکته: باگ PHP شماره‌ی 54709 رو برای اطلاعات بیشتر مطالعه کنید.


config_item($key)
پارامترها:
  • $key (رشته) - کلید عنصر آرایه‌ی تنظیمات
مقدار بازگشتی: مقدار موجود در آرایه‌ی تنظیمات با کلید مربوطه یا NULL درصورت عدم وجود
نوع بازگشتی: ترکیبی

کتابخانه‌ی تنظیمات روش ترجیحی برای دسترسی به اطلاعات تنظیمات محسوب میشه، هرچند تابع config_item() برای استخراج کلیدهای تکی قابل‌استفاده است. مستندات کتابخانه‌ی تنظیمات رو برای اطلاعات بیشتر بخونین.


set_status_header($code, $text = '')
پارامترها:
  • $code (عدد صحیح) - کد وضعیت پاسخ HTTP
  • $text (رشته) - متن سفارشی (اختیاری) برای تنظیم‌کردن درکنار کد وضعیت
مقدار بازگشتی: هیچ
نوع بازگشتی: هیچ

به شما اجازه میده که بصورت دستی یه هدر وضعیت سرور رو تنظیم کنید.

مثال:
set_status_header(401);
// Sets the header as: Unauthorized

اینجا رو برای فهرست کامل هدرها مشاهده کنید.


remove_invisible_characters($str, $url_encoded = TRUE)
پارامترها:
  • $str (رشته) - متن ورودی
  • $url_encoded (منطقی) - (اختیاری) آیا باید کارکترهای URL رمزگذاری‌شده هم حذف بشن یا نه؟
مقدار بازگشتی: متن پاکسازی‌شده
نوع بازگشتی: رشته


این تابع جلوی درج کارکترهای NULL رو بین کارکترهای ASCII میگیره (مثل Java\0Script).

مثال:
remove_invisible_characters('Java\\0Script');
// Returns: 'JavaScript'


html_escape($var)
پارامترها:
  • $var (ترکیبی) - متغیری که باید خنثی‌سازی (Escape) بشه (رشته یا آرایه)
مقدار بازگشتی: رشته(ها)ی خنثی شده
نوع بازگشتی: ترکیبی

این تابع بعنوان یه اسم مستعار برای تابع بومی خود PHP یعنی htmlspecialchars() کار میکنه، با این مزیت که میتونه یه آرایه از رشته‌ها رو هم بعنوان ورودی دریافت‌کنه و برای جلوگیری از حملات Cross Site Scripting یا همون XSS مفیده.



get_mimes()
پارامترها: ندارد
مقدار بازگشتی: یک آرایه‌ی انجمنی از انواع فایل
نوع بازگشتی: آرایه

این تابع یک ارجاع به آرایه‌ی انواع MIME موجود در application/config/mimes.php رو برمیگردونه.


is_cli()
پارامترها: ندارد
مقدار بازگشتی: درصورتی‌که اسکریپت با رابط خط‌فرمان اجرا شده باشه نتیجه‌ی TRUE و درغیر اینصورت نتیجه‌ی FALSE میده.
نوع بازگشتی: منطقی

این تابع اگه اسکریپت تحت CLI درحال اجرا باشه نتیجه‌ی TRUE و در غیر اینصورت نتیجه‌ی FALSE میده.
نقل قول:این تابع چک میکنه که مقدار PHP_SAPI برابر با 'cli' باشه یا ثابت STDIN تعریف شده باشه.


function_usable($function_name)
پارامترها:
  • $function_name (متنی) - اسم تابع
مقدار بازگشتی: اگه میتونیم از تابع استفاده کنیم، نتیجه‌ی TRUE و درغیر اینصورت نتیجه‌ی FALSE میده
نوع بازگشتی: منطقی

این تابع باکمک function_exists() چک میکنه که تابع وجود داره یا نه و اگه افزونه‌ی Suhosin بارگذاری شده باشه، چک‌میکنه که تابع موردنظر رو غیرفعال نکرده باشه. این تابع برای مواقعی که میخواین چک‌کنین توابع خاصی مثل eval() یا exec() که میتونن خطرناک باشن و باید روی سرورهایی که محدودیت‌های خاصی دارن باید غیرفعال بشن، فعال هستن یا نه.

نقل قول:این تابع در اصل بخاطر این معرفی شده که Sohosin اجرای اسکریپت رو متوجه میکنه درحالی که این یه باگه که از نسخه‌ی 0.9.34 یه رفع‌مشکل براش موجود بوده ولی هنوز منتشر نشده.
تشکر شده توسط: php
#27
توابع مربوط به سازگاری
کدایگنایتر مجموعه‌ای از توابع رو ارائه کرده که به شما اجازه میدن از قابلیت‌هایی که توی نسخه‌های بالاتر PHP یا تحت شرایط خاصی موجود هست، استفاده کنید.

بخاطر پیاده‌سازی اختصاصی این توابع، نیازمندی‌های خاصی برای اونها وجود داره ولی بازم درصورتی‌که تنظیمات PHP شما اونها رو ارائه نمیکنه، سودمند هستن.

نقل قول:نکته: درست شبیه توابع رایج، توابع مربوط به سازگاری هم همه‌جا قابل دسترسی هستن، فقط به این‌شرط که نیازمندی‌های اونها برآورده بشه.

هش پسورد
این مجموعه از توابع سازگاری، پشتیبانی از افزونه‌ی استاندارد PHP به‌اسم Password Hashing رو ارائه میکنن که توی خود PHP از نسخه‌ی 5.5 به بعد قابل استفاده است.

پیشنیازها
  • PHP نسخه‌ی 5.3.7
  • پشتیبانی از CRYPT_BLOWFISH توسط تابع crypt()

ثابت‌ها
  • PASSWORD_BCRYPT
  • PASSWORD_DEFAULT

مرجع توابع

password_get_info($hash)

پارامترها:
  • $hash (رشته) - هش پسورد

خروجی: اطلاعات درباره‌ی پسورد هش‌شده

نوع بازگشتی: آرایه

برای اطلاعات بیشتر، به مستندات PHP درمورد password_get_info() مراجعه کنین.

password_hash($password, $algo, $options = [])

پارامترها:
  • $password (رشته) - متن خام پسورد
  • $algo (عدد صحیح) - الگوریتم هش‌کردن
  • $options (آرایه) - تنظیمات هش‌کردن

خروجی: پسورد هش‌شده یا FALSE درصورت عدم موفقیت

نوع بازگشتی: رشته

برای اطلاعات بیشتر، به مستندات PHP درمورد password_hash() مراجعه کنید.

نقل قول:بجز درصورتی که از Salt شخصی خودتون (که معتبر هم باشه) استفاده کنید، این تابع نیاز به یه منبع CSPRNG داره. هرکدوم از موارد زیر میتونن این نیاز رو برآورده کنن:
  • mcrypt_create_iv() با MCRYPT_DEV_URANDOM
  • openssl_random_pseudo_bytes()
  • /dev/arandom
  • /dev/urandom

password_needs_rehash($hash, $algo, $options = [])

پارامترها:
  • $hash (رشته) - هش پسورد
  • $algo (عدد صحیح) - الگوریتم هش‌کردن
  • $options (آرایه) - تنظیمات هش‌کردن

خروجی: TRUE درصورتی‌که رمز نیاز به هش‌کردن مجدد داشته باشه تا با الگوریتم و تنظیمات مشخص‌شده سازگار بشه و FALSE درغیر اینصورت

نوع بازگشتی: عبارت منطقی

برای اطلاعات بیشتر مستندات PHP رو درمورد password_needs_rehash() مطالعه کنین.

password_verify($password, $hash)

پارامترها:
  • $password (رشته) - متن خام پسورد
  • $hash (رشته) - هش پسورد

خروجی: TRUE اگه رمز با هش مطابقت داشته باشه و FALSE درغیر اینصورت

نوع بازگشتی: عبارت منطقی

برای اطلاعات بیشتر، مستندات PHP رو درمورد password_verify() بخونین.



هش (خلاصه‌ی پیام)
این توابع پشتیبانی از hash_equals() و hash_pbkdf2() رو فراهم میکنن که بدون اونها، فقط از PHP نسخه‌ی 5.6 و 5.5 (به‌ترتیب) قابل استفاده است.

پیشنیازها
  • هیچ

مرجع توابع

hash_equals($known_string, $user_string)

پارامترها:
  • $known_string (رشته) - متن شناخته‌شده
  • $user_string (رشته) - متن ارائه‌شده توسط کاربر

خروجی: TRUE درصورتی‌که رشته‌ها با هم مطابقت داشته باشن و FALSE درغیر اینصورت

نوع بازگشتی: عبارت منطقی

برای اطلاعات بیشتر، به مستندات PHP درمورد hash_equals() مراجعه کنین.

hash_pbkdf2($algo, $password, $salt, $iterations, $length = 0, $raw_output = FALSE)

پارامترها:
  • $algo (رشته) - الگوریتم هش‌کردن
  • $password (رشته) - رمز
  • $salt (رشته) - سالت یا نمک
  • $iterations (عدد صحیح) - تعداد پیمایش موردنیاز برای انجام درحین استخراج
  • $length (عدد صحیح) - طول رشته‌ی خروجی
  • $raw_output (عبارت منطقی) - آیا باید نتیجه بصورت داده‌های باینری خام برگردونده بشه یا نه

خروجی: کلید استخراج‌شده از رمز یا FALSE درصورت عدم موفقیت

نوع خروجی: رشته

برای اطلاعات بیشتر، به مستندات PHP درمورد hash_pbkdf2() رجوع کنید.



رشته‌های حاوی کارکترهای چندبایتی
این مجموعه از توابع سازگاری پشتیبانی محدودی از افزونه‌ی رشته‌های چندبایتی PHP رو ارائه میکنن. به‌دلیل راهکاری محدود جایگزین، فقط چند تابع وجود دارن.

نقل قول:نکته: وقتی که پارامتر مجموعه‌ی کارکترها اعلام نشه، از تنظیمات $config['charset'] استفاده خواهد شد.

پیشنیازها
  • افزونه‌ی iconv

نقل قول:مهم: این پیشنیاز اختیاریه و این توابع همیشه وجود دارن. اگه iconv موجود نباشه، این توابع به رفتار معمولی تک‌بایتی خودشون برمیگردن. ضمناً اگه مجموعه کارکترها رو مشخص کرده باشین، باید توسط iconv پشتیبانی بشه و فرمتش به‌نحوی باشه که توسط iconv شناسایی بشه.

نقل قول:نکته: برای اینکه خودتون پیشنیاز رو روی افزونه‌ی mbstring واقعی بررسی کنین، از ثابت MB_ENABLED استفاده کنید.

مرجع توابع

mb_strlen($str, $encoding = NULL)

پارامترها:
  • $str (رشته) - متن ورودی
  • $encoding (رشته) - مجموعه‌ی کارکترها

خروجی: تعداد کارکترها توی متن ورودی یا FALSE درصورت عدم موفقیت در تشخیص

نوع بازگشتی: عدد صحیح

برای اطلاعات بیشتر، مستندات PHP رو درمورد mb_strlen() بخونین.

mb_strpos($haystack, $needle, $offset = 0, $encoding = NULL)

پارامترها:
  • $haystack (رشته) - متنی که باید داخلش جستجو کنیم
  • $needle (رشته) - بخشی از متن که دنبالش میگردیم
  • $offset (عدد صحیح) - محل شروع جستجو
  • $encoding (رشته) - مجموعه‌ی کارکترها

خروجی: موقعیت کارکتری که $needle پیدا شده یا FALSE درصورت عدم پیداشدن

مقدار بازگشتی: عدد صحیح

برای اطلاعات بیشتر، جزئیات mb_strpos() رو توی مستندات PHP بخونین.

mb_substr($str, $start, $length = NULL, $encoding = NULL)

پارامترها:
  • $str (رشته) - متن ورودی
  • $start (عدد صحیح) - موقعیت اولین کارکتر
  • $length (عدد صحیح) - حداکثر تعداد کارکترها
  • $encoding (رشته) - مجموعه‌ی کارکترها

خروجی: بخشی از $str که با کمک $start و $length مشخص‌شده یا FALSE درصورت عدم موفقیت

نوع بازگشتی: رشته

برای اطلاعات بیشتر به مستندات PHP درمورد mb_substr() مراجعه کنین.



توابع استاندارد
این مجموعه از توابع، پشتیبانی از تعداد محدودی از توابع استاندارد PHP رو که ممکنه توی نسخه‌ی جدیدتری از PHP نسبت‌به نسخه‌ی سرور ارائه شده باشه، فراهم میکنن.

پیشنیازها
  • هیچ

مرجع توابع

array_column($array, $column_key, $index_key = NULL)

پارامترها:
  • $array (آرایه) - آرایه‌ای که قصد داریم اطلاعات رو ازش استخراج کنیم
  • $column_key (ترکیبی) - کلید یا اندیس ستونی که میخوایم نتایج رو از داخلش استخراج کنیم
  • $index_key (ترکیبی) - کلیدی که برای مقادیر بازگشتی باید مورد استفاده قرار بگیره

خروجی: یه آرایه از مقادیر که مشخص‌کننده‌ی یک ستون خاص از آرایه‌ی ورودی هست.

نوع بازگشتی: آرایه

برای اطلاعات بیشتر به مستندات PHP درخصوص array_column() مراجعه کنین.

hex2bin($data)

پارامترها:
  • $data (رشته) - نمایش هگزادسیمال داده‌ها

خروجی: معادل باینری داده‌های ورودی

نوع بازگشتی: رشته

برای جزئیات بیشتر به مستندات hex2bin() مراجعه کنید.
تشکر شده توسط:




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