azowghi
جمعه 03 مرداد 1393, 00:04 صبح
سلام به همه رفقا و پیروان حقیقی مکتب متن باز (open source)
چرا چرخ رو دوباره اختراع کنیم .. reinvent the wheel
http://en.wikipedia.org/wiki/Reinventing_the_wheel
همیشه برام این مساله وجود داشت که کدها چطور میتونه از لحاظ سرعت و استاندارد و همچنین غنی بودن از هر لحاظ یک کد کامل باشه.
برای این کار باید بتونیم از کتابخانه ها و کلاس های سیستم های قدرتمند دیگه در کدمون استفاده کنیم.
کامپوزر نام ابزاری است که بوسیله اون میتونید کلاس های نوشته شده برای فریمورک ها و سیستم های مختلف رو توی سیستم خودتون به کار بگیرین. نکته ای که این میان هست اینه که وقتی یه همچین کاری بخواد انجام بشه ممکنه اون کلاسی که میخواین استفاده کنید یک سری وابستگی هایی داشته باشه . بدین معنا که ممکنه از کلاس یا کلاس های دیگری در این کلاس استفاده شده باشه و مجبور باشین یکی یکی اون ها رو هم به پروژه اتون اضافه کنید.
کامپوزر میاد تمام وابستگی های هر کلاس رو هم باهاش دانلود میکنه و به پروژه اتون اضافه میکنه .
وقتی کلاس مورد نظر رو دانلود کردین فقط کافیه توی پروژه یه خط کد اضافه کنید تا تمام کلاس ها بطور خودکار در صفحه یا صفحه ای مختلفی از پروژه اتون اضافه بشه.
بسم ا..
راه حل این کار رو در آموزش زیر ببینید:
https://getcomposer.org
این ابزار رو دانلود کنید. بدین شکل:
curl -sS https://getcomposer.org/installer | php
وقتی اینو بزنید یه فایل دانلود میشه بنام composer.phar ، برای اینکه بطور سراسری بتونید ازش توی کامند استفاده کنید باید تغییر نامش بدین به composer و انتقالش بدین به پوشه زیر:
/usr/local/bin
خب حالا میتونید از کامپوزر استفاده کنید..
من دستورات کامند رو برای استفاده از پکیج finder متعلق به فریمورک سیمفونی رو مینویسم فکر کنم گویاست ، اگر سوالی بود در خدمتم:
ali:~$ cd /opt/lampp/htdocs/mycms
ali:/opt/lampp/htdocs/mycms$ sudo composer init
اینجا ازتون میخواد که یک اسم انتخاب کنید برای دانلود پکیج ها مثلا میتونم بگم هرچی میگیری رو برام در آدرس source/symfony کپی کن اگر هیچی ننویسین خودش بطور پیشفرض میاد یه فولدر بنام vendor میسازه توی فولدر mycms و اونجا پکیج ها رو میریزه. من هیچی نمینویسم تا پیشفرض سیستم انجام بشه.
Package name (<vendor>/<name>) [ali/mycms]:
Description []:
Author:
Minimum Stability []:
License []:
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? yes
Search for a package []: finder
Found 15 packages matching finder
[0] symfony/finder
[1] nette/finder
[2] sebastian/finder-facade
[3] mindy/finder
[4] webignition/website-sitemap-finder
[5] dflydev/symfony-finder-factory
[6] shrink/finder-facade
[7] webignition/website-rss-feed-finder
[8] webignition/html-document-link-finder
[9] jflight/nearby-uk-postcode-finder
[10] hoa/file
[11] dalanhurst/abbreviation-finder-plugin
[12] ymc/symfony-component-factory-bundle
[13] ehough/finder
[14] johnshopkins/environment-finder
Enter package # to add, or the complete package name if it is not listed []: 0
Enter the version constraint to require []: @stable
Search for a package []:
Would you like to define your dev dependencies (require-dev) interactively [yes]?
Search for a package []:
{
"name": "ali/mycms",
"require": {
"symfony/finder": "@stable"
}
}
Do you confirm generation [yes]? yes
خب مراحل فوق رو که انجام دادین باید دستور زیر رو اجرا کنید تا پکیج یا پکیج هایی رو که درخواست کردین دانلود بشه:
ali:~$ sudo composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing symfony/finder (v2.5.2)
Loading from cache
Writing lock file
Generating autoload files
اگر دانلود پکیج موفقیت آمیز بود پیغام بالا رو مشاهده میکنید.
نکته: یک نکته در دستور زیر:
Enter the version constraint to require []: @stable
اینجا از ما ورژن پکیج مورد نظر رو میخواد که ما بهش میگیم آخرین ورژن پایدار رو بهمون بده . ورژن دیگه ای رو خواستین میتونید برین توی سایت
https://packagist.org/
و توی اونجا سرچ کنید و ورژن مورد نظر رو پیدا کنید ( مثلا : v2.5.2 )
حالا برای بکارگیری این پکیج در پروژه اتون کافیه بصورت زیر عمل کنید:
// /opt/lampp/htdocs/mycms/test.php
<?php
require_once 'vendor/autoload.php';
$finder = new \Symfony\Component\Finder\Finder();
$finder->files()->in(__DIR__);
foreach ($finder as $file) {
// Print the absolute path
print $file->getRealpath()."<br>";
// Print the relative path to the file, omitting the filename
print $file->getRelativePath()."<br>";
// Print the relative path to the file
print $file->getRelativePathname()."<br>";
}
?>
نکته : بهتره برای هر کلاس یک vendor بسازین تا با اتولود (autoload) کردن یک منبع تمام کلاس های غیر وابسته ی دیگه در جایی که ممکنه نیاز نباشه لود نشه بدین شکل:
/opt/lampp/htdocs/mycms/lib/finder
که گفتم توی کامند ازتون نام فولدر منبع رو میخواد :
Package name (<vendor>/<name>) [ali/mycms]: lib/finder
در پناه خدا
چرا چرخ رو دوباره اختراع کنیم .. reinvent the wheel
http://en.wikipedia.org/wiki/Reinventing_the_wheel
همیشه برام این مساله وجود داشت که کدها چطور میتونه از لحاظ سرعت و استاندارد و همچنین غنی بودن از هر لحاظ یک کد کامل باشه.
برای این کار باید بتونیم از کتابخانه ها و کلاس های سیستم های قدرتمند دیگه در کدمون استفاده کنیم.
کامپوزر نام ابزاری است که بوسیله اون میتونید کلاس های نوشته شده برای فریمورک ها و سیستم های مختلف رو توی سیستم خودتون به کار بگیرین. نکته ای که این میان هست اینه که وقتی یه همچین کاری بخواد انجام بشه ممکنه اون کلاسی که میخواین استفاده کنید یک سری وابستگی هایی داشته باشه . بدین معنا که ممکنه از کلاس یا کلاس های دیگری در این کلاس استفاده شده باشه و مجبور باشین یکی یکی اون ها رو هم به پروژه اتون اضافه کنید.
کامپوزر میاد تمام وابستگی های هر کلاس رو هم باهاش دانلود میکنه و به پروژه اتون اضافه میکنه .
وقتی کلاس مورد نظر رو دانلود کردین فقط کافیه توی پروژه یه خط کد اضافه کنید تا تمام کلاس ها بطور خودکار در صفحه یا صفحه ای مختلفی از پروژه اتون اضافه بشه.
بسم ا..
راه حل این کار رو در آموزش زیر ببینید:
https://getcomposer.org
این ابزار رو دانلود کنید. بدین شکل:
curl -sS https://getcomposer.org/installer | php
وقتی اینو بزنید یه فایل دانلود میشه بنام composer.phar ، برای اینکه بطور سراسری بتونید ازش توی کامند استفاده کنید باید تغییر نامش بدین به composer و انتقالش بدین به پوشه زیر:
/usr/local/bin
خب حالا میتونید از کامپوزر استفاده کنید..
من دستورات کامند رو برای استفاده از پکیج finder متعلق به فریمورک سیمفونی رو مینویسم فکر کنم گویاست ، اگر سوالی بود در خدمتم:
ali:~$ cd /opt/lampp/htdocs/mycms
ali:/opt/lampp/htdocs/mycms$ sudo composer init
اینجا ازتون میخواد که یک اسم انتخاب کنید برای دانلود پکیج ها مثلا میتونم بگم هرچی میگیری رو برام در آدرس source/symfony کپی کن اگر هیچی ننویسین خودش بطور پیشفرض میاد یه فولدر بنام vendor میسازه توی فولدر mycms و اونجا پکیج ها رو میریزه. من هیچی نمینویسم تا پیشفرض سیستم انجام بشه.
Package name (<vendor>/<name>) [ali/mycms]:
Description []:
Author:
Minimum Stability []:
License []:
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? yes
Search for a package []: finder
Found 15 packages matching finder
[0] symfony/finder
[1] nette/finder
[2] sebastian/finder-facade
[3] mindy/finder
[4] webignition/website-sitemap-finder
[5] dflydev/symfony-finder-factory
[6] shrink/finder-facade
[7] webignition/website-rss-feed-finder
[8] webignition/html-document-link-finder
[9] jflight/nearby-uk-postcode-finder
[10] hoa/file
[11] dalanhurst/abbreviation-finder-plugin
[12] ymc/symfony-component-factory-bundle
[13] ehough/finder
[14] johnshopkins/environment-finder
Enter package # to add, or the complete package name if it is not listed []: 0
Enter the version constraint to require []: @stable
Search for a package []:
Would you like to define your dev dependencies (require-dev) interactively [yes]?
Search for a package []:
{
"name": "ali/mycms",
"require": {
"symfony/finder": "@stable"
}
}
Do you confirm generation [yes]? yes
خب مراحل فوق رو که انجام دادین باید دستور زیر رو اجرا کنید تا پکیج یا پکیج هایی رو که درخواست کردین دانلود بشه:
ali:~$ sudo composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing symfony/finder (v2.5.2)
Loading from cache
Writing lock file
Generating autoload files
اگر دانلود پکیج موفقیت آمیز بود پیغام بالا رو مشاهده میکنید.
نکته: یک نکته در دستور زیر:
Enter the version constraint to require []: @stable
اینجا از ما ورژن پکیج مورد نظر رو میخواد که ما بهش میگیم آخرین ورژن پایدار رو بهمون بده . ورژن دیگه ای رو خواستین میتونید برین توی سایت
https://packagist.org/
و توی اونجا سرچ کنید و ورژن مورد نظر رو پیدا کنید ( مثلا : v2.5.2 )
حالا برای بکارگیری این پکیج در پروژه اتون کافیه بصورت زیر عمل کنید:
// /opt/lampp/htdocs/mycms/test.php
<?php
require_once 'vendor/autoload.php';
$finder = new \Symfony\Component\Finder\Finder();
$finder->files()->in(__DIR__);
foreach ($finder as $file) {
// Print the absolute path
print $file->getRealpath()."<br>";
// Print the relative path to the file, omitting the filename
print $file->getRelativePath()."<br>";
// Print the relative path to the file
print $file->getRelativePathname()."<br>";
}
?>
نکته : بهتره برای هر کلاس یک vendor بسازین تا با اتولود (autoload) کردن یک منبع تمام کلاس های غیر وابسته ی دیگه در جایی که ممکنه نیاز نباشه لود نشه بدین شکل:
/opt/lampp/htdocs/mycms/lib/finder
که گفتم توی کامند ازتون نام فولدر منبع رو میخواد :
Package name (<vendor>/<name>) [ali/mycms]: lib/finder
در پناه خدا