نوشته شده توسط
rezakho
1- ست کردن یک الگوی عمومی در تمام روت ها، مثلا الگوی id در تمام روت ها عدد شناخته بشه
Route::pattern('id', '[0-9]+');
'rules'=array(
'<_c>/<_a>/<id:\d+>'=>'<_c>/<_a>',
);
2- در لاراول متغیر های POST رو هم میشه به عنوان پارامتر به اکشن یا ... ارسال کرد
توی Yii هم این امکان هست و بطور داخلی اعمال میشه. مثلاً اگه من بگم:
public function actionDelete($id) {
...
}
اونوقت id چه با Post ارسال بشه چه با Get، کار میکنه مگه اینکه با filters مشخص کنم که این اکشن فقط به یکی از این روشها باید جواب بده. البته محدودیت در دسترسی رو با rules خود urlManager هم میشه انجام داد:
'rules'=array(
array('user/delete', 'pattern'=>'user_delete/<id:\d+>', 'verb'=>'POST');
);
3- در لاراول میشه فیلتر خاصی رو براساس الگوی url روی همه یا برخی از url ها به همراه نوع متد http اعمال کرد
Route::when('admin/*', 'filters', array('http verps'));
توی Yii هم چنین امکانی وجود داره:
public function filters()
{
return array(
'postOnly, projectContext + create update index'
);
}
4- در لاراول امکان نام دادن به روت ها برای راحت تر کردن مسیر دهی و یا تولید url ها وجود داره
کد زیر مسیری با آدرس admin رو با هر نوع متد http به اکشن index از کنترلر panel با نام dashboard هندل میکنه
Route::get('admin', array('as' => 'dashboard', 'uses' => 'PanelController@index'));
که به صورت زیر میشه بدون نام اکشن و ... ، فقط با نام روت ریدایرکت کرد یا آدرس رو بدست آورد
$redirect = Redirect::route('dashboard');
$url = URL::route('dashboard');
توی Yii هم میشه و اتفاقاً خیلی هم ساده تره:
'rules'=array(
'dashboard/<action:.+>'=>'panel/<action>',
);
نکته: توی Yii اگه خاصیت routeOnly برای routeها ست نشه (حالت پیشفرض)، هم برای تولید لینک و هم برای تفسیر لینک از route مشخص شده استفاده میشه یعنی اگه شما الآن بنویسید:
echo Yii::app()->createUrl('panel/test');
باز هم لینک بصورت dashboard/test ایجاد میشه.
5- برای هندل کردن ساب دومین هم که خیلی زیبا!
Route::group(array('domain' => '{account}.myapp.com'), function($account)
{
// $account is here
});
توی Yii از این هم زیباتره:
array(
'http://<user:\w+>.example.com/<lang:\w+>/profile' => 'user/profile',
)
و اگه اکشن profile از کنترلر user رو اینطوری داشته باشیم:
public function actionProfile($user, $lang) {
...
}
میبینید که چقدر راحت میشه فهمید کدوم کاربر درخواست داده و پروفایلش رو میخواد به چه زبانی مشاهده کنه.
6- به شکل زیر میشه یک مدل رو به url متصل کرد، به نحوی که مدل خودش اوتوماتیک لود بشه
Route::model('user', 'User');
Route::get('profile/{user}', function(User $user) {
});
اگر آدرسی مثل profile/1 زده بشه، مدل به صورت اوتوماتیک در $user لود خواهد شد، و اگر مدل وجود نداشته باشه هم میتونیم مشخص کنیم چه اتفاقی بیافته
توی Yii بخاطر مسئله Lazy Loading فوق العاده قدرتمندی که داره، اصلاً به این کارها نیازی نیست. کافیه توی تنظیمات برنامه، محل ذخیره سازی فایلهایی که میخواین بطور خودکار در زمان استفاده بارگذاری بشن رو مشخص کنید:
'import'=>array(
'application.models.*',
'application.components.*',
),
و توی این پوشه ها هم کلاسها رو توی فایلی همنام با کلاس ذخیره کنید. مثلاً کلاس User توی فایل User.php قرار گرفته باشه. ترتیب این آرایه هم مشخص میکنه به چه ترتیبی باید توی پوشه ها دنبال فایل موردنظر بگرده.