صفرتا صد پروژه فریم ورک لاراول laravel
در این پست از سایتgoyii قصد ایجاد فهرست کامل برای ایجاد پروژه به صورت قدم به قدم را دارم تا دوستان برای شروع بتوانند به صورت منظم و بخش به بخش مراحل را تا پیاده سازی کامل طی کنند.
- دانلود آخرین ورژن فریم ورک (نصب به وسیله کامپوزر)
- تعیین حالت پروژه(برای پروژه های advance)
- نام پروژه
- تنظیمات سرور iis or apache
- تنظیمات دیتابیس (اتصال پروژه به دیتابیس)
- ایجاد جدول user به وسیله migration
- فعال سازی RBAC (سطوح دسترسی)
- استفاده از ماژول gii برای ایجاد مدل، کنترلر ، ویو (model, view,controller)
checkAccess in Yii2 RBAC برای بررسی میزان دسترسی کاربر جاری به یک نقش (RoleName) یا یک مجوز (Permission) از دستور زیر استفاده می کردیم: [php] Yii::$app->user->can("admin") [/php] در صورتی که بخواهیم میزان دسترسی یک کاربر مشخص به یک نقش یا مجوز خاص را بررسی کنیم از دستور checkaccess استفاده می کنیم شکل کلی این دستور به این صورت می باشد: [php] Yii::$app->authManager->checkAccess($userid, 'roleOrPermission') [/php] خروجی این کد در صورتی که کاربر دسترسی داشته باشد true یا۱ می باشد. امادر صورت عدم دسترسی مقداری بازگردانده نمیشود
دستورات artisan در laravel
آشنایی با دستورات artisan در فریم ورک laravel :
+تولید کلید تصادفی:
[php] php artisan key:generate [/php] پس از اجرا فایل .env در رووت پروژه ایجاد می شود (این فایل را در file explorer باز کنید)
+ دریافت ورژن (نسخه) لاراول
[php] php artisan --version [/php]
+ایجاد model
[php] php artisan make:model Article [/php] پس از اجرا در فولدر app مدل ایجاد می شود : Article.php
+ایجاد controller
[php] php artisan make:controller ArticleController [/php] پس از اجرا در فولدر controller که در فولدر http قرار دارد فایل ArticleController.php ایجاد می شود . فولدر http در فولدر app قرار دارد.
+ ایجاد کنترلر با resource
[php] php artisan make:controller PhotoController --resource [/php]
+ ایجاد کنترلر با resource , model
[php] php artisan make:controller PhotoController --resource --model=Photo [/php]
+فعال سازی authentication
[php] php artisan make:auth [/php]
+ اجرای migration برای ایجاد جداول در دیتابیس
[php] php artisan migrate [/php]
دستورات artisan در laravel
نمایش دیتا در لاراول
نمایش اطلاعات و داده ها در لاراول
جهت نمایش داده ها در فایل های blade از طریق ارسال دیتا از کنترلر به ویو در اینجا توضیح دادیم شما در route نیز می توانید داده را به ویو ارسال نمایید : در route [php] Route::get('greeting', function () { return view('/article/index', ['name' => 'golaravel.ir']); }); [/php] و در ویو [php] salam , {{ $name }}. [/php]
کامپوننت ها و اسلات ها در لاراول تقریبا شبیه به section ها و layout ها هستند . در مستندات فریم ورک گفته شده که این مفاهیم راحت تر قابل فهم هست. برای مثال : برای هشدار به کاربر یا همان alert ها , به جای اینکه هر دفعه کد تکراری بنویسیم آن را به صورت یک component در ویو ایجاد می کنیم و در جای مد نظر آن را صدا میزنیم محل تعریف این کامپوننت ها در فولدر views قرار می گیرد (resources->views) برای مثال من در این فولدر یکفایل php با نام alert.blade.php ایجاد می کنم: [php]
[/php] در کد بالا ما دو متغییر ایجاد کردیم یک: status که در صورتی که ما مقدار این متغییر را زمان استفاده مشخص نکنیم به صورت پیش فرض متن "success" قرار می گیرد دو: slot که در واقع متغییر پیشفرض component می باشد . حال این کامپوننت را در یکی از ویوها (article/index) صدا میزنیم [php]
@component('alert',[ 'status'=>'danger' ]) توجه! خطایی پیش آمده است! @endcomponent [/php] در کد بالا به وسیله ی دستور component و نام alert ما کامپوننت را صدا زدیم با status مقدار متغییر را مشخص کردیم و محتوایی که بین component و endcomponent قرار دارد مقدار slot ما می باشد توجه داشته باشید که مانند status نمیتوانید slot را صدا بزنید . مگر اینکه از متغییر دیگری استفاده کرده باشید. مثال [php]
{{ $footer }}
[/php] [php] @component('alert',[ 'status'=>'danger', 'footer'=>'goyii.ir - golaravel.ir' ]) توجه! خطایی پیش آمده است! @endcomponent [/php] [caption id="attachment_2459" align="aligncenter" width="300"] goyii.ir-laravel blade[/caption]
<h3><a href="http://www.goyii.ir">RBAC لیست کاربرانی دارای نقش خاص در YII2</a></h3>
در بسیاری از مواقع در پروژه شما نیاز به لیست کاربرانی که دارای یک نقش مشخص هستند دارید.
به عنوان مثال می خواهید لیست کاربرانی که به عنوان مدیر در سایت شما فعالیت می کنند را پیدا کنید:
<a href="http://www.goyii.ir/%d8%b3%d8%b7%d8%ad-%d8%af%d8%b3%d8%aa%d8%b1%d8%b3%db%8c-rbac-%d8%af%d8%b1-yii2-%d9%82%d8%b3%d9%85%d8%aa-%d8%a7%d9%88%d9%84/">rbac </a>دارای متدی است که امکان نمایش id کاربرانی که دارای یک نقش هستند را به شما می دهد :
[php]
getUserIdsByRole($roleName)
[/php]
پس از آن کافی است شما با یک حلقه کاربران مورد نیاز خود را پیدا کنید:
به کد زیر توجه کنید:
[php]
$users = [];
$list = Yii::$app->authManager->getUserIdsByRole("amin");
foreach ($list as $value) {
$u = User::findOne($value);
$users[$value] = $u->username;
}
return $users;
[/php]
در فریم ورک yii2 نسخه advanced به صورت پیش فرض مدل user وجود دارد
که در فولدر common و در قسمت models قرار داده شده است.
زمانی که شما پروژه ای را اجرا می کنید (نسخه advance ) امکاناتی نظیر لاگین , لاگ اوت ، ثبت نام و فراموشی رمز عبور به صورت پیش فرض در frontend و در siteController وجود دارد
table user در دیتابیس مرتبط با امکانات بالا در فولدر migration واقع در فولدر console قرار دارد که به شرح زیر می باشد :
db->driverName === 'mysql') {
// http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
}
$this->createTable('{{%user}}', [
'id' => $this->primaryKey(),
'username' => $this->string()->notNull()->unique(),
'auth_key' => $this->string(32)->notNull(),
'password_hash' => $this->string()->notNull(),
'password_reset_token' => $this->string()->unique(),
'email' => $this->string()->notNull()->unique(),
'status' => $this->smallInteger()->notNull()->defaultValue(10),
'created_at' => $this->integer()->notNull(),
'updated_at' => $this->integer()->notNull(),
], $tableOptions);
}
public function down()
{
$this->dropTable('{{%user}}');
}
}
توجه : در رابطه با migration ها در اینجا توضیح داده شده است .
در صورتی که نیاز به تغییر اطلاعات بالا داشتید می توانید آن را تغییر دهید .
برای اجرای کد بالا و پیاده سازی در دیتابیس (ایجاد جدول user) باید در cmd خود کد زیر را اجرا نمایید :
yii migrate --migrationTable=migrations
در این مطلب از سایت goyii.ir نحوه ی اتصال پروژه به دیتابیس را آموزش می دهیم:
برای اتصال پروژه به دیتابیس با توجه به نوع پروژه basic یا advanced به روش زیر عمل می کنیم
برای پروژه های basic
در مسیر :
اطلاعات دیتابیس خود را در فایب db.php وارد نمایید
در پروژه های advanded
مسیر:
اطلاعات دیتابیس خود را در فایبmain-local.php وارد نمایید
در این مطلب از سایت goyii.ir نحوه ی اتصال پروژه به دیتابیس را آموزش می دهیم:
برای اتصال پروژه به دیتابیس با توجه به نوع پروژه basic یا advanced به روش زیر عمل می کنیم
برای پروژه های basic
در مسیر :
root/config/db.php
اطلاعات دیتابیس خود را در فایب db.php وارد نمایید
return [
\'class\' => \'yii\\db\\Connection\',
\'dsn\' => \'mysql:host=localhost;dbname=tebshahr\',
\'username\' => \'root\',
\'password\' => \'123456789\',
\'charset\' => \'utf8\',
];
در پروژه های advanded
مسیر:
root/common/config/main-local.php
اطلاعات دیتابیس خود را در فایبmain-local.php وارد نمایید
return [
\'components\' => [
\'db\' => [
\'class\' => \'yii\\db\\Connection\',
\'dsn\' => \'mysql:host=localhost;dbname=bge\',
\'username\' => \'root\',
\'password\' => \'123456789\',
\'charset\' => \'utf8\',
],
\'mailer\' => [
\'class\' => \'yii\\swiftmailer\\Mailer\',
\'viewPath\' => \'@common/mail\',
// send all mails to a file by default. You have to set
// \'useFileTransport\' to false and configure a transport
// for the mailer to send real emails.
\'useFileTransport\' => true,
],
],
];
فریم ورک Yii با استفاده از request امکان دسترسی به پارامتر های ارسالی را برای برنامه نویسان فراهم کرده .
با استفاده از این قابلیت شما می توانید به پارامترهای ارسالی کاربر نظیر post – get , … دسترسی داشته باشین.
یکی از مهمترین آنها ip کاربر می باشد :
برای دریافت ip کاربر به روش زیر عمل می کنیم
ممکنه که شما در پروژه ی خودتون نیاز به نسخه فریم ورک Yii2 داشته باشید.
برای دریافت ورژن به دو روش می توانیم عمل کنیم»
استفاده از command line
به فولدر root پروژه بروید . (همانجا که فایل yii وجود دارد) با اجرا گرفتن کد زیر در cmd ورژن فریم ورک نمایش داده می شود
استفاده از Yii API
با استفاده تابع زیر نسخه فریم ورک نمایش داده می شود
در gmail و سایر سرویس های ایمیل معتبر امکان پاسخ دادن به ایمیل های دریافتی به صورت اتوماتیک وجود دارد که به آن auto reply می گویند.در این آموزش نحوه ی فعال سازی این امکان در gmail را قرار داده ایم. کافی است مراحل زیر را به ترتیب انجام بدید.
- ابتدا وارد gmail خود شوید
- در قسمت سمت راست بر روی آیکون چرخدنده کلیک کنید
- در منوی باز شده بر روی settings کلیک کنید:
- در صفحه ی جدیدی که برای شما باز شده است گزینه ی Vacation responder را پیدا کنید.(در انتهای صفحه قرار دارد)
- به صورت پیش فرض این گزینه غیر فعال می باشد . آن را فعال کنید. (Vacation responder on)
- سپس رنج تاریخ ، موضوع و متن پیام خود را انتخاب نمایید
- و در آخر گزینه ی save را کلیک نمایید.
در این بخش از آموزش های سایت <a style="color:blue;" href="http://www.goyii.ir">GoYii.ir</a> به آموزش <a href="http://www.goyii.ir " style="color:blue;">توابع تاریخ</a> در mysql می پردازیم.
تابع NOW() :
تاریخ و ساعت جاری را به صورت "۲۰۱۷-۰۷-۰۷ ۲۰:۰۳:۲۶" برمی گرداند
<code>
SELECT NOW() FROM user
</code>
------------------------------------------------------------------------------------------------------------------------------------------------
تابع CURDATE():
تاریخ جاری را به صورت "۲۰۱۷-۰۷-۰۷" برمی گرداند
<code>
SELECT CURDATE() FROM user
</code>
------------------------------------------------------------------------------------------------------------------------------------------------
تابع CURTIME():
تاریخ جاری را به صورت "۲۰:۰۵:۱۲" برمی گرداند
<code>
SELECT CURTIME() FROM user
</code>
------------------------------------------------------------------------------------------------------------------------------------------------
تابع DATE():
بخش تاریخ را از یک عبارت date/time بیرون می کشد
خروجی : ۲۰۱۷-۰۶-۱۵
<code>
SELECT DATE("20170615") FROM user
</code>
------------------------------------------------------------------------------------------------------------------------------------------------
تابع EXTRACT():
یکی از بخش های عبارت date/time . را برمی گرداند
خروجی : شماره ماه تاریخ قرار داده شده
برای مثال زیر ۶
<code>
SELECT EXTRACT(MONTH FROM "2017-06-15");
</code>
برای دریافت سال مثال زیر که نتیجه ۲۰۱۷ می باشد
<code>
SELECT EXTRACT(YEAR FROM "2017-06-15");
</code>
------------------------------------------------------------------------------------------------------------------------------------------------
تابع DATE_ADD():
یک فاصله زمانی مشخص را به تاریخ اضافه می کند
خروجی : ۲۰۱۷-۰۶-۲۵
<code>
SELECT DATE_ADD("2017-06-15", INTERVAL 10 DAY);
</code>
برای اضافه کردن ماه و سال به جای DAY از YEAR و MONTH استفاده کنید.
------------------------------------------------------------------------------------------------------------------------------------------------
تابع DATE_SUB():
یک فاصله زمانی مشخص را از تاریخ کم می کند
خروجی : ۲۰۱۷-۰۶-۰۵
<code>
SELECT DATE_SUB("2017-06-15", INTERVAL 10 DAY);
</code>
برای اضافه کردن ماه و سال به جای DAY از YEAR و MONTH استفاده کنید.
------------------------------------------------------------------------------------------------------------------------------------------------
تابع DATEDIFF():
تعداد روز بین دو تاریخ را برمی گرداند
خروجی :۱۰
<code>
SELECT DATEDIFF("2017-06-25", "2017-06-15");
</code>
------------------------------------------------------------------------------------------------------------------------------------------------
تابع DATE_FORMAT():
تاریخ و ساعت را به فرمت های مختلف نشان می دهد
خروجی :۲۰۱۷-۰۶
<code>
SELECT DATE_FORMAT("2017-06-15", "%Y-%m");
</code>
به %Y و %m
format_mask گفته می شود
برای آگاهی بیشتر به لینک زیر مراجعه کنید
<a style="color:blue;" href="https://www.w3schools.com/sql/func_mysql_date_format.asp" target="_blank">اینجا</a>
برنامه نویسی php
اگر شما بخواهید یک عنصر از ارایه حذف کنید می توانید از unset() و یا array_splice() استفاده کنید.
برای دریافت key عنصری که می خواهید حذف کنید از array_search() استفاده کنید.
مثال:
unset:
نتیجه در خروجی
array_splice:
نتیجه در خروجی
استفاده از متد findByAttributes() در yii1
یکی از متد های CActiveRecord متد findByAttributes می باشد که یک رکورد(سطر) را بر اساس ویژگی ها و شرط های خواسته شده پیدا می کند:
که سه ۳ آرگومان دریافت می کند :
public static findByAttributes(array $attributes, mixed $condition='', array $params=array ( ))
همانطور که در کد بالا مشخص است این سه آرگومان به شرح زیر می باشندک
- attributes
که به صورت آرایه دریافت میشود :
array('status'=>1) - condition
پس از attributes به صورت mix استفاده می شود
"status=1 AND cat_id=:cid" - params
که به صورت آرایه دریافت می شود . در صورتی که در condition استفاده شده باشد همانند مثال بالا
array(":cid"=>2)
مثال:
$result = User::model()->findByAttributes(
array('reset_key' => $user->reset_key),
'reset_expires <= NOW()'
);
استفاده از CDbCriteria
$criteria = new CDbCriteria;
$criteria->addCondition("current_date<=".now()); $result = User::model()->findByAttributes(array('reset_key' =>$user->reset_key),$criteria);
Person::model()->findByAttributes(
array('first_name'=>$firstName,'last_name'=>$lastName),
'status=:status',
array(':status'=>1)
);
Person::model()->findByAttributes(
array('first_name'=>$firstName,'last_name'=>$lastName),
array(
'condition'=>'status=:status',
'params'=>array(':status'=>1)
)
);
استفاده از متد findByAttributes() در yii1
یکی از متد های CActiveRecord متد findByAttributes می باشد که یک رکورد(سطر) را بر اساس ویژگی ها و شرط های خواسته شده پیدا می کند:
که سه ۳ آرگومان دریافت می کند :
public static findByAttributes(array $attributes, mixed $condition=\'\', array $params=array ( ))
همانطور که در کد بالا مشخص است این سه آرگومان به شرح زیر می باشندک
- attributes
که به صورت آرایه دریافت میشود :
array(\'status\'=>1) - condition
پس از attributes به صورت mix استفاده می شود
\"status=1 AND cat_id=:cid\" - params
که به صورت آرایه دریافت می شود . در صورتی که در condition استفاده شده باشد همانند مثال بالا
array(\":cid\"=>2)
مثال:
$result = User::model()->findByAttributes(
array(\'reset_key\' => $user->reset_key),
\'reset_expires <= NOW()\'
);
استفاده از CDbCriteria
$criteria = new CDbCriteria;
$criteria->addCondition(\"current_date<=\".now()); $result = User::model()->findByAttributes(array(\'reset_key\' =>$user->reset_key),$criteria);
Person::model()->findByAttributes(
array(\'first_name\'=>$firstName,\'last_name\'=>$lastName),
\'status=:status\',
array(\':status\'=>1)
);
Person::model()->findByAttributes(
array(\'first_name\'=>$firstName,\'last_name\'=>$lastName),
array(
\'condition\'=>\'status=:status\',
\'params\'=>array(\':status\'=>1)
)
);
برنامه نویسی php
چه زمانی باید از $this و چه زمانی از self استفاده کنیم؟
- $this به شی جاری اشاره می کند . refer to object
- self به کلاس جاری اشاره می کند.refer to class
- $this->member به غیر استاتیک متد و پروپرتی اشاره می کند
- self::member به استاتیک متد و پروپرتی اشاره می کند
مثال های زیر برای درک بهتر این موضوع قرار داده می شود
class X {
private $non_static_member = 1;
private static $static_member = 2;
function __construct() {
echo $this->non_static_member . ' '
. self::$static_member;
}
}
new X();
polymorphism با استفاده از $this
class X {
function foo() {
echo 'X::foo()';
}
function bar() {
$this->foo();
}
}
class Y extends X {
function foo() {
echo 'Y::foo()';
}
}
$x = new Y();
$x->bar();
suppressing polymorphic behaviour با استفاده از self
class X {
function foo() {
echo 'X::foo()';
}
function bar() {
self::foo();
}
}
class Y extends X {
function foo() {
echo 'Y::foo()';
}
}
$x = new Y();
$x->bar();
استفاده از swiftMailer در فریم ورک Yii
ابتدا در تنظیمات پروژه
basic
config/web.php
advance
common/config/main-local.php
'components' => [
'mail' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@backend/mail',
'useFileTransport' => false,//set this property to false to send mails to real email addresses
//comment the following array to send mail using php's mail function
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.gmail.com',
'username' => 'username@gmail.com',
'password' => 'password',
'port' => '587',
'encryption' => 'tls',
],
],
]
سپس برای ارسال ایمیل
\Yii::$app->mail->compose('your_view', ['params' => $params])
->setFrom([\Yii::$app->params['supportEmail'] => 'Test Mail'])
->setTo('to_email@xx.com')
->setSubject('This is a test mail ' )
->send();
به صورت پیش فرض هنگامی که در gridview در Yii2 مطلبی را جستجو می کنین در url شما با یک کوئری استرینگ طولانی مواجه می شوید
خوب برای اینکه جستجوی شما در gridview به صورت ajax انجام شود همانند yii1 فریم ورک ویجتی با نام Pjax دارد که برای اینکار می توانید از آن استفاده کنید
برای استفاده شما باید این ویجت را در صفحه ای که gridview در آن استفاده شده است قرار دهید
نکته : gridview باید در داخل این ویجت باشد .
نکته : حتما باید ویجت پیجکس رو به این صوت صدا بزنین yii\widgets\Pjax چه هنگامی که آن را شروع می کنید چه هنگامی که پایان می دهید .
\yii\widgets\Pjax::begin([
'enableReplaceState' => false,
'enablePushState' => false,
]);
// echo $this->render('_search', ['model' => $searchModel]);
GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'title',
'title_persian',
['class' => 'yii\grid\ActionColumn'],
],
]);
\yii\widgets\Pjax::end();
در صورتی که از _search استفاده می کنید باید به این نکته توجه کنین که
echo $this->render('_search', ['model' => $searchModel]);
در داخل ویجت pjax باشد
در صورتی که پس از انجام کد بالا باز جستجو به صورت ajax انجام نشد
باید برای pjax یک container قرار دهید :
\yii\widgets\Pjax::begin([
'enableReplaceState' => false,
'enablePushState' => false,
'clientOptions' => [
'container' => 'buy_search',
]
]);
و در _search نیز data_pjax را برابر container پی جکس (pjax) قرار دهید
$form = ActiveForm::begin([
'action' => ['index'],
'method' => 'get',
'options' => [
'data-pjax' => '#buy_search'
],
]);
برنامه نویسی php
برای نمایش لینک در gridview :
GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'label'=>'bla',
'format' => 'raw',
'value'=>function ($data) {
return Html::url('site/index');
},
],
['class' => 'yii\grid\ActionColumn'],
],
]);
برنامه نویسی php
How to get response as json format(application/json) in yii?
Create this function in your (base) Controller:
protected function renderJSON($data)
{
header('Content-type: application/json');
echo CJSON::encode($data);
foreach (Yii::app()->log->routes as $route) {
if($route instanceof CWebLogRoute) {
$route->enabled = false; // disable any weblogroutes
}
}
Yii::app()->end();
}
برنامه نویسی php
How to get response as json format(application/json) in yii?
Create this function in your (base) Controller:
Yii::$app->authManager->getRolesByUser(Yii::$app->user->getId());
آموزش فریم ورک های laravel و Yii
هر کنترلری که در پروژه ها استفاده می شود از کلاس Controller ارثبری (extend) میشوند .
این کلاس خود دارای متد ها و پروپرتی هایی است .
در صورتی که شما نیاز به استفاده از انها داشته باشین می توانین آنها را بر اساس نیاز خود دوباره نویسی (override) کنین.
لیست متد ها و پروپرتی ها ی این کلاس در سایت اصلی همراه با توضیحات قرار دارد .جهت نمایش اینجا را کلیک نمایید.
نکته ای که در دوباره نویسی باید توجه داشته باشین اینه که حتما متد اصلی را در انتها صدا بزنید.
برای مثال ما متد beforAction را به این صورت دوباره نویسی می کنیم:
هر مدلی که ما در اپلیکشین ایجاد می کنیم از کلاس yii\db\ActiveRecordارث می برد. این کلاس peroperty ها و method هایی داره که بسه به نیاز ما در پروژه بسیار کاربردی هست . خیلی از این پروپرتی ها و متد ها رو ما خواسته یا ناخواسته استفاده می کنیم . به عنوان مثال ما از پروپرتی های :
- $isNewRecord در فرم ها برای ثبت یا ویرایش مدل
- primaryKey در مدل برای تعریف کلید اصلی جدول
همچنین برای متد ها :
- save() برای ذخیره یا ویرایش رکورد جدید
- attributeLabels() برای مقداردهی به ستون های جدول
- delete() برای حذف رکورد از جدول
هدف ما در این قسمت آموزش برخی از این ویژگی ها به صورت عملی می باشد. متد attributeHints() ایجاد متن راهنما برای فرم public function attributeHints() { return [ 'title' => 'عنوان به فارسی نوشته شود', 'cat_id' => 'انتخاب گروه الزامی می باشد', 'buy_date' => 'تاریخ خرید اختیاری است', 'status' => 'وضعیت خرید خود را مشخص نمایید', 'price' => 'قیمت ها را به تومان وارد نمایید', ]; }
متد های afterSave() و beforSave() متدهایی که قبل یا پس از عملیات ثبت و یا ویرایش صدا زده می شوند public function beforeSave($insert) { if (!parent::beforeSave($insert)) { return false; } // ...custom code here... return true; }
برای آشنایی با تمامی پروپرتی ها و متد های این کلاس می توانید به سایت اصلی مراجعه کنید. لینک داکیومنت این کلاس : Abstract Class yii\db\BaseActiveRecord
یکی دیگه از قابلیت های فریم ورک Yii در نسخه ۲ امکان نمایش یک اکشن از یک کنترلر به هنگام به روزرسانی و یا آپلود پروژه هست. قابلیت catchAll این امکان رو فراهم میکنه تا هر درخواستی ارسال میشه اپلیکیشن به صفحه مورد نظر ارجاع داده بشه و سایر صفحات نمایش داده نشود . برای مثال در کنترلر site اکشنی با نام catchall ایجاد میکنیم که متنی را به کاربر نمایش دهد مبنی بر اینکه سایت در حال به روز رسانی می باشد . سپس برای فعال کردن قابلیت جدیدمون در قسمت تنظیمات پروژه : اگر از پروژه basic استفاده می کنین در فولدر config و فایل web.php و اگر از پروژه advance استفاده میکنین در frontend فولدر config و در فایل main.php کد زیر را در متغییر $cinfig قرار دهید: 'catchAll' => [ 'site/catchall', ],
توجه کنین که کد زیر در $config قرار میگیرد . همچنین به حروف بزرگ و کوچک توجه کنین.
sorting در dataProviderدر کنترلر حذف web از پروژه basic در IIS در Yii2
برای قرار دادن صفت و پروپرتی های اختیاری به NavBAr به عنوان مثال target=_blank جهت باز شدن لینک در تب جدید از linkOptions استفاده می کنیم: مثال در ویجت NavBar در قالب پیش فرض bootstrap فریم ورک Yii2: ['label' => 'نمایش سایت','url' => ['/site/index'], 'linkOptions' =>['target'=>'_blank']],
یکی دیگه از دستورات جدید در پی اچ پی پنج
َArrayObject
هست
تبدیل آرایه به شی
این کلاس اجازه میده که با اشیا مانند آرایه رفتار کنیم
append()
متدی است که به آخر شی مقداری اضافه میکند:
getIterator()
این متد یک شی ایتراتور ایجاد میکنه و شما میتونین از تکرار کننده استفاده کنین
این متد برای دریافت تکرار کننده شی از هر آرایه ای مفید است
offsetExists()
این متد میتونه تشخیص بده که آفست در شی وجود داره یا نه
$arrayobj = new ArrayObject(array(‘zero’, ‘one’, ‘example’=>’e.g.’));
var_dump($arrayobj->offsetExists(1)); // true
offsetGet()
این متدبرای نمایش مقدار یک افست استفاده میشه
آفست میشه همون ایندکس تو آرایه
offsetSet()
مثل آفست گت با این تفاوت که برای ست کردن ایندکس استفاده میشه
offsetUnset()
این متد میتونه المنتی از ایندکس را خالی کنه در واقع حذف کنه
$arrayobj = new ArrayObject(array(0=>’zero’,2=>’two’));
$arrayobj->offsetUnset(2);
var_dump($arrayobj);
خروجی
object(ArrayObject)#1 (1) {
[۰]=>
string(4) “zero”
}
مثال
در آموزش های قبلی برای مدیریت سطح دسترسی از rbac استفاده کردیم .
rbac متد هایی داره که بسیار مفید و پرکاربرد هست.
در زیر به چند مورد از آن ها را اشاره می کنیم:
- \Yii::$app->authManager->getRolesByUser(Yii::$app->user->id)
- تمامی نقش های کاربر را همراه با جزئیات نمایش می دهد
- \Yii::$app->authManager->getPermissionsByUser($user_id)
- تمامی مجوز های یک کاربر را نمایش می دهد
- Yii::$app->user->can(‘role or permission’)
- همانطور که قبلا گفتیم: مشخص میکند که آیا کاربر به نقش یا مجوز نوشته شده دسترسی دارد یا خیر .نتیجه true or false
تعداد صفحات : 5
آموزش مرحله به مرحله فریم ورک Yii