تالار گفتمان nCIS.ir

نسخه‌ی کامل: یک اکشن ثابت برای ورودی وب سایت - Yii2
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام دوستان
با استفاده از این لینک (http://www.yiiframew...#catchall-route) سعی کردم که همه ورودی های وب سایتم از یک اکشن خاص باشن که بتونم یک سری شرط رو چک کنم، ولی بعد از اینکه می خوام کاربر رو به اکشن خاصی بفرستم، دوباره قبل از اجرای اون اکشن، ابتدا مسیری که توی catchAll مشخص کردم چک می شه و وب سایت توی loop می افته!

ممنون می شم راهنمایی کنید چطور می شه مشکل رو حل کرد
خب این کاملا طبیعیه چون این تابع برای کاری نیست که شما قصد انجامش رو دارید!
اگر می خواید کاری انجام بدید که قبل از اجرای کنترلر ها اتفاق بیفته بهتره یک کلاس اختیاری بسازید و اون رو از کلاس Controller بیاید و extend کنید. حالا تمام کلاس های کنترل دیگه رو از کلاس خودتون extend کنید.
توی کلاسی که خودتون گذاشتید و در تابع init می توانید هر کاری خواستید انجام بدید
حالا یه سوال دیگه، این توضیحی که مربوط به همون لینک هست رو بخونید: 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 بزنیم؟
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]
(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 درنظر گرفتین.