• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
راه اندازی یک پروژه با zend
#1
سلام
باید خدمتتون بگم برای درک بهتر زند رفتم سراغ oop و تا حدودی بصورت تئوری یه چیزایی حالیم شد. در کل با قوانین شی گرایی آشنا شدم ولی پروژه ای می خواهم با mvc شروع کنم که ساختار دایرکتوری اون رو بصورت زیر در نظر گرفتم:
[عکس: Capture.GIF]

الان مشکل من با mvc و زند چند مساله است و اگه بتونم این موارد رو درک کنم مطئمنا بسیاری از مشکلاتم حل خواهد شد.

1. bootstrap.php به چه درد می خورد ؟
2. فرض کنید می خواهم فایل پیکربندی را با کد زیر فراخوانی می کنم. چرا در همه جای پروژه مثلا در فایل های controllers در دسترس نیست و حتی با global هم نمی توان آنها را بصورت سراسری تعریف کرد.
کد پی‌اچ‌پی:
        $config = new Zend_Config_Ini(APPLICATION_PATH.'/configs/application.ini','production'); 

3. با ترجمه ها و تم نیز همین مشکلات رو دارم:
کد پی‌اچ‌پی:
        //cache started
        
$frontendOptions = array ('lifetime' => $config->cache->lifetime// cache lifetime of 2 hours
                                  
'automatic_serialization' => $config->cache->automatic_serialization );
        
        
$backendOptions = array ('cache_dir' => $config->cache->cache_dir );// Directory where to put the cache files

        
        
$cache Zend_Cache::factory 'Core''File'$frontendOptions$backendOptions );
        
        
// Create a log instance
        
$writer = new Zend_Log_Writer_Stream(ROOT_PATH.'/log/file.log');
        
$log    = new Zend_Log($writer);
        
        
        
//translation
        
        //Zend_Translate::setCache ( $cache );
        
$translate = new Zend_Translate 'Ini'APPLICATION_PATH '/languages/en/global.ini''en');

        
$translate->addTranslation(APPLICATION_PATH '/languages/fa/global.ini''fa');
        
$translate->setLocale('fa');     
        
        if (isset(
$config->app->theme)) {
            
$theme $config->app->theme;
        }
        
$path PUBLIC_PATH.'/themes/'.$theme.'/templates';
         
        
$layout Zend_Layout::startMvc()
            ->
setLayout('layout')
            ->
setLayoutPath($path)
            ->
setContentKey('content');

        
$view = new Zend_View();
        
$view->setBasePath($path);
        
$view->setScriptPath(ROOT_PATH); 

3. برای مثال می خواهم پلاگینی بنویسم که بتوانم در هر جای برنامه استفاده کنم
مثلا: پلاگین ارائه آمار سایت که این پلاگین در یکی از باکس های تم سایت خروجی خود را نمایش خواهد داد. Huh
این پلاگین ها در پوشه پلاگین قرار می گیرند.
برای مثالی که زدم نحوه ی پلاگین نویسی را بیان کنید. (فقط پیکربندی فایل ها و فراخوانی پلاگین)
چطوری این پلاگین ها را بتوانم در پروژه read کنم. یعنی فعال یا غیرفعال بودن پلاگینی را زند از طریق یک فایل تنظیم ini بخواند
آیا زند امکانات خاصی در این باره دارد؟

و یکسری مشکلات که در صورت بروز مطرح می کنم.

Huh من اطلاعات بسیار کمی در مورد mvc و زند دارم ، خواهش می کنم به جای پاسخ به سوالات منو به آموزش مطلب دیگر یا تحقیق در این مورد ارجاع ندهید. چون آنقدر تحقیق کردم که به جایی نرسیدم.
اگر بصورت ساده تر راهنماییم کنید بسیار سپاس گذار خواهم شد. تنها امیدم شما هستید
HuhHuhHuhHuhHuhHuhHuh
ذکات علم آموختن آن به دیگران است (حضرت محمد ص)
  پاسخ
تشکر شده توسط : molana hidensoft
#2
برای آشنایی با زند یه چند ماهی بسته به داشتن تجربه قبلی تو php به زمان احتیاج داری.
تو خود سایت zf و چندین و چند سایت دیگه هم هستن که خودآموز های خوبی همراه با نمونه کد دارن که بهتره شما با اونا و مفاهیم کلی mvc آشنا بشین بعد برین سراغ پروژه های شخصی اینچنینی.
اینم آدرس منابع
http://robertbasic.com/blog/online-resou...framework/

نقل قول:من اطلاعات بسیار کمی در مورد mvc و زند دارم ، خواهش می کنم به جای پاسخ به سوالات منو به آموزش مطلب دیگر یا تحقیق در این مورد ارجاع ندهید. چون آنقدر تحقیق کردم که به جایی نرسیدم.
اگر بصورت ساده تر راهنماییم کنید بسیار سپاس گذار خواهم شد. تنها امیدم شما هستید
همونطور که خودتون گفتین فهمیدن مفاهیم مهمترین مساله هست و تا با مفاهیم آشنا نشین هیچ قدمی نمیتونین بر دارین.
بهترین راه تمرین گام به گام هست. یعنی پروژه های کتاب ها یا خودآموزها رو قدم به قدم جلو برین تا با قضیه آشنا بشین.
ضمنا میخوام بدونم منظورتون از "چون آنقدر تحقیق کردم" چقدر هست؟
  پاسخ
تشکر شده توسط : molana hidensoft
#3
تحقیقات زیادی توی سایت ها انگلیسی همچون سایت خود زند انجام دادم و البته برای پیاده سازی بستری برای زند تا حدودی جلو رفتم و مراحل بسیار ابتدایی را پشت سر گذاشتم ولی این گونه مستندات پیچیدگی های خاص خودش رو داره و برای استارتر زند کمی مبهم و دیوانه کننده است.
ضمنا استاد گرامی وحید سهرابلو هم آموزش زند فریم ورک را در بخش آموزش سایت گذاشته اند ولی متاسانه در مرحله مقدماتی است و آپدیت نمی شه. من بیش از 2 هفته است منتظر بروزرسانی هستم. اگر نیازی به donate هست اعلام کنید.
  پاسخ
تشکر شده توسط : molana
#4
شما میتونین یه crud ساده رو پیاده سازی کنین؟(میخوام بدونم در چه حد یاد گرفتین؟)
این سایت هم خیلی خوبه به من که خیلی کمک کرده:
http://www.zendcasts.com/
  پاسخ
تشکر شده توسط : molana nasserghiasi
#5
سلام‌ دوست عزیز
دلیل اینکه من آموزش ها رو دنبال نکردم این بوده که کسی پیگیر آموزشها نبوده.
باید کسی باشه که سوال بپرسه و آموزش بخواد تا آموزش داده بشه
وگرنه من آموزشهای خودم رو در صورت علاقه دوستان ادامه خواهم داد

و اما سوالاتتون
۱- فایل bootsratp در‌ واقع یک کلاس در داخلش هست که همه متدهایی که با _init شروع‌ میشن وقتی که برنامه اجرا میشه همه رو اجرا میکنه. همون راه انداز سیستم هست.
۲- بهتره از Zend_Registery برای‌ global کردن‌ متغیرها استفاده کنید
۳- یه مثال ‌از یه‌ پلاگین ‌به‌ این صورت هست
کد:
class MyPlugin extends Zend_Controller_Plugin_Abstract
{
    public function routeStartup(Zend_Controller_Request_Abstract $request)
    {
        $this->getResponse()
             ->appendBody("<p>routeStartup() called</p>\n");
    }

    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        $this->getResponse()
             ->appendBody("<p>routeShutdown() called</p>\n");
    }

    public function dispatchLoopStartup(
        Zend_Controller_Request_Abstract $request)
    {
        $this->getResponse()
             ->appendBody("<p>dispatchLoopStartup() called</p>\n");
    }

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $this->getResponse()
             ->appendBody("<p>preDispatch() called</p>\n");
    }

    public function postDispatch(Zend_Controller_Request_Abstract $request)
    {
        $this->getResponse()
             ->appendBody("<p>postDispatch() called</p>\n");
    }

    public function dispatchLoopShutdown()
    {
        $this->getResponse()
             ->appendBody("<p>dispatchLoopShutdown() called</p>\n");
    }
}

متدهای‌ خاصش توی حالت های خاصی اجرا میشه مثلا preDispatch قبل از اینکه یه action اجرا بشه
حالا شما باید این پلاگین رو رجیستر کنین
برای اینکار دو حالت داره یکی داخل کد php که‌ باید به این صورت عمل کننی
کد پی‌اچ‌پی:
$front Zend_Controller_Front::getInstance();
$front->registerPlugin(new MyPlugin()); 

یا‌ اینکه اگر از Zend_Aplication استفاده می کنین و bootsratp دارین‌ داخل فایل aplication.ini بزارید
کد:
resources.frontController.plugins.foo = "MyPlugin"
  پاسخ
تشکر شده توسط : oia nasserghiasi parvane hidensoft amir.s
#6
چیزی که من همیشه درگیرش بودم multi application بوده. یادمه کد ایگنیتر این امکان رو نداشت و من مجبور شدم توی پروژه ایران پروفایل این قابلیت رو بهش اضافه کنم. روی زند هم من فقط تست کردم که این قابلیت بصورت دیفالت وجود داره که نداشت و چیزی ندیدم.
اگه این امکان وجود داره خوشحال می شم که توضیح بدید.
  پاسخ
تشکر شده توسط :
#7
منظورت از مولتی اپلیکیشن چی هست؟
ما توی این مولتی ماژول داریم (با توجه به صحبتهایی که باهات کردم واژه ها ممکنه توی فریم ورکها متفاوت باشه) به این صورت هست ک ما داخل سیستم به صورت پیش فرض ماژول default رو‌ داریم. من‌ توضیحاتی در مورد این موضوع نمیدم چون راهنمای زند به خوبی این موضوع رو توضیح داده. البته اگر باز هم مشکلی داشتید می تونم راهنمایی کنم
http://framework.zend.com/manual/en/zend...dular.html
  پاسخ
تشکر شده توسط :
#8
همین بود. ممنون
  پاسخ
تشکر شده توسط :
#9
متاسفانه زند مولتی تردینگ نداره ( چند نخی )
متاسفانه زند ایونت هندلر نداره (Event Handler)
متاسفانه زند دلیگیشن نداره (Delegation)
متاسفانه زند مموری منیجمنت نداره
----------------------------------
اگه اینایی که گفتمو داره من بی اطلاعم
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :
#10
یک سوال دارم. مگه قراره یک کتابخونه اینها رو پشتیبانی کنه؟ (منظورم قسمت اول هست)

در مورد سوال اول با یکی از بچه های C# خیلی‌ روی این موضوع بحث کردیم. اصلا توی وب استفاده از مولتی ترد خوب نیست. fork ‌ها خیلی بهتر جواب میدن.
در‌ مورد سوال دوم بهتره به زند پیشنهاد بدید. (ولی به شخصه واسه خود من ضروری نیست. در ضمن باید حتما یه کتابخونه نصب کنم)
در مورد سومی نمی دونم چیه Big Grin توضیح بدید
در مورد چهارمی
http://framework.zend.com/manual/en/zend.memory.html
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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