• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
سئوال از ساختار cakephp
#1
چند روزی هست که با cakephp اشنا شدم و دارم کدهاش رو بررسی میکنم
و چند نکته برام مبهم بوده که براتون شرح میدم:
1.در فولدر اصلی cakephp یه فایل .htaccess هستش که به این حالته :
کد پی‌اچ‌پی:
<IfModule mod_rewrite.c>
   
RewriteEngine on
   RewriteRule    
^$ app/webroot/    [L]
   
RewriteRule    (.*) app/webroot/$[L]
</
IfModule

که اینجا در خواست رو می فرسته به این فولدر app/webroot/
و در فولدر app/webroot/ یه فایل htaccess دیگه هستش :
کد پی‌اچ‌پی:
<IfModule mod_rewrite.c>
    
RewriteEngine On
    RewriteCond 
%{REQUEST_FILENAME} !-d
    RewriteCond 
%{REQUEST_FILENAME} !-f
    RewriteRule 
^(.*)$ index.php?url=$[QSA,L]
</
IfModule

و اینجا url به index.php با متد GET فرستاده میشه.
میدونیم که تا اینجا هیچ اسکریپتی به جر index.php در فولدر app/webroot/ بوده اجرا نشده

اینم محتوای index.php :

کد پی‌اچ‌پی:
<?php
/**
 * Index
 *
 * The Front Controller for handling every request
 *
 * PHP 5
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       app.webroot
 * @since         CakePHP(tm) v 0.2.9
 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
 */
/**
 * Use the DS to separate the directories in other defines
 */
    
if (!defined('DS')) {
        
define('DS'DIRECTORY_SEPARATOR);
    }
/**
 * These defines should only be edited if you have cake installed in
 * a directory layout other than the way it is distributed.
 * When using custom settings be sure to use the DS and do not add a trailing DS.
 */

/**
 * The full path to the directory which holds "app", WITHOUT a trailing DS.
 *
 */
    
if (!defined('ROOT')) {
        
define('ROOT'dirname(dirname(dirname(__FILE__))));
    }
/**
 * The actual directory name for the "app".
 *
 */
    
if (!defined('APP_DIR')) {
        
define('APP_DIR'basename(dirname(dirname(__FILE__))));
    }
/**
 * The absolute path to the "cake" directory, WITHOUT a trailing DS.
 *
 */
    
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
        
define('CAKE_CORE_INCLUDE_PATH'ROOT);
    }

/**
 * Editing below this line should NOT be necessary.
 * Change at your own risk.
 *
 */
    
if (!defined('WEBROOT_DIR')) {
        
define('WEBROOT_DIR'basename(dirname(__FILE__)));
    }
    if (!
defined('WWW_ROOT')) {
        
define('WWW_ROOT'dirname(__FILE__) . DS);
    }
    if (!
defined('CORE_PATH')) {
        
define('APP_PATH'ROOT DS APP_DIR DS);
        
define('CORE_PATH'CAKE_CORE_INCLUDE_PATH DS);
    }
    if (!include(
CORE_PATH 'cake' DS 'bootstrap.php')) {
        
trigger_error("CakePHP core could not be found.  Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php.  It should point to the directory containing your " DS "cake core directory and your " DS "vendors root directory."E_USER_ERROR);
    }
    if (isset(
$_GET['url']) && $_GET['url'] === 'favicon.ico') {
        return;
    } else {
        require 
LIBS 'dispatcher.php';
        
$Dispatcher = new Dispatcher();
        
$Dispatcher->dispatch(new CakeRequest(isset($_GET['url']) ? $_GET['url'] : null));
    } 
حالا سئوال :
1. ثابت LIBS کجا مقدار دهی شده ؟
1.چرا با تگ پایانی php (?>) اسکریپت هارو نمیبندن ؟

چند صد تا سئوال دیگه دارم که بعد میپرسم Big Grin
  پاسخ
تشکر شده توسط :
#2
فقط در مورد اینکه چرا ؟> نزاریم بهتر هست( نه توی کیک پی اچ پی و نه توی زند فریم ورک کلا هر جایی ) اگر لازم ندارید نذارید. چرا؟ چون اگر لازم نباشه پس یه چیز اضافست دیگه Smile . اما مهمترین چیز این هست که بعد از این تگ همه چی خروجی هست. مثلا اگر اینتر اضافه بزنی و خروجی تصویر داشته باشی مشکل ساز میشه یا اگر session استارت نشده باشه بعدش بخواد استارت بشه اخطار میده
  پاسخ
تشکر شده توسط : alic molana zoghal payam parvane shgninc
#3
lib اینجا مقدار دهی میشه
کد:
if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php'))
  پاسخ
تشکر شده توسط : payam alic shgninc
#4
خب حالا از استادان خواهش دارم که مقوله Class Abstraction و Object Interfaces رو توضیح بدن و بگه کجا بدرد میخوره ؟ یعنی چرا به چنین چیزی در شی گرایی احتیاج داریم؟
  پاسخ
تشکر شده توسط :
#5
یک جستجوی کوچیک تو بخش شی گرایی به سوالتون میرسید
  پاسخ
تشکر شده توسط :
#6
(۱۳۸۹ اسفند ۰۷, ۱۱:۵۵ ب.ظ)alic نوشته: خب حالا از استادان خواهش دارم که مقوله Class Abstraction و Object Interfaces رو توضیح بدن و بگه کجا بدرد میخوره ؟ یعنی چرا به چنین چیزی در شی گرایی احتیاج داریم؟

البته این بحثها جاش اینجا نیست ولی خوب سر درده دیگهWink
درباره کلاس های abstract اینکه کلاسهایی هستند که اگر متدی را در آنها لا اعلان abstract تعریف نماییم، آن کلاس نیز باید abstract اعلان شود. از این گونه کلاسها به هیچ عنوان نمی توان شئ ای را ایجاد کرد و فقط باید به ارث برده شوند و نکته دیگر اینکه متدی که در این کلاس abstract اعلان شده، در کلاس مشتق حتما باید تعریف شود.
مثل:
کد پی‌اچ‌پی:
<?php
abstract class AbstractClass
{
    
// Force Extending class to define this method
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);

    
// Common method
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}

class 
ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function 
prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}
?>
همچنین برای کسب اطلاعات بیشتر می توانید به اینجا مراجعه کنید.
سالهــــا مـــــى گــــــذرد، حادثه ها مى آید
انتظـــــار فـــــــرج از نیمـــــه خــــــرداد کشم

[عکس: ShowPicture.aspx?ID=52750d12-5d92-4286-9...height=100]
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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