View Full Version : آموزش گام به گام Yii 2 از مبتدی ترین سطح تا حرفه ای ترین سطح
alireza.stack
جمعه 04 مهر 1393, 17:32 عصر
بزودی در این تاپیک آموزشهای Yii2 رو قرار می دم. این فریمورک روزهای پایانی خود را برای پابلیش شدن و ارایه نسخه Stable دارد طی میکند. بسیاری از برنامه نویسان منتظر این رخداد مهم هستند.
از آنجا که yii2 با کامپوزر کار میکنه قصد دارم که نحوه راه اندازی کامپوزر رو یاد بدم و بعد بریم سراغ اسکلت اصلی yii2 و بررسی فایلها و شروع به کد نویسی در قالب yii2. در نهایت سعی میکنم که نحوه نوشتن اکستنشن و ویجت رو با yii 2 یاد بدم.
1- مقدمه ای بر فریمورک Yii2 (http://barnamenevis.org/showthread.php?470529-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%AF%D8%A7%D9%85-%D8%A8%D9%87-%DA%AF%D8%A7%D9%85-Yii-2-%D8%A7%D8%B2-%D9%85%D8%A8%D8%AA%D8%AF%DB%8C-%D8%AA%D8%B1%DB%8C%D9%86-%D8%B3%D8%B7%D8%AD-%D8%AA%D8%A7-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%DB%8C-%D8%AA%D8%B1%DB%8C%D9%86-%D8%B3%D8%B7%D8%AD#post_2109906)
2- نصب Yii2 از طریق کامپوزر و حذف بخش /web/index.php (http://barnamenevis.org/showthread.php?470529-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%AF%D8%A7%D9%85-%D8%A8%D9%87-%DA%AF%D8%A7%D9%85-Yii-2-%D8%A7%D8%B2-%D9%85%D8%A8%D8%AA%D8%AF%DB%8C-%D8%AA%D8%B1%DB%8C%D9%86-%D8%B3%D8%B7%D8%AD-%D8%AA%D8%A7-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%DB%8C-%D8%AA%D8%B1%DB%8C%D9%86-%D8%B3%D8%B7%D8%AD#post_2110558)
3- ساختار فریمورک Yii2 و چرخه حیات درخواست کاربر (http://barnamenevis.org/showthread.php?470529-آموزش-گام-به-گام-Yii-2-از-مبتدی-ترین-سطح-تا-حرفه-ای-ترین-سطح#post_2112835)
4- ساخت action و فایل view و نحوه render کردن تمپلیت ها (http://barnamenevis.org/showthread.php?470529-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%AF%D8%A7%D9%85-%D8%A8%D9%87-%DA%AF%D8%A7%D9%85-Yii-2-%D8%A7%D8%B2-%D9%85%D8%A8%D8%AA%D8%AF%DB%8C-%D8%AA%D8%B1%DB%8C%D9%86-%D8%B3%D8%B7%D8%AD-%D8%AA%D8%A7-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%DB%8C-%D8%AA%D8%B1%DB%8C%D9%86-%D8%B3%D8%B7%D8%AD&p=2115857&viewfull=1#post2115857)
5- کار با فرم ها و نحوه دریافت اطلاعات فرم ها و اعتبار سنجی المانهای ورودی (http://barnamenevis.org/showthread.php?470529-آموزش-گام-به-گام-Yii-2-از-مبتدی-ترین-سطح-تا-حرفه-ای-ترین-سطح/page2#post_2128249)
alireza.stack
شنبه 05 مهر 1393, 18:19 عصر
مقدمه ای بر Yii:
Yii یک فریمورک برنامه نویسی تحت وب عمومی (General) می باشد. عمومی بودن بیشتر به این معنی که همه نوع برنامه تحت وب را می تونید باهاش بنویسید.
Yii بخاطر معماری مبتنی بر کامپوننت و پشتیبانی پیشرفته از کشینگ یک گزینه ایده آل برای توسعه برنامه های مقیاس بزرگ مانند پورتال، فروم و CMS و E-commerce می باشد.
مقایسه سر انگشتی Yii با مابقی فریمورک ها:
مانند بسیاری از فریمورک ها مدل MVC پیاده شده است.
Yii منطقش این است که دنبال سادگی کار است. بطور مثال اگر یک Design Pattern به پیچیدگی کار اضافه می کند خیلی راحت اون مسئله کنار گذاشته می شود و به قول معروف عطایش را به لقایش می بخشند تا سادگی کار حفظ شود.
می شود بطور یقین Yii2 را یک full stack نامید. بسیاری از ویژگی های جدید مثل ActiveRecordها برای بانکهای Relational و NoSQL و پشتیبانی از توسعه Rest API و پشتیبانی از کشینگ چند تایی.
Yii2 فریمورکی نیست که یک نفر توسعه داده باشد. یک تیم Core قوی پشت توسعه این فریمورک قرار دارد و بسیاری از برنامه نویسان حرفه ای که در گیتهاب فعالیت میکنند و کامیتهای خود را روی Yii2 می فرستند.
در حال حاضر Yii دو تا نسخه اصلی دارد یکی همان فریمورک قدیمی است 1.1 و دیگری 2.0
جالب است بدانید Yii نیازمند PHP 5.4.0 و یا بالاتر می باشد. کار با Yii نیازمند دانش شی گرایی می باشد. ;-D
به یمن استفاده از PHP 5.4 در فریمورک از namespace (http://www.php.net/manual/en/language.namespaces.php) بسیار بسیار استفاده شده است. از منطق Trait (http://www.php.net/manual/en/language.oop5.traits.php) هم بکار گرفته شده است.
پس تا درسا شروع نشده برید و شی گرایی رو کامل یا بگیرید وگرنه از قافله عقب می مانید و در این مقالات نمی توانیم به مباحث شی گرایی بپردازیم. ;-(
arash691
شنبه 05 مهر 1393, 19:32 عصر
سلام ...
اگه ممکنه اموزش هر قسمت رو بصورت pdf تو هر تاپیک پیوست کنید بنظرم اینطوری اموزش موثر تر میشه برای خوانندگان ... ( دقیقا" همون کاری که آقای شهرکی برای آموزش PHP انجام دادن )
DR.HTML
شنبه 05 مهر 1393, 19:51 عصر
با تشکر امیدوارم تا انتها ادامه پیدا کنه مباحثتون و به سرنوشت خیلی از اموزشهای سایت دچار نشه
alireza.stack
شنبه 05 مهر 1393, 20:04 عصر
سلام ...
اگه ممکنه اموزش هر قسمت رو بصورت pdf تو هر تاپیک پیوست کنید بنظرم اینطوری اموزش موثر تر میشه برای خوانندگان ... ( دقیقا" همون کاری که آقای شهرکی برای آموزش PHP انجام دادن )
فکر خوبی است در مقالات بعدی تاپیک بصورت قبل نوشته می شود اما در انتهای تاپیک نسخه PDF آن هم پیوست می شود.
kazemimorteza
شنبه 05 مهر 1393, 21:22 عصر
لطفا یک لینک از نظر سنجی تون را در بخش فریم ورک yii قرار بدید.
desatir7316
یک شنبه 06 مهر 1393, 07:57 صبح
سلام، ممنون از تاپيكتون
تاريخ انتشار نسخه نهايي Yii2 دقيقا كي هست
راستي اگه ميشه تاپيك رو به صورتي پيش ببريد كه ارسال اسپم توش كم باشه مثل تشكر و سوال هايي كه براي كاربران پيش مياد، مثلا يه تاپيك جدا براي سوال و جواب ها بزنيد
ديگه ببخشيد كه منم اينجا اسپم فرستادم اما ديدم تاپيك داره به اين سمت مي ره
alireza.stack
یک شنبه 06 مهر 1393, 08:29 صبح
سلام، ممنون از تاپيكتون
تاريخ انتشار نسخه نهايي Yii2 دقيقا كي هست
راستي اگه ميشه تاپيك رو به صورتي پيش ببريد كه ارسال اسپم توش كم باشه مثل تشكر و سوال هايي كه براي كاربران پيش مياد، مثلا يه تاپيك جدا براي سوال و جواب ها بزنيد
ديگه ببخشيد كه منم اينجا اسپم فرستادم اما ديدم تاپيك داره به اين سمت مي ره
مشکلی نداره. چون من لینک هر تاپیکی که میزنم رو تو تاپیک اول اضافه می کنم مثه کاری که الان انجام دادم برای بخش اول و از اون طریق راحت می تونن دوستان دسترسی داشته باشن به سرفصلها. سوال برای همه پیش میاد و بنظر من طبیعی همینجا مطرح شه.
من تو پیج اصلی Yii2 در فیسبوک که دنبال میکردم یکی از Contributor های اصلی Yii گفته بود که فعلا تاریخ دقیقی برای انتشار مشخص نشده است اما نزدیک است! در حال حاضر فقط Yii 2.0 beta انتشار یافته است.
MMSHFE
یک شنبه 06 مهر 1393, 09:34 صبح
تاپیک رو به تالار Yii انتقال دادم.
alireza.stack
یک شنبه 06 مهر 1393, 10:26 صبح
خبر خوب اینکه دو ساعت پیش جناب ژیانگ ژو یه کامیت زده با عنوان:
prepare for next release.
و نسخه به مرحله RC یا همون Release Candidate وارد شد. ;-)
http://www.yiiframework.com/news/80/yii-2-0-rc-is-released (http://www.yiiframework.com/news/80/yii-2-0-rc-is-released/)
desatir7316
یک شنبه 06 مهر 1393, 11:45 صبح
تاپیک رو به تالار Yii انتقال دادم.
چرا Yii ، خوب دوستاني هستند از فريم ورك هايي ديگه استفاده مي كنن و به اين بخش نميان
اينجوري همه راي ها مياد سمت Yii
MMSHFE
یک شنبه 06 مهر 1393, 11:49 صبح
مهم تاپیکه که مرتبط به تالار Yii هست. اگه نظرسنجی درمورد کاربران فریمورکها قراره ایجاد بشه، یک تاپیک جداگانه ایجاد کنید.
under22
یک شنبه 06 مهر 1393, 12:16 عصر
فقط اگه آموزش به صورتی باشه که بعد هر جلسه آموزش PDF اون باشه خیلی خوب همیشه .
اگه مکانش هست آموزش به صورت تیکه های فیلمی هم باشه خوبه
با تشکر از دوستان
alireza.stack
یک شنبه 06 مهر 1393, 20:13 عصر
نصب و راه اندازی فریمورک Yii2:
از آنجا که سیستم فریمورک کلا نسبت به نسخه قبلی تغییر پیدا کرده است، نصب یا بایستی از طریق کامپوزر انجام شود و یا دانلود فایل فشرده و اکسترکت کردن آن در یک پوشه قابل دسترس از طریق وب.
نکته قابل ذکر اینکه چون سیستم خودم لینوکس هست، نصب همه چیز و مسیرها را بر اساس لینوکس به شما میگویم و دوستان عزیز ویندوزی با یک جستجوی کوچک در اینترنت معادل آن را برای خودشان پیدا کنند. ;-)
برای نصب کامپوزر دستور اول را بزنید و با دستور دوم فایل را منتقل کنید به پوشه bin تا از این طریق دستور کامپوزر همیشه در دسترس مان باشد:
curl -s http://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
از اونجا که هنوز نسخه نهایی (stable) انتشار پیدا نکرده است ما نسخه dev رو برای ایجاد پروژه استفاده می کنیم. برای نصب کافی است که با دستور کامپوزر، فرمان ایجاد پروژه Yii2 را بدهیم:
composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic proje
به جز حالت basic برای نصب حالت advance هم داریم که فعلا موضوع بحث ما نیست. توجه داشته باشید که من اسم پروژه رو گذاشتم proje شما هر چیزی که دوست دارید بگذارید. قسمت yii2-app-basic هم به سورس پروژه در packagist اشاره می کند. (packagist جایی است که توسعه دهندگان پروژه های خود را برای کامپوزر اونجا قرار می دهند، بواقع می شود گفت که repo کامپوزر است.)
خب حالا باید صبر پیشه کنید تا کمی حلوا درست کنیم(البته کامپوزر قراره درست کنه!) :-D
نکته: زمانیکه فرمان بالا را برای ایجاد پروژه می زنید باید در پوشه دسترس پذیر وب مانند www و یا htdocs و … باشید.
پس از نصب بسته های مورد نیاز برای تست پروژه برید به مسیر زیر:
http://localhost/ (http://localhost/proje/web/index.php)proje (http://localhost/proje/web/index.php)/web/index.php (http://localhost/proje/web/index.php)
بخش قرمز رو هم اگر در دستور ایجاد پروژه با کامپوزر تغییر ایجاد کردید باید آن نام را وارد کنید. همون طور که در دستور من می بینید من نوشته ام proje به همین خاطر در لینک بالا به مسیر proje رفته ام.
یجوری توضیح دادم که دیگه روتون نشه از این بخش سوال بپرسین. ;-)
خب من پروژه رو که اجرا کردم صفحه زیر رو دیدم (امیدوارم شما هم بدون مشکل ببینید):
123986
کلی تبریک گفته بهتون که خوش اومدین و قدم رنجه فرمودین و به کلبه درویشی و این چیزا. اونایی که با bootstrap کار کرده باشن تو نگاه اول متوجه میشن که ساختار کی با boostrap3 اومده بالا، از اون جایی که ما خیلی حرفه ای هستیم اینو متوجه شدیم (شوخی میکنم حالا کامنت نزارین فلان و فلون که تو خودتو میگیریا!)
جناب ژیانگ ژو یه زحمت دیگه هم کشیدن و برای شما یه فایل درست کردن به اسم requirements تا ببینید yii2 چه چیزایی نیاز داره و شما کدام ها رو نصب کردین برای اینکه نیازمندی ها رو بررسی کنید به لینک زیر بروید:
(http://localhost/proje/requirements.php)
http://localhost/proje/requirements.php (http://localhost/proje/requirements.php)
حواستون هست که لینک نسبت به قبل بخش web رو نداره؟ این یعنی اینکه requirements در ریشه پروژه قرار دارد.
من ی بخشی از اون رو عکس گرفتم براتون گذاشتم، شما هم باید یه تصویری مثه تصویر زیر ببینید:
123987
این رکوردهای سبز پایین یعنی اینکه من خیلی سیستم اوکی دارم و اکثر چیزا روش نصبه از جمله intl برای زبان سایت و mcrypt و امثال آن. شما چطور؟
فکر کنم قبل تر هم گفتم:حتما PHP 5.4 و یا بالاتر رو سیستمتون نصب باشه.
قضیه من با فریمورک ها مثه وضوی قبل از نماز می مونه! اصن راحت نمیشم تا اینکه URL ها رو برای مثال از شکل زیر:
(http://www.beestak.com/basic/web/index.php)
http://www.beestak.com/basic/web/index.php (http://www.beestak.com/basic/web/index.php)
تبدیل کنم به شکل زیر:
http://www.beestak.com (http://www.beestak.com/)
برای تنظیمات آپاچی من کد زیر رو می گذارم تو تنظیمات .htaccess:
# Set document root to be "basic/web"
DocumentRoot "/var/www/proje/basic/web"
<Directory "/var/www/proje/basic/web">
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# ...other settings...
</Directory>
من چون کدهام تو پوشه www هست مسیر اونجا رو تو لینوکس دادم اما شما باید تنظیمات خودتون رو بهش بدید.
میدونم که دقت می کنید که وقتی من DocumentRoot رو در اول خط تنظیم کردم خودش یه حرکت امنیتی به حساب می آید و از دسترسی غارتگران(هکران ارجمند) به پوشه های دیگر جلوگیری می کند. در بخش RewriteRule هم که میگم همه درخواست ها رو بفرست به index.php
از اونجا که من خودم یکی از طرفداران پر و پا قرص nginX هستم کانفیگ این سرور شاخ رو هم براتون می زارم:
server {
charset utf-8;
client_max_body_size 128M;
listen 80; ## listen for ipv4
#listen [::]:80 default_server ipv6only=on; ## listen for ipv6
server_name mysite.local;
root /var/www/proje/basic/web;
index index.php;
access_log /var/log/access.log main;
error_log /var/log/error.log;
location / {
# Redirect everything that isn't a real file to index.php
try_files $uri $uri/ /index.php?$args;
}
# uncomment to avoid processing of calls to non-existing static files by Yii
#location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar) $ {
# try_files $uri =404;
#}
#error_page 404 /404.html;
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
try_files $uri =404;
}
location ~ /\.(ht|svn|git) {
deny all;
}
}
حواستون باشه که تو این فایل هم root رو تغییر بدید به مسیر خودتون برای من روی مسیر سفارشی خودم تنظیم شده. لاگها رو هم دارم میریزم تو access.log و error.log. بگذریم اینجا آموزش nginX نیست!
تا اینجا که مشکل ندارید؟
اگر دارید سریع بپرسید بچه ها کمکتون کنن و جا نمونید من حیفم میاد دوستان وسط ها آموزش رو ول کنن و تو فروم آواره بشن!
123988
desatir7316
یک شنبه 06 مهر 1393, 21:55 عصر
ممنون
یه کم فونت ها رو بزرگ تر کن، چش و جالمون کور شد
MMSHFE
سه شنبه 08 مهر 1393, 10:28 صبح
برای اون دسته از عزیزانی که نمیتونن به هر دلیلی با کامپوزر کار کنن، لینک دانلود فایل فشرده نسخه Advanced و Basic فریمورک رو میگذارم:
https://github.com/yiisoft/yii2/releases/download/2.0.0-rc/yii-advanced-app-2.0.0-rc.tgz
https://github.com/yiisoft/yii2/releases/download/2.0.0-rc/yii-basic-app-2.0.0-rc.tgz
موفق باشید.
under22
سه شنبه 08 مهر 1393, 10:32 صبح
میشه یه توضیحی بدید که این دو نسخه چه فرقی با هم دارند و کدوم نسخه پیشنهاد میشه .
دوم اینکه ساختارش عوض شده تو نسخه 1 داخل پوشه protected همه چیزا بود ولی اینکه کلا عوض شده چند کانفیگ داره همینطور کنترلر و مدل
میشه یه توضیحی راجبه ساختار بدید
MMSHFE
سه شنبه 08 مهر 1393, 10:37 صبح
کم کم استارتر این تاپیک همه چیز رو توضیح میدن. یکم صبور باشین.
Tarragon
چهارشنبه 09 مهر 1393, 16:49 عصر
سلام
آقا چی شد؟!
ما بی صبرانه منتظر هستیم تا ادامه بدید ها...
در ضمن من وقتی کد htaccess رو اضافه می کنم ارور 500 می ده!
به صفحه root در پروژه اضافه می کنم و اینم کد :
DocumentRoot "C:\Program Files\Ampps\www\yii2\web"
<Directory "C:\Program Files\Ampps\www\yii2\web">
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# ...other settings...
</Directory>
alireza.stack
پنج شنبه 10 مهر 1393, 07:38 صبح
سلام
آقا چی شد؟!
ما بی صبرانه منتظر هستیم تا ادامه بدید ها...
در ضمن من وقتی کد htaccess رو اضافه می کنم ارور 500 می ده!
به صفحه root در پروژه اضافه می کنم و اینم کد :
DocumentRoot "C:\Program Files\Ampps\www\yii2\web"
<Directory "C:\Program Files\Ampps\www\yii2\web">
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# ...other settings...
</Directory>
لطفاً صبور باشین. من بیشتر از شما مشتاقم که درباره Yii2 صحبت کنم. معمولاً سعی میکنم هر 3 روز یکبار پست بگذارم. این روزها یکم سرم شلوغه.
و درمورد خطای داخلی شما:
شما باید ماژول rewrite رو توی apache فعال کنید و بعد کد زیر رو توی فایل تنظیمات خودتون بگذارین:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
'rules'=>array(
''=>'site/index',
'<action>'=>'site/<action>',
به سلامت.
Tarragon
پنج شنبه 10 مهر 1393, 13:11 عصر
سلام
فعال هستش.
وقتی کد زیر رو می زارم اررور 500 رو می ده:
<Directory "C:\Program Files\Ampps\www\yii2\web">
</Directory>
لطف می کنید راهنماییم کنید.
اطلاعات team viewer رو هم می تونم بدم.
MMSHFE
پنج شنبه 10 مهر 1393, 13:17 عصر
مسیر وب سرور خودتون رو بدین. شما هم از ampps استفاده میکنید؟
Tarragon
پنج شنبه 10 مهر 1393, 15:04 عصر
سلام
بله من از Ampps استفاده می کنم.
مسیر نصبش که بالا هست. C:\program files\ampps\www\yii2 اینجا با composer نصب شده.
با localhost/yii2/ هم بازش می کنم.
alireza.stack
جمعه 11 مهر 1393, 08:34 صبح
متاسفانه من ویندوز کار نیستم! امیدوارم دوستانی که میدونند مشکل این دوستمون چی هست برطرف کنند.
Error 500 تماما ارتباط به سرور آپاچی داره و ۵۰۰ جزو خطاهای سرور هست. از مجا مطمئن هستید که RewriteRule فعال است؟ آیا پروژه دیگری روی لوکال دارید که از RewriteRule استفاده کنه؟
Tarragon
جمعه 11 مهر 1393, 08:37 صبح
بله
در یه اسکریپت دیگه که روی همین لوکال نصبه از rewrite استفاده کردم.
alireza.stack
جمعه 11 مهر 1393, 11:33 صبح
بعد از نصب Yii حال می رسیم به اجرا برنامه تحت وب خود. اگر مقاله های قبل را با ما دنبال کرده باشید، اسم پروژه را proje گذاشتیم. حال مسیر دسترسی به Yii2 بصورت زیر می شود:
http://localhost/proje/web/index.php (http://hostname/basic/web/index.php)
http://localhost/index.php
اگر پیکربندی را خودتان تنظیم نکرده باشید و حالت پیشفرض باشد با لینک اول به سایت خود وارد می شوید. در این مقاله ما فرض را بر این می گذاریم که شما پیکربندی را به گونه انجام داده اید که proje/web نیاز به نوشته شدن ندارد. یعنی همان لینک دوم مد نظر ما است.
بعد از نصب با کامپوزر، صفحه اصلی سایت از لینک زیر قابل دسترسی است (دوباره تاکیید میکنم که ما فرض میکنیم پیکربندی را انجام داده اید اگر هیچ تغییر ایجاد نکرده اید شما از لینک اول جهت دسترسی استفاده کنید):
صفحه اصلی سایت در آدرس http://localhost/index.php قابل دسترسی است.
صفحه About
صفحه Contact که کاربران سایت می توانند از طریق این فرم به ما ایمیل ارسال کنند.
صفحه Login که فرم ورود را نشان می دهد و برای لاگین کردن استفاده می شود. برای ورود نام کاربری و رمز خود را admin و admin وارد کنید تا وارد سایت شوید. در این حالت لینک Login به Logout تغییر می کند.
نکته: نام کاربری و رمز عبور admin بصورت hardcode شده داخل فریمورک موجود هست و از طریق اون شما می توانید وارد سایت شوید.
ساختار فریمورک Yii2
proje/
composer.json
config/
console.php
web.php
commands/
controllers/
models/
runtime/
vendor/
views/
web/
assets/
index.php
yii
اگر دقت کرده باشید فایل پیکربندی از اسم main.php در نسخه قدیم به web.php تغییر پیدا کرده است. فریمورک Yii2 و تمام افزونه های مورد نیاز آن در پوشه vendor قرار گرفته است. در نسخه قدیم اگر یادتان باشد پوشه فریمورک کلا بیرون از پروژه قرار داشت. اگر افزونه جدیدی هم نصب کنید در همین vendor قرار میگیرد که پوشه کامپوزر هست. مدلها و کنترلرها و viewها همه در روت پوشه قرار دارند. فایل index.php به همراه assets (فایلهای css و js و...) به پوشه web منتقل شده است.
فایل yii برای اجرای فرامین تحت ترمینال مورد استفاده قرار می گیرد. در پوشه console هم فایلهای تحت خط فرمان رو قرار می دهید تا بتوانید پروژه را با دستورات تحت کنسول maintain کنید.
در کل پوشه ها در پروژه ما به دو دسته تقسیم می شوند: یک پوشه که web هست و از طریق وب در دسترس است و کاربران به آن دسترسی دارند و دسته دیگر تمامی پوشه ها به غیر از web هست که از طریق وب غیرقابل دسترس هستند تا امنیت پروژٰه از نظر دسترسی به فایلها برقرار شود.
ساختار فریمورک Yii2 بصورت زیر می باشد:
124279
entry script به همان index.php اشاره می کند که تنها محل ورود درخواست ها به سیستم است. Assetها و widgetها با view در ازتباط هستند تا فایلهای ایستا بارگذاری شوند و ویجت ها مانند ویجت تاریخ و … لود شوند. تمامی درخواست ها در نهایت به application ارسال می شود و این مورد وظیفه انتقال داده های تولید شده را به index.php دارد. Application داخل خود یک سیستم مسیریابی دارد که تشخیص می دهد که درخواست را به کدام کنترلر ارسال کند و چه چیز را فراخوانی کند.
چرخه حیات درخواست کاربر در Yii2:
124280
زمانی که کاربر درخواست خود را ارسال می کند کانفیگ لود می شود و درخواست از طریق index.php به application می رود. در داخل application مسیر تشخیص داده می شود و درخواست به کنترلر مربوطه ارسال می شود. پس از ارسال درخواست به کنترلر فیلترهای موردنظر داخل فایل کنترلر اعمال می شود و در صورتی که نیاز باشد اطلاعات را از مدل مربوطه لود می کند و سپس با فراخوانی view مربوط به کنترلر پاسخ را رندر کرده و به کاربر بر می گرداند.
گیج شدید؟ پیشنهاد میکنم اگر شدید سعی کنید هر جمله رو که می خونید به تصویر نگاه کنید تا بدونید تو کدوم مرحله هستیم. ;-)
Application چیست؟ شی ای است که در index.php ایجاد می شود و تمامی المانها را در داخل خود به مانند یک طومار ذخیره میکند و سپس پاسخ هم توسط همین شی به کاربر برگردانده می شود مسئله ای که در تصویر مشهود نیست!
در مقاله بعدی وارد کدنویسی می شویم. لازم بود تا بدونید که فریمورک جدید سیستم کارش به چه شکلی شده است. :))))))))
124152
desatir7316
جمعه 11 مهر 1393, 12:00 عصر
تشکر
عکس هارو نشون نمی ده :ناراحت:
alireza.stack
جمعه 11 مهر 1393, 13:42 عصر
تشکر
عکس هارو نشون نمی ده :ناراحت:
عکسهای مقاله بدون مشکل برای من لود شدند! در پایین مقاله میتوانید نسخه PDF رو دانلود کنید و از اون طریق تصاویر را هم ببینید.
MMSHFE
شنبه 12 مهر 1393, 08:56 صبح
تاپیک اعلان شد.
MMSHFE
شنبه 12 مهر 1393, 08:56 صبح
تشکر
عکس هارو نشون نمی ده :ناراحت:
چون عکسها ضمیمه شدن، برای مشاهده اونها باید لاگین کرده باشین تو سایت برنامه نویس.
Amir_f
شنبه 12 مهر 1393, 19:00 عصر
این سایت هم توضیحات فارسی مختصری در مورد Yii2 داده http://yii2.swsco.ir/
Amir_f
شنبه 12 مهر 1393, 19:19 عصر
امکان استفاده از yii 2 در محصولاتمون است یا باید فعلا صبر کنیم ؟
desatir7316
شنبه 12 مهر 1393, 19:52 عصر
چون عکسها ضمیمه شدن، برای مشاهده اونها باید لاگین کرده باشین تو سایت برنامه نویس.
هنوز که عکس هارو من نمی بینم، در ضمن من لاگین کردم که می تونم پست بدم
alireza.stack
یک شنبه 13 مهر 1393, 08:05 صبح
امکان استفاده از yii 2 در محصولاتمون است یا باید فعلا صبر کنیم ؟
هر چند هسته فریمورک دیگر کاملا Stable شده است اما هنوز از طرف توسعه دهندگان Yii2 (مخصوصا جناب کیانگ ژو) پیشنهاد شده است که فعلا در نسخه های Production ازش استفاده نکنید.
بطور مثال در حال حاضر یه مشکلی با کامپوزر پیش اومده که برای نصب میره تمام نسخه های یه ماژول (مثه SwiftMailer ) رو دانلود میکنه در صورتی که نباید اینکارو رو بکنه.
خلاصه اینکه 75% مشکلات (Issues) نسخه نهایی برطرف شده است و با تکمیل 25% دیگر نسخه GA منتشر می شود.
MMSHFE
دوشنبه 14 مهر 1393, 10:06 صبح
هنوز که عکس هارو من نمی بینم، در ضمن من لاگین کردم که می تونم پست بدم
احتمالاً مشکل از ISP شماست. چک کنید ببینید با V-P-N میتونید ببینید یا نه؟
desatir7316
دوشنبه 14 مهر 1393, 14:52 عصر
احتمالاً مشکل از ISP شماست. چک کنید ببینید با V-P-N میتونید ببینید یا نه؟
نه نشون نمي ده ولي خوب من pdf رو گرفته بودم گفتم شايد بقيه هم مشكل داشته باشن
اگه مشكل فقط براي منه كه بيخيال
Tarragon
دوشنبه 14 مهر 1393, 15:19 عصر
منم این مشکل رو دارم.
فایل ها برام ارور 404 می دهند.
under22
دوشنبه 14 مهر 1393, 15:19 عصر
برای بنده هم نشون نمیده
alireza.stack
دوشنبه 14 مهر 1393, 15:21 عصر
من عکسارو یکبار دیگه آپلود کردم. دوستانی که مشکل داشتند آیا مشکلشون حل شد و الان عکسارو میتونن ببینن؟؟؟
desatir7316
دوشنبه 14 مهر 1393, 15:34 عصر
من عکسارو یکبار دیگه آپلود کردم. دوستانی که مشکل داشتند آیا مشکلشون حل شد و الان عکسارو میتونن ببینن؟؟؟
رؤيت شد
ممنون
alireza.stack
پنج شنبه 17 مهر 1393, 19:34 عصر
خب بقدر کافی از روند کلی کار گفتیم، امیدوارم دستتون اومده باشه که کلاً فریمورک چهجوری کار میکنه. فهم این روند خیلی میتونه در سرعت بخشیدن به شما در کدنویسی کمک کنه.
یک برنامه ساده امروز قصد داریم طراحی کنیم تا بوسیله آن متن سادهای را در صفحه وب نمایش دهیم. در طول آموزش بخشهایی که با Yii نسخه قدیم فرق داشته باشد را متذکر میشوم.
ایجاد Action:
در این برنامه یه Action درست میکنیم به نام say که پارامتر ورودی با نام message میگیرد و آن را به کاربر نشان می دهد.
یادآوری: action شی است که تحت کنترلر گروه بندی میشود و کاربر میتواند از طریق یک لینک مستقیم آن را فراخوانی کند.
فعلاً چون نمیخواهیم قضیه رو خیلی پیچیده کنیم تا بتوانیم خیلی مقدماتی پیش رفته باشیم کنترلر درست نمیکنیم و از کنترلر پیشفرض که خود Yii2 برای ما درست میکند استفاده میکنیم (SiteController). این کنترلر در پوشه controllers قرار دارد. پیدا کردید؟؟
خب بازش کنید و action رو بصورت زیر ایجاد کنید:
public function actionSay($message = 'Hello')
{
return $this->render('say', ['message' => $message]);
}
نکات:
1- هر action ای رو که تعریف میکنید در کنترلر اولش باید action قرار دهید مثه actionSay
2- پارامتر میتواند مقدار پیشفرض داشته باشد مانند $message
3- پارامتر اول تابع render اسم فایل view هستش که قرار است ایجاد کنیم بدون پسوند php البته.
4- پارامتر دوم تابع render مقادیری است که پاس میدهیم به فایل view تا به آنها دسترسی داشته باشیم. در اینجا ما به متغیر $message دسترسی داریم.
5- اول حرف say بزرگ نوشته می شود.
6- اگر چند کلمه قرار است نام متد شود. آنها را با – از هم جدا میکنیم در نام URL: مثلاً beestak-project این مسیر نگاشت میشود به متد actionBeestakProject یعنی – حذف میشود و اول کلمات بزرگ می شوند.
7- متد render خروجی کامل html پردازش شده را بر میگرداند و متد ما هم آن HTML را بر میگرداند به application و در نهایت داخل application تبدیل میشود به یک response و میرسد به دست کاربر.
ایجاد View
خب ما تو کنترلر say رو برای رندر کردن صدا کردیم. حالا میخواهیم اون say رو درست کنیم. ;-)
داخل این فایل تمام کاری که میخوایم انجام بدیم اینه که $message ارسال شده رو پرینت کنیم.
محتوای فایل say.php به قرار زیر است:
<?php
use yii\helpers\Html;
?>
<?= Html::encode($message) ?>
مسیر ذخیره هم بصورت views/site/say.php است. یعنی باید تو پوشه views در زیرپوشه site قرار بدیم.
نکته۱: علامت = باعث میشه که $message بیرون چاپ شود.
نکته۲: قبل چاپ کردن اطلاعات unsafe آنها رو encode میکنیم.
نکته۳: بسه دیگه چقد نکته میخونی برو سراغ ادامه مطلب!
خب حالا به لینک زیر تو لوکال هاستتون بروید تا خروجی رو ببینید:
http://hostname/index.php?r=site/say&message=Hello+Beestak.com
اگر بخش message رو کلاً پاک کنید مقدار hello بیرون چاپ میشود چون در هنگام تعریف تابع مقدار اولیه hello را دادیم به متغیر ورودی $message
خب با کنترلر و view آشنا شدیم. فهمیدیم که چطور باید پارامتر رو از کنترلر به view پاس بدیم و اون رو بعد از encode چاپش کنیم. خیلی چیزای دیگه مگه نه؟
124388
webnevesht
شنبه 19 مهر 1393, 11:53 صبح
دوستان محبت کنن اسپم یا سوال نزارن که تاپیک منحرف نشه ازموضوع اصلی.پیشنهاد میکنم تاپیک دیگه ای ایجاد کنیم با عنوان : سوالات و مشکلات نصب و راه اندازی Yii2 که هر سوالی راجع به امکانات و نصب و راه اندازی این نسخه داریم اونجا مطرح کنیم.
desatir7316
دوشنبه 21 مهر 1393, 19:51 عصر
میشه یه توضیحی بدید که این دو نسخه چه فرقی با هم دارند و کدوم نسخه پیشنهاد میشه .
دوم اینکه ساختارش عوض شده تو نسخه 1 داخل پوشه protected همه چیزا بود ولی اینکه کلا عوض شده چند کانفیگ داره همینطور کنترلر و مدل
میشه یه توضیحی راجبه ساختار بدید
کم کم استارتر این تاپیک همه چیز رو توضیح میدن. یکم صبور باشین.
فرق این دوتا مشخص نشد؟:متفکر:
desatir7316
دوشنبه 21 مهر 1393, 21:34 عصر
رای تنظیمات آپاچی من کد زیر رو می گذارم تو تنظیمات .htaccess:
# Set document root to be "basic/web"
DocumentRoot "path/to/basic/web"
<Directory "path/to/basic/web">
# use mod_rewrite for pretty URL support
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# ...other settings...
</Directory>
این نتظیمات رو برای هاست های اشتراکی چطوری باید انجام داد؟
توی سایت خودش لینک http://www.yiiframework.com/doc-2.0/guide-tutorial-shared-hosting.html رو گذاشته ولی باز نمی شه و خطای زیر رو میده:
Error
Unable to resolve the request "doc-2.0/guide-tutorial-shared-hosting.html".
alireza.stack
سه شنبه 22 مهر 1393, 07:57 صبح
این نتظیمات رو برای هاست های اشتراکی چطوری باید انجام داد؟
توی سایت خودش لینک http://www.yiiframework.com/doc-2.0/guide-tutorial-shared-hosting.html رو گذاشته ولی باز نمی شه و خطای زیر رو میده:
Error
Unable to resolve the request "doc-2.0/guide-tutorial-shared-hosting.html".
شما بایستی محتوای آنرا در فایل htaccess قرار بدید. این فایل رو باید در ریشه فریمورک قرار بدید.
desatir7316
سه شنبه 22 مهر 1393, 08:14 صبح
شما بایستی محتوای آنرا در فایل htaccess قرار بدید. این فایل رو باید در ریشه فریمورک قرار بدید.
روي هاست اشتراكي دارم مي گم
alireza.stack
سه شنبه 22 مهر 1393, 10:57 صبح
روي هاست اشتراكي دارم مي گم
در هاست اشتراکی به دلیل اینکه شما دسترسی به فایل اصلی آپاچی ندارید می تونید از htaccess استفاده کنید. همانطور که خدمتتون عرض کردم.
desatir7316
چهارشنبه 23 مهر 1393, 19:47 عصر
شما بایستی محتوای آنرا در فایل htaccess قرار بدید. این فایل رو باید در ریشه فریمورک قرار بدید.
توی لوکال آدرس من اینه:
C:\xampp\htdocs\basic
محتویات htaccess. رو که توی فولدر basic باید بذارم رو ممنون می شم بگید
alireza.stack
چهارشنبه 23 مهر 1393, 20:04 عصر
توی لوکال آدرس من اینه:
C:\xampp\htdocs\basic
محتویات htaccess. رو که توی فولدر basic باید بذارم رو ممنون می شم بگید
# use mod_rewrite for pretty URL support
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
desatir7316
پنج شنبه 24 مهر 1393, 17:51 عصر
فرق این دوتا (advance , basic) مشخص نشد؟:متفکر:
مسئولین لطفا؟
ما داریم یه پروژه استارت می زنیم؟ کدوم بهتره واسه چه نوع پروژه ای و چرا؟
alireza.stack
جمعه 25 مهر 1393, 20:23 عصر
advanced برای Team developement طراحی شده است و پروژه های بسیار بزرگ که کلی برنامه نویس روی بخشهای مختلف پروژه کار میکنند. بخشهای پروژه شما در حالت advanced به Front-end و Back-end و Console تقسیم بندی میشود. اگر تعداد تیم شما بیش از ۳ الی ۴ نفر نیست سمت advanced نروید.
desatir7316
جمعه 25 مهر 1393, 20:55 عصر
اگر تعداد تیم شما بیش از ۳ الی ۴ نفر نیست سمت advanced نروید.
اینو جدی می گی؟ فعلا دو نفریم
بریم نریم؟
Tarragon
جمعه 25 مهر 1393, 22:27 عصر
سلام
درست می گند.
زیر 6 نفر اصلا فکر کردن بهadvanced هم نیازی نیست!
زمانی که می خواید یه پروژه خیلی بزرگ مثلا یه موتور جسجتو به بزرگی یاهو (!) رو شروع کنید اون وقته که بهتره از advanced استفاده کنید.
desatir7316
جمعه 25 مهر 1393, 22:32 عصر
سلام
درست می گند.
زیر 6 نفر اصلا فکر کردن بهadvanced هم نیازی نیست!
زمانی که می خواید یه پروژه خیلی بزرگ مثلا یه موتور جسجتو به بزرگی یاهو (!) رو شروع کنید اون وقته که بهتره از advanced استفاده کنید.
این اطلاعات چند نفر رو از کجا میارید
الان پروژه تازه شروع شده، اگه روندش خوب باشه پروژه بزرگی هستش و نیاز پیدا می کنیم افراد رو زیاد تر کنیم، برا همین می خوایم از advanced استفاده کنیم
تو این شرایط هم نمی شه
در ضمن فکر نمی کنم پروژه باید به بزرگی یاهو و ... باشه نه؟
Tarragon
شنبه 26 مهر 1393, 04:33 صبح
چند روز پیش خوندوم یادم نیست کجا اما مطمئنم که گفته برای پروژه های بزرگ از advanced استفاده کنید. خب پروژه شما چیه؟ (مثلا بازی آنلاینه؟! ) بستگی داره به کارتون. advanced رو جوری که من فکر می کنم برای زمانی استفاده می شه که بخواید روی github کار کنید یا اعضای پروژه قرار باشه از چند جای مختلف روی پروژه کار کنند ( شما هم اینجوری هستید؟!) حالا اون یاهو رو که گفتم مثال بود ولی برای پروژه های بزرگ باید استفاده بشه ، نه مثلا برای یک وبلاگ یا یک سایت خبری:چشمک:
و یه سری لینک گذاشتم فکر کنم کمک بکنه :
http://www.yiiframework.com/forum/index.php/topic/58262-i-want-to-use-yii-20-but-confuse-to-choose-templates/page__view__findpost__p__263259
http://www.yiiframework.com/doc-2.0/guide-tutorial-advanced-app.html
desatir7316
شنبه 26 مهر 1393, 07:50 صبح
advanced رو جوری که من فکر می کنم برای زمانی استفاده می شه که بخواید روی github کار کنید یا اعضای پروژه قرار باشه از چند جای مختلف روی پروژه کار کنند ( شما هم اینجوری هستید؟!)
آره
یه سری لینک گذاشتم فکر کنم کمک بکنه :
http://www.yiiframework.com/forum/index.php/topic/58262-i-want-to-use-yii-20-but-confuse-to-choose-templates/page__view__findpost__p__263259
http://www.yiiframework.com/doc-2.0/guide-tutorial-advanced-app.html
(http://www.yiiframework.com/doc-2.0/guide-tutorial-advanced-app.html)
اين لينك ها رو قبلا ديدم ، ممنون
جالبه توي لينك اولي، پست شماره سه يه نفر گفته كه " advanced براي من راحت تره چون خيلي چيزا رو از قبل مثل password recovery و ... خودش آماده كرده... "
لينك دوم هم كه آره گفته براي پروژه هاي بزرگ، ما مطمئنا پرژمون در ابتدا كه خيلي بزرگ نيست ولي در آينده حتما اينجوري ميشه، براي همين مي خوام بدونم از الان با توجه به آينده نگريش advanced رو انتخاب كنيم يا نه چون فعلا اول راهه بايد از basic استفاده كنيم؟
Tarragon
شنبه 26 مهر 1393, 09:38 صبح
پس اگر اینجوریه بهتره که با advanced شروع کنید.
desatir7316
شنبه 26 مهر 1393, 18:55 عصر
توی لوکال آدرس من اینه:
C:\xampp\htdocs\basic
محتویات htaccess. رو که توی فولدر basic باید بذارم رو ممنون می شم بگید
دوستان کسی نبود این فایل رو بذاره؟
ممنون می شم
Amir_f
سه شنبه 13 آبان 1393, 11:21 صبح
بابت مطالب مفیدتون ممنون ، آموزش رو ادامه نمیدید ؟
alireza.stack
چهارشنبه 14 آبان 1393, 08:42 صبح
کار با فرمها
در این بخش یاد میگیریم که چگونه صفحه جدیدی ایجاد کنیم تا اطلاعات کاربران را طریق فرمها دریافت کنیم. دو المان ورودی نام و ایمیل بر روی صفحه قرار میدهیم و پس از دریافت اطلاعات از کاربر آنها را نمایش می دهیم.
حال ما نیاز به یک مدل در کنار action و view خود خواهیم داشت.
ایجاد مدل
اسم مدل ما EntryForm میباشد و در مسیر models/EnteryForm.php ذخیره شده است.
<?php
namespace app\models;
use yii\base\Model;
class EntryForm extends Model {
public $name;
public $email;
public function rules() {
return [ [['name', 'email'], 'required'], ['email', 'email'], ];
} }
دو عضو سراسری کلاس، name و email هستند. این کلاس یک تابع rules هم دارد که دادههای ما را اعتبار سنجی می کند.
اعتبارسنجی های ما در کلاس بالا عنوان شده است به قرار زیر است:
۱- هر دوی name و email وارد کردنشان اجباری است.
۲- email باید از نوع email باشد.
زمانی که دادهها را از کاربر دریافت میکنید تابع validate را فراخوانی کنید تا این قوانین بررسی شوند و مقادیر فرمها اعتبار سنجی شوند. در این مرحله بطور مثال اگر کاربر بجای ایمیل، آدرس وبسایت وارد کرد خطا نشان دهد.
<?php
$model = new EntryForm();
$model->name = 'Beestak';
$model->email = 'beestak@gmail.com';
if ($model->validate()) {
// Good!
} else {
// Failure! // Use $model->getErrors()
}
نحوه ایجاد action قبلتر توضیح داده شد. حال برای ایجاد action بصورت زیر عمل میکنیم:
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\models\EntryForm;
class SiteController extends Controller {
// ...existing code...
public function actionEntry() {
$model = new EntryForm;
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// valid data received in $model // do something meaningful here about $model ...
return $this->render('entry-confirm', ['model' => $model]);
} else {
// either the page is initially displayed or there is some validation error
return $this->render('entry', ['model' => $model]);
} } }
در شرط اول بررسی میشود که اگر دادهها توسط کاربر post شده است و دادهها معتبر هستند آنگاه صفحه confirm مربوطه را نشان بده در غیر اینصورت فرم قبل را دوباره به همراه خطاها به کاربر نشان بده.
نکته: دقت کنید که متد post زیر مجموعه شی request می باشد.
ایجاد View ها
حال دو فایل view با نامهای entry-confirm و entry درست کنید. فایل confirm در مسیر views/site/entry-confirm.php ذخیره میشود.
<?php
use yii\helpers\Html;
?> <p>You have entered the following information:</p>
<ul> <li><label>Name</label>: <?= Html::encode($model->name) ?></li>
<li><label>Email</label>: <?= Html::encode($model->email) ?></li> </ul>
و فایل entry در مسیر views/site/entry.php بصورت زیر است:
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm; ?>
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'email') ?>
<div class="form-group">
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div> <?php ActiveForm::end(); ?>
ما در اینجا از ویجت قدرتمند activeForm استفاده کرده ایم. متدهای begin و end موجب ایجاد تگهای باز و بسته می شوند. آلمان های ورودی هم با متد field ایجاد می شوند.
برای قرار دادن دکمه ثبت اطلاعات از Helper پیشفرض فریمورک به نام Html استفاده کرده ایم.
تست خروجی کار
از آنجا که اسم متد خود را entry گذاشتیم و آن را در کنترلر site قرار دادیم برای فراخوانی میتوانیم بشکل زیر عمل کنیم:
http://localhost/site/entry
نکته: کسانی که پستهای قبلی را نخواندهاند برایشان متذکر میشویم که ما قبلاً rewrite rule را فعال کردهایم و نمایش index.php را خاموش کرده ایم. در صورتی که اینکار ها را انجام نداده باشید خطا دریافت میکنید.
125314
پس از دریافت داده ها فرم به صورت زیر نشان داده می شود:
125315
ویجت yii یکی از قدرتهای دیگرش این است که داده های اعتبارسنجی شما را به کدهای سمت کلاینت بصورت جاوا اسکریپت تبدیل میکند و خطا را قبل از اینکه به سمت سرور ارسال شود به کاربر نشان میدهد.
برای سفارشی سازی برچسب ها بصورت زیر میتوانید از label استفاده کنید. متدها در yii اصطلاحا chainable هستند و زنجیروار میتوانند نشان داده شوند. با این تسهیلات فراهم شده توسط yii فرم های بسیار پیچیده را می توان به راحتی در این فریمورک قدرتمند ایجاد کرد.
** توجه ** یکی از دوستان لطفا رحمت بکشه و فایل pdf رو تولید کنه. مرسی :)))))
mr.nice
یک شنبه 25 آبان 1393, 21:39 عصر
سلام
آقا چی شد؟!
ما بی صبرانه منتظر هستیم تا ادامه بدید ها...
در ضمن من وقتی کد htaccess رو اضافه می کنم ارور 500 می ده!
به صفحه root در پروژه اضافه می کنم و اینم کد :
DocumentRoot "C:\Program Files\Ampps\www\yii2\web"
<Directory "C:\Program Files\Ampps\www\yii2\web">
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# ...other settings...
</Directory>
اگه مشکلتون حل شده میشه بگید چجوری حل کردید من الان این مشکل رو دارم
alireza.stack
دوشنبه 26 آبان 1393, 07:55 صبح
اگه مشکلتون حل شده میشه بگید چجوری حل کردید من الان این مشکل رو دارم
دوستان عزیز خطای ۵۰۰ به سرور (در اینجا آپاچی) بر میگرده...
فایل htaccess شما درست است. از اینجا میشود نتیجه گیری کرد که ماژول rewrite_rule شما فعال نیست. باید ابتدا ماژول رو فعال کنید تا بتونید از اون استفاده کنید.
alireza.stack
دوشنبه 26 آبان 1393, 08:20 صبح
کار با بانکهای اطلاعاتی
در این بخش توضیح میدهیم که چگونه صفحه جدیدی برای نمایش دادههای کشورهای استخراج شده از جدول بانک اطلاعاتی به نام country درست کنیم.
برای رسیدن به این مهم، ابتدا باید اتصال بانک اطلاعاتی خود را ایجاد کنیم، یک کلاس Active Record درست کنیم، یک action تعریف کنیم و یک view ایجاد کنیم.
خب برای شروع کار جدول country رو درست میکنیم. جستار SQL آن بصورت زیر است:
CREATE
TABLE `country` ( `code`
CHAR(2) NOT NULL PRIMARY KEY, `name`
CHAR(52) NOT NULL, `population`
INT(11) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT
CHARSET=utf8;
INSERT INTO `country`
VALUES ('AU','Australia',18886000); INSERT INTO `country`
VALUES ('BR','Brazil',170115000); INSERT INTO `country`
VALUES ('CA','Canada',1147000); INSERT INTO `country`
VALUES ('CN','China',1277558000); INSERT INTO `country`
VALUES ('DE','Germany',82164700); INSERT INTO `country`
VALUES ('FR','France',59225700); INSERT INTO `country`
VALUES ('GB','United Kingdom',59623400); INSERT INTO `country`
VALUES ('IN','India',1013662000); INSERT INTO `country`
VALUES ('RU','Russia',146934000); INSERT
INTO `country` VALUES ('US','United States',278357000);
نکته: اسم بانک اطلاعاتی خود را yii2basic بگذارید و داخل آن جدول country بالا را ایجاد کنید.
پیکربندی اتصال بانک اطلاعاتی
قبل از اینکه به ادامه بحث بروید مطمئن شوید که pdo extension برای PHP را نصب کردهاید (برای mysql بایستی pdo_mysql رو نصب کنید.)
بر خلاف فریمورک قبلی yii در این نسخه اطلاعات بانک اطلاعاتی در فایل جدیدی در مسیر config/db.php قرار دارد. این فایل را باز کنید و اطلاعات آن را به مانند زیر قرار دهید:
<?php return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2basic',
'username' => 'root',
'password' => '',
'charset' => 'utf8', ];
برای دسترسی به این اتصال در yii2 ما از دستور Yii::$app->db استفاده میکنیم. این پیکربندی در فایل پیکربندی اصلی در مسیر config/web.php وارد می شود.
ایجاد Active Record
برای نمایش و استخراج دادههای جدول country یک کلاس Active Record با نام Country درست کنید و آن را در مسیر models/Country.php ذخیره کنید.
<?php namespace app\models; use yii\db\ActiveRecord; class Country extends ActiveRecord { }
برای نمونه کد میتوانید به کدهای زیر نگاهی بیندازید، در اینجا ما از کلاس Country برای تغییر اطلاعات و خواندن اطلاعات استفاده میکنیم:
use app\models\Country;
// get all rows from the country table and order them by "name"
$countries = Country::find()->orderBy('name')->all();
// get the row whose primary key is "US"
$country = Country::findOne('US');
// displays "United States" echo $country->name;
// modifies the country name to be "U.S.A." and save it to database
$country->name = 'U.S.A.';
$country->save();
تمامی این متدها (مانند save) در کلاس والد ActiveRecord قرار دارد.
ایجاد Action
حال بجای استفاده از کنترلر site مانند مثالهای قبلی از کنترلر جدید استفاده میکنیم. کنترلر جدید خود را با نام CountryController ذخیره کنید و یک action با نام index در آن تعریف کنید.
<?php namespace app\controllers;
use yii\web\Controller;
use yii\data\Pagination;
use app\models\Country;
class CountryController extends Controller {
public function actionIndex() {
$query = Country::find();
$pagination = new Pagination([
'defaultPageSize' => 5,
'totalCount' => $query->count(),
]); $countries = $query->orderBy('name')
->offset($pagination->offset)
->limit($pagination->limit)
->all();
return $this->render('index', [
'countries' => $countries,
'pagination' => $pagination,
]);
} }
نکته: فایل کنترلر رو در مسیر controllers/CountryController.php ذخیره کنید.
ایجاد view
فایل view را در مسیر views/country/index.php ذخیره کنید. دقت کنید که نام پوشه همنام controller است (country).
<?php use yii\helpers\Html;
use yii\widgets\LinkPager; ?>
<h1>Countries</h1>
<ul> <?php foreach ($countries as $country): ?>
<li> <?= Html::encode("{$country->name} ({$country->code})") ?>:
<?= $country->population ?>
</li>
<?php endforeach; ?>
</ul>
<?= LinkPager::widget(['pagination' => $pagination]) ?>
نکته: در انتهای صفحه یک ویجت استفاده کردیم برای صفحه بندی (LinkPager).
برای تست بروید به مسیر http://localhost/country/index
خروجی که بایستی مشاهده کنید به قرار زیر است:
125787
mr.nice
سه شنبه 27 آبان 1393, 12:03 عصر
دوستان عزیز خطای ۵۰۰ به سرور (در اینجا آپاچی) بر میگرده...
فایل htaccess شما درست است. از اینجا میشود نتیجه گیری کرد که ماژول rewrite_rule شما فعال نیست. باید ابتدا ماژول رو فعال کنید تا بتونید از اون استفاده کنید.
من فایل htaccess رو ساختم و تو مسیر basic/web قرار دادم
# Set document root to be "basic/web"
DocumentRoot "c:/xampp/htdocs/basic/web"
<Directory "c:/xampp/htdocs/basic/web">
# use mod_rewrite for pretty URL support
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# ...other settings...
</Directory>
rewrite rule رو هم توی مسیر basic/config/web.php به فایل اضافه کردم
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules'=>array(
''=>'site/index',
'<action>'=>'site/<action>'
)
]
حالا وقتی میرم به آدرس http://localhost/site/entry ارور 404 و توی آدرس http://localhost/basic/web/site/entry ارور 500 رو میده
توی آپاچی هم داخل فایل httpd.conf همه AllowOverride ها رو All قرار دادم و LoadModule rewrite_module modules/mod_rewrite.so رو آنکامنت کردم
alireza.stack
چهارشنبه 28 آبان 1393, 11:10 صبح
من فایل htaccess رو ساختم و تو مسیر basic/web قرار دادم
# Set document root to be "basic/web"
DocumentRoot "c:/xampp/htdocs/basic/web"
<Directory "c:/xampp/htdocs/basic/web">
# use mod_rewrite for pretty URL support
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# ...other settings...
</Directory>
rewrite rule رو هم توی مسیر basic/config/web.php به فایل اضافه کردم
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules'=>array(
''=>'site/index',
'<action>'=>'site/<action>'
)
]
حالا وقتی میرم به آدرس http://localhost/site/entry ارور 404 و توی آدرس http://localhost/basic/web/site/entry ارور 500 رو میده
توی آپاچی هم داخل فایل httpd.conf همه AllowOverride ها رو All قرار دادم و LoadModule rewrite_module modules/mod_rewrite.so رو آنکامنت کردم
خطای ۴۰۴ بخاطر این هست که شما متدی به نام actionEntry در داخل کنترلر site ندارید.
خطای ۵۰۰ به این خاطر هست که شما داخل htaccess گفتین که هر چی web درخواست میره بفرست به index.php این یعنی اینکه شما لازم نیست web رو در داخل مسیر فایل بیاورید.
googoli
چهارشنبه 26 آذر 1393, 22:55 عصر
سلام
من تازه yii2 رو نصب کردم ولی با خطای زیر مواجه شد مشکل من از کجاست ؟
126671
MMSHFE
شنبه 11 بهمن 1393, 00:44 صبح
برای سؤالات غیر مرتبط با موضوع تاپیک اصلی، تاپیک جداگانه ایجاد کنید.
kab00k
سه شنبه 19 اسفند 1393, 10:08 صبح
سلام
دوستان من تازه دارم yii رو یاد میگیرم . قبلا تجربه با فرم ورک نداشتم. بصورت سنتی برنامنویسی میکردم :D
الان چند تا مشکل دارم با این YII2 :
1 وقتی از gii استفاده میکنم برای ساخت مدل مشکلی نداره اما view رو نمیسازه . یعنی میزنه ساخته شد اما اصلا پوشش رو نمیسازه ! و باید دستی بسازم !
2 - من با اضافه کردم language به تنظیمات و تنظیم fa و بوت استارپ راست به چپ میخواستم سیستم فارسی کنم ! الان در قسمتی contact وقتی name رو وارد نکنم خطای زیر رو میده
Name نمیتواند خالی باشد.
با استفاده از <?= $form->field($model, 'name')->label('نام') ?> عنوان فیلد هم به نام تغیر پیدا کرد اما باز همون ارور رو میده ؟ راه حل چیه ؟
یه راه حل برای استفاده از تاریخ شمی هم بدید ! هم datepiker کار کنه و هم بتونم بصورت کامل تاریخ مدیریت کنم ( من عادت دارم تاریخ رو بصورت time تو دیتابیس ذخیره کنم و اونو تبدیل به تاریخ کنم . چون ممکنه به یه تاریخ هم شمسی و هم میلادی نیاز داشته باشم ) از intl برای تبدیل تاریخ استفاده میکردم الان توی yii2 چجوری از این استفاده کنم ؟
MMSHFE
چهارشنبه 20 اسفند 1393, 08:12 صبح
دوست عزیز، پستی که دقیقاً قبل از شما گذاشته شده رو بخونید!
mostafa_shoakry
پنج شنبه 28 اسفند 1393, 17:38 عصر
این htaccess رو چجوری تو xampp مسیر دهی می کنم ؟:ناراحت:
هر کاری می کنم یا خطا میده یا اینکه url رو به شکل http://localhost/proje (http://localhost/index.php) در نمیاره :گریه:
alocheh
یک شنبه 16 فروردین 1394, 15:44 عصر
سلام
وقت شما بخیر
ممنون از زحماتی که میکشید
متاسفانه با تموم آموزش هایی که در سایت های دیگه بوده و همچنین آموزش کامل و جامع شما هنوز موفق به راه اندازی فریم وورک Yii نشده ام
دلیل هم در اینه که در تمام آموزش ها حرف از فولدری به نام framework هست که داخل فایل دانلودی فریم وورک هستش
اما من در فریم وورک yii نسخه 2 ب بالایی که دانلود میکنم نمیتونم این فولدر رو پیدا کنم و کلا کلافه شدم
لطفا راهنمایی کنید
آدرس ایمیلمو میزارم که لطف کنید و پاسخ رو ارسال کنید
mhsn.shja@yahoo.com
MMSHFE
سه شنبه 18 فروردین 1394, 09:37 صبح
دوست عزیز، اون آموزشهایی که فولدر framework دارن مربوط به نسخه 1.1 هستن. توی نسخه 2 فریمورک داخل خود پروژه قرار گرفته. نسخه 1.1 رو دانلود کنید یا طبق آموزشهای نسخه 2 عمل کنید.
saeed-71
یک شنبه 23 فروردین 1394, 11:25 صبح
تو ساخت say من دقیقا طبق داکیومنت yii2 پیش رفتم اما اخرش 404 داد!
یه نکته دیگه که وجود داره تو ادرس دهی url به جای / میاد % قرار میده!
yii2dev
جمعه 19 تیر 1394, 03:06 صبح
آموزشها چرا ادامه پیدا نمیکنه؟
bahane13
جمعه 09 مرداد 1394, 03:19 صبح
این آموزش ها خیلی خوبه چرا ادامه نمیدین ؟
اگه میشه همه رو در قالب pdf جمع آوری کنید
alireza.stack
شنبه 10 مرداد 1394, 07:51 صبح
این آموزش ها خیلی خوبه چرا ادامه نمیدین ؟
اگه میشه همه رو در قالب pdf جمع آوری کنید
سلام دوستان تمام تلاشم رو میکنم تا بتونم ادامه مباحث رو بگم... مدتیه خیلی سرم شلوغ شده از همه عذر میخوام.
z_b624
دوشنبه 16 شهریور 1394, 21:48 عصر
سلام آموزش هاتون خیلی خوبه لطفا با سرعت بیشتری ادامه بدید
یاسمن زهرا
شنبه 07 دی 1398, 14:43 عصر
سلام.من یه فرم برای پروفایل ساختم . میخوام فرمی طراحی کنم که موبایل و پسورد رو از همون جدول بگیره و با همون ها ورود یا همون لاگین رو انجام بده باید چه کار کنم ؟ ممنون میشم راهنمایی کنید .و اگه ممکنه به ایمیلم ارسال کنید . یا وقت پاسخ دادن اطلاع بدید که چک کنم .kaveh70308@gmail.com
یاسمن زهرا
شنبه 07 دی 1398, 14:45 عصر
ایمیلم kaveh7038@gmail.com هست .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.