رتبه موضوع:
  • 1 رای - 4 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
یک اکشن ثابت برای ورودی وب سایت - Yii2
#1
سلام دوستان
با استفاده از این لینک (http://www.yiiframew...#catchall-route) سعی کردم که همه ورودی های وب سایتم از یک اکشن خاص باشن که بتونم یک سری شرط رو چک کنم، ولی بعد از اینکه می خوام کاربر رو به اکشن خاصی بفرستم، دوباره قبل از اجرای اون اکشن، ابتدا مسیری که توی catchAll مشخص کردم چک می شه و وب سایت توی loop می افته!

ممنون می شم راهنمایی کنید چطور می شه مشکل رو حل کرد
no pain, no gain
پاسخ
تشکر شده توسط:
#2
خب این کاملا طبیعیه چون این تابع برای کاری نیست که شما قصد انجامش رو دارید!
اگر می خواید کاری انجام بدید که قبل از اجرای کنترلر ها اتفاق بیفته بهتره یک کلاس اختیاری بسازید و اون رو از کلاس Controller بیاید و extend کنید. حالا تمام کلاس های کنترل دیگه رو از کلاس خودتون extend کنید.
توی کلاسی که خودتون گذاشتید و در تابع init می توانید هر کاری خواستید انجام بدید
پاسخ
تشکر شده توسط:
#3
حالا یه سوال دیگه، این توضیحی که مربوط به همون لینک هست رو بخونید: Sometimes, you may want to put your Web application in maintenance mode temporarily and display the same informational page for all requests..
اگه بخواییم ببریم روی maintenance mode باید hard code بزنیم؟
no pain, no gain
پاسخ
تشکر شده توسط:
#4
EVENT_BEFORE_ACTION
This event is triggered before running every controller action. The actual event name is beforeAction
http://www.yiiframework.com/doc-2.0/yii-...ION-detail
 'on beforeAction' => function ($event) {
     if (some condition) {
         $event->isValid = false;
     } else {
     }
 },
Creating Filters
http://www.yiiframework.com/doc-2.0/guid...ng-filters
namespace appcomponents;
use Yii;
use yiibaseActionFilter;

class ActionTimeFilter extends ActionFilter
{
  private $_startTime;

  public function beforeAction($action)
  {
      $this->_startTime = microtime(true);
      return parent::beforeAction($action);
  }

  public function afterAction($action, $result)
  {
      $time = microtime(true) - $this->_startTime;
      Yii::trace("Action '{$action->uniqueId}' spent $time second.");
      return parent::afterAction($action, $result);
  }
}

Application Lifecycle
http://www.yiiframework.com/doc-2.0/yii-...ION-detail
[عکس: application-lifecycle.png]

یادگیری مداوم حداقل شرط لازم برای موفقیت در هر زمینه ای است که در آن فعالیت می کنید؛ هر روز چیز جدیدی بیاموزید.
پاسخ
تشکر شده توسط:
#5
(27-08-1394، 11:03 ق.ظ)desatir7316 نوشته: حالا یه سوال دیگه، این توضیحی که مربوط به همون لینک هست رو بخونید: Sometimes, you may want to put your Web application in maintenance mode temporarily and display the same informational page for all requests..
اگه بخواییم ببریم روی maintenance mode باید hard code بزنیم؟

میتونید توی همون init یا beforeAction چک کنید اگه شرایط برقرار نبود، ریدایرکت کنید به اکشنی که برای maintenance mode درنظر گرفتین.
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 2 مهمان