امکان استفاده از yii 2 در محصولاتمون است یا باید فعلا صبر کنیم ؟
امکان استفاده از yii 2 در محصولاتمون است یا باید فعلا صبر کنیم ؟
هر چند هسته فریمورک دیگر کاملا Stable شده است اما هنوز از طرف توسعه دهندگان Yii2 (مخصوصا جناب کیانگ ژو) پیشنهاد شده است که فعلا در نسخه های Production ازش استفاده نکنید.
بطور مثال در حال حاضر یه مشکلی با کامپوزر پیش اومده که برای نصب میره تمام نسخه های یه ماژول (مثه SwiftMailer ) رو دانلود میکنه در صورتی که نباید اینکارو رو بکنه.
خلاصه اینکه 75% مشکلات (Issues) نسخه نهایی برطرف شده است و با تکمیل 25% دیگر نسخه GA منتشر می شود.
منم این مشکل رو دارم.
فایل ها برام ارور 404 می دهند.
برای بنده هم نشون نمیده
من عکسارو یکبار دیگه آپلود کردم. دوستانی که مشکل داشتند آیا مشکلشون حل شد و الان عکسارو میتونن ببینن؟؟؟
خب بقدر کافی از روند کلی کار گفتیم، امیدوارم دستتون اومده باشه که کلاً فریمورک چهجوری کار میکنه. فهم این روند خیلی میتونه در سرعت بخشیدن به شما در کدنویسی کمک کنه.
یک برنامه ساده امروز قصد داریم طراحی کنیم تا بوسیله آن متن سادهای را در صفحه وب نمایش دهیم. در طول آموزش بخشهایی که با 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 میکنیم.
نکته۳: بسه دیگه چقد نکته میخونی برو سراغ ادامه مطلب!
خب حالا به لینک زیر تو لوکال هاستتون بروید تا خروجی رو ببینید:
اگر بخش message رو کلاً پاک کنید مقدار hello بیرون چاپ میشود چون در هنگام تعریف تابع مقدار اولیه hello را دادیم به متغیر ورودی $messageکد HTML:http://hostname/index.php?r=site/say&message=Hello+Beestak.com
خب با کنترلر و view آشنا شدیم. فهمیدیم که چطور باید پارامتر رو از کنترلر به view پاس بدیم و اون رو بعد از encode چاپش کنیم. خیلی چیزای دیگه مگه نه؟
آخرین ویرایش به وسیله alireza.stack : شنبه 19 مهر 1393 در 16:03 عصر
این htaccess رو چجوری تو xampp مسیر دهی می کنم ؟
هر کاری می کنم یا خطا میده یا اینکه url رو به شکل http://localhost/proje در نمیاره![]()
دوستان محبت کنن اسپم یا سوال نزارن که تاپیک منحرف نشه ازموضوع اصلی.پیشنهاد میکنم تاپیک دیگه ای ایجاد کنیم با عنوان : سوالات و مشکلات نصب و راه اندازی Yii2 که هر سوالی راجع به امکانات و نصب و راه اندازی این نسخه داریم اونجا مطرح کنیم.
این نتظیمات رو برای هاست های اشتراکی چطوری باید انجام داد؟رای تنظیمات آپاچی من کد زیر رو می گذارم تو تنظیمات .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/...d-hosting.html رو گذاشته ولی باز نمی شه و خطای زیر رو میده:
Error
Unable to resolve the request "doc-2.0/guide-tutorial-shared-hosting.html".
advanced برای Team developement طراحی شده است و پروژه های بسیار بزرگ که کلی برنامه نویس روی بخشهای مختلف پروژه کار میکنند. بخشهای پروژه شما در حالت advanced به Front-end و Back-end و Console تقسیم بندی میشود. اگر تعداد تیم شما بیش از ۳ الی ۴ نفر نیست سمت advanced نروید.
اینو جدی می گی؟ فعلا دو نفریماگر تعداد تیم شما بیش از ۳ الی ۴ نفر نیست سمت advanced نروید.
بریم نریم؟
سلام
درست می گند.
زیر 6 نفر اصلا فکر کردن بهadvanced هم نیازی نیست!
زمانی که می خواید یه پروژه خیلی بزرگ مثلا یه موتور جسجتو به بزرگی یاهو (!) رو شروع کنید اون وقته که بهتره از advanced استفاده کنید.
چند روز پیش خوندوم یادم نیست کجا اما مطمئنم که گفته برای پروژه های بزرگ از advanced استفاده کنید. خب پروژه شما چیه؟ (مثلا بازی آنلاینه؟! ) بستگی داره به کارتون. advanced رو جوری که من فکر می کنم برای زمانی استفاده می شه که بخواید روی github کار کنید یا اعضای پروژه قرار باشه از چند جای مختلف روی پروژه کار کنند ( شما هم اینجوری هستید؟!) حالا اون یاهو رو که گفتم مثال بود ولی برای پروژه های بزرگ باید استفاده بشه ، نه مثلا برای یک وبلاگ یا یک سایت خبری
و یه سری لینک گذاشتم فکر کنم کمک بکنه :
http://www.yiiframework.com/forum/in...ost__p__263259
http://www.yiiframework.com/doc-2.0/...anced-app.html
آره
اين لينك ها رو قبلا ديدم ، ممنون
جالبه توي لينك اولي، پست شماره سه يه نفر گفته كه " advanced براي من راحت تره چون خيلي چيزا رو از قبل مثل password recovery و ... خودش آماده كرده... "
لينك دوم هم كه آره گفته براي پروژه هاي بزرگ، ما مطمئنا پرژمون در ابتدا كه خيلي بزرگ نيست ولي در آينده حتما اينجوري ميشه، براي همين مي خوام بدونم از الان با توجه به آينده نگريش advanced رو انتخاب كنيم يا نه چون فعلا اول راهه بايد از basic استفاده كنيم؟
آخرین ویرایش به وسیله desatir7316 : شنبه 26 مهر 1393 در 08:27 صبح
پس اگر اینجوریه بهتره که با advanced شروع کنید.
بابت مطالب مفیدتون ممنون ، آموزش رو ادامه نمیدید ؟
کار با فرمهادر این بخش یاد میگیریم که چگونه صفحه جدیدی ایجاد کنیم تا اطلاعات کاربران را طریق فرمها دریافت کنیم. دو المان ورودی نام و ایمیل بر روی صفحه قرار میدهیم و پس از دریافت اطلاعات از کاربر آنها را نمایش می دهیم.حال ما نیاز به یک مدل در کنار 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 قرار دادیم برای فراخوانی میتوانیم بشکل زیر عمل کنیم:
نکته: کسانی که پستهای قبلی را نخواندهاند برایشان متذکر میشویم که ما قبلاً rewrite rule را فعال کردهایم و نمایش index.php را خاموش کرده ایم. در صورتی که اینکار ها را انجام نداده باشید خطا دریافت میکنید.
start-form-validation.png
پس از دریافت داده ها فرم به صورت زیر نشان داده می شود:
start-entry-confirmation.png
ویجت yii یکی از قدرتهای دیگرش این است که داده های اعتبارسنجی شما را به کدهای سمت کلاینت بصورت جاوا اسکریپت تبدیل میکند و خطا را قبل از اینکه به سمت سرور ارسال شود به کاربر نشان میدهد.
برای سفارشی سازی برچسب ها بصورت زیر میتوانید از label استفاده کنید. متدها در yii اصطلاحا chainable هستند و زنجیروار میتوانند نشان داده شوند. با این تسهیلات فراهم شده توسط yii فرم های بسیار پیچیده را می توان به راحتی در این فریمورک قدرتمند ایجاد کرد.
** توجه ** یکی از دوستان لطفا رحمت بکشه و فایل pdf رو تولید کنه. مرسی :)))))
کار با بانکهای اطلاعاتی
در این بخش توضیح میدهیم که چگونه صفحه جدیدی برای نمایش دادههای کشورهای استخراج شده از جدول بانک اطلاعاتی به نام 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
سلام
من تازه yii2 رو نصب کردم ولی با خطای زیر مواجه شد مشکل من از کجاست ؟
yii2.jpg
برای سؤالات غیر مرتبط با موضوع تاپیک اصلی، تاپیک جداگانه ایجاد کنید.
سلام
دوستان من تازه دارم yii رو یاد میگیرم . قبلا تجربه با فرم ورک نداشتم. بصورت سنتی برنامنویسی میکردم :D
الان چند تا مشکل دارم با این YII2 :
1 وقتی از gii استفاده میکنم برای ساخت مدل مشکلی نداره اما view رو نمیسازه . یعنی میزنه ساخته شد اما اصلا پوشش رو نمیسازه ! و باید دستی بسازم !
2 - من با اضافه کردم language به تنظیمات و تنظیم fa و بوت استارپ راست به چپ میخواستم سیستم فارسی کنم ! الان در قسمتی contact وقتی name رو وارد نکنم خطای زیر رو میده
Name نمیتواند خالی باشد.
با استفاده از <?= $form->field($model, 'name')->label('نام') ?> عنوان فیلد هم به نام تغیر پیدا کرد اما باز همون ارور رو میده ؟ راه حل چیه ؟
یه راه حل برای استفاده از تاریخ شمی هم بدید ! هم datepiker کار کنه و هم بتونم بصورت کامل تاریخ مدیریت کنم ( من عادت دارم تاریخ رو بصورت time تو دیتابیس ذخیره کنم و اونو تبدیل به تاریخ کنم . چون ممکنه به یه تاریخ هم شمسی و هم میلادی نیاز داشته باشم ) از intl برای تبدیل تاریخ استفاده میکردم الان توی yii2 چجوری از این استفاده کنم ؟
آخرین ویرایش به وسیله kab00k : سه شنبه 19 اسفند 1393 در 16:08 عصر
دوست عزیز، پستی که دقیقاً قبل از شما گذاشته شده رو بخونید!
آخرین ویرایش به وسیله MMSHFE : دوشنبه 03 فروردین 1394 در 19:28 عصر
سلام
وقت شما بخیر
ممنون از زحماتی که میکشید
متاسفانه با تموم آموزش هایی که در سایت های دیگه بوده و همچنین آموزش کامل و جامع شما هنوز موفق به راه اندازی فریم وورک Yii نشده ام
دلیل هم در اینه که در تمام آموزش ها حرف از فولدری به نام framework هست که داخل فایل دانلودی فریم وورک هستش
اما من در فریم وورک yii نسخه 2 ب بالایی که دانلود میکنم نمیتونم این فولدر رو پیدا کنم و کلا کلافه شدم
لطفا راهنمایی کنید
آدرس ایمیلمو میزارم که لطف کنید و پاسخ رو ارسال کنید
mhsn.shja@yahoo.com
دوست عزیز، اون آموزشهایی که فولدر framework دارن مربوط به نسخه 1.1 هستن. توی نسخه 2 فریمورک داخل خود پروژه قرار گرفته. نسخه 1.1 رو دانلود کنید یا طبق آموزشهای نسخه 2 عمل کنید.
تو ساخت say من دقیقا طبق داکیومنت yii2 پیش رفتم اما اخرش 404 داد!
یه نکته دیگه که وجود داره تو ادرس دهی url به جای / میاد % قرار میده!
آموزشها چرا ادامه پیدا نمیکنه؟
این آموزش ها خیلی خوبه چرا ادامه نمیدین ؟
اگه میشه همه رو در قالب pdf جمع آوری کنید
سلام آموزش هاتون خیلی خوبه لطفا با سرعت بیشتری ادامه بدید
ایمیلم kaveh7038@gmail.com هست .
سلام.من یه فرم برای پروفایل ساختم . میخوام فرمی طراحی کنم که موبایل و پسورد رو از همون جدول بگیره و با همون ها ورود یا همون لاگین رو انجام بده باید چه کار کنم ؟ ممنون میشم راهنمایی کنید .و اگه ممکنه به ایمیلم ارسال کنید . یا وقت پاسخ دادن اطلاع بدید که چک کنم .kaveh70308@gmail.com