Yii1 рдореЗрдВ рд╕рднреА рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдкрд░рд┐рдЪрдп


рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, рдпрд╣ рд▓реЗрдЦ рдЕрдм рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдореЗрд░реЗ рдбреНрд░рд╛рдлреНрдЯ рдореЗрдВ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд╛рдж рдХреЗ рд▓рд┐рдП рдмрдВрдж рд░рдЦрд╛, рдЬрдм рдЕрдзрд┐рдХ рд╕рдордп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди, yii2 рдХреЗ рдЖрд╕рдиреНрди рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдкрд╛рдардХ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдкрд░ рд░рдЦрд╛ред

рдЕрдм 3 рд╕рд╛рд▓ рд╕реЗ рдореИрдВ рдореЗрдЧрд╛рдлреНрд▓реЙрд╡рд░ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдФрд░, рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдЬрдм рдмрд╣реБрдд рд╕рд╛рд░реА рдХрдХреНрд╖рд╛рдПрдВ рдереАрдВ, рдФрд░ рдЙрдирдХреЗ рдирд╛рдо ItemDiscount , ItemDiscount рдмрди рдЧрдП, рддреЛ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирд╛рдорд╕реНрдерд╛рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдареАрдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рдЙрд╕ рддрд░рд╣ рд╕реЗ рдЯрд╣рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рд╣рд░ рдЬрдЧрд╣ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ, рдФрд░ рди рдХреЗрд╡рд▓ рдереЛрдбрд╝рд╛ рд╕рд╛, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдирд╣реАрдВред

рддреЛ, рдЖрдЗрдП рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ "рдкрдХрд╛рдиреЗ" рдХреЗ рддрд░реАрдХреЗ рджреЗрдЦреЗрдВред

рдореВрд▓ рдмрд╛рддреЗрдВ


рдЪреВрдВрдХрд┐ рдореИрдВрдиреЗ рд╣рд░ рдЬрдЧрд╣ рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ app рд░реВрдЯ рдХреЛ рд░реВрдЯ рдиреЗрдорд╕реНрдкреЗрд╕ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, application рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИ) рдЪреБрдирд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, yii рдЗрд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕реЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдерд╛ (рдЖрдк index.php рдореЗрдВ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ Yii::setPathOfAlias рдЗрд╕рдХреЗ рдкрде рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдерд╛, рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рд╕рдордп рдореИрдВ Yii::setPathOfAlias рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ Yii::setPathOfAlias (рд╢рд╛рдпрдж рдЕрдм рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЧрдИ рд╣реИ) ), рдореБрдЭреЗ index.php рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рдЗрд╕ рддрд░рд╣ рдореЗрд░рд╛ рд╕реВрдЪрдХрд╛рдВрдХ.рдлрдк рджрд┐рдЦрдиреЗ рд▓рдЧрд╛
 $yii=dirname(__FILE__).'/yii/framework/yii.php'; $config=dirname(__FILE__).'/protected/config/main.php'; // remove the following lines when in production mode defined('YII_DEBUG') or define('YII_DEBUG',true); // specify how many levels of call stack should be shown in each log message defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3); //   Yii,      require_once($yii); // ,  ,       $config=require($config); Yii::createWebApplication($config)->run(); 


рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕
 // -   yii,     Yii::getPathOfAlias Yii::setPathOfAlias('app', dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR); //       define(NS_SEPARATOR,NAMESPACE_SEPARATOR); //   return array( // .... ); 



рдирд┐рдпрдВрддреНрд░рдХреЛрдВ


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдирд┐рдпрдВрддреНрд░рдХ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдЙрдкрдирд╛рдо app рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рдФрд░ рдирд╣реАрдВ! рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдм рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдирд┐рдпрдВрддреНрд░рдХ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдФрд░ app\test рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВред Yii рдкрд░реАрдХреНрд╖рдг рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди app рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВред рдЪреВрдВрдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкреВрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ (рд▓реЗрдХрд┐рди рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ), рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ CWepApplication рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдФрд░ createController рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред рдпрд╣ рдмрд╣реБрдд рд╕реБрдВрджрд░ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХреА рдирдХрд▓ рдХрд░рдиреА рдереА, рд▓реЗрдХрд┐рди, рд╕рднреА рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдХрдирд╛ рдкрдбрд╝рд╛ред

WepApplication
  class WebApplication extends CWebApplication { //         public $controllerNamespace='app'; public function createController($route,$owner=null) { if($owner===null) $owner=$this; if(($route=trim($route,'/'))==='') $route=$owner->defaultController; $caseSensitive=$this->getUrlManager()->caseSensitive; $route.='/'; while(($pos=strpos($route,'/'))!==false) { $id=substr($route,0,$pos); if(!preg_match('/^\w+$/',$id)) return null; if(!$caseSensitive) $id=strtolower($id); $route=(string)substr($route,$pos+1); if(!isset($basePath)) // first segment { if(isset($owner->controllerMap[$id])) { return array( \Yii::createComponent($owner->controllerMap[$id],$id,$owner===$this?null:$owner), $this->parseActionParams($route), ); } /** @var $module \base\BaseModule */ if(($module=$owner->getModule($id))!==null){ return $this->createController($route,$module); } $basePath=$owner->getControllerPath(); $controllerID=''; } else $controllerID.='/'; $className=ucfirst($id).'Controller'; $classFile=$basePath.DIRECTORY_SEPARATOR.$className.'.php'; //     if($owner->controllerNamespace!==null) $className=$owner->controllerNamespace.NS_SEPARATOR.str_replace('/',NS_SEPARATOR,$controllerID).$className; if(is_file($classFile)) { if(!class_exists($className,false)) require($classFile); if(class_exists($className,false) && is_subclass_of($className,'CController')) { $id[0]=strtolower($id[0]); return array( new $className($controllerID.$id,$owner===$this?null:$owner), $this->parseActionParams($route), ); } return null; } $controllerID.=$id; $basePath.=DIRECTORY_SEPARATOR.$id; } } } 


рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реЗ рд╕реВрдЪрдХрд╛рдВрдХред
 // change the following paths if necessary $yii=dirname(__FILE__).'/yii/framework/yii.php'; $config=dirname(__FILE__).'/protected/config/main.php'; // remove the following lines when in production mode defined('YII_DEBUG') or define('YII_DEBUG',true); // specify how many levels of call stack should be shown in each log message defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3); //   Yii,      require_once($yii); // ,   $config=require($config); // ,   $app=new app\components\WebApplication($config); $app->run(); 



рдореЙрдбреНрдпреВрд▓


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рдпрдВрддреНрд░рдХ рд╣реИрдВ, рд╣рдо рдЖрдЧреЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдореЙрдбреНрдпреВрд▓ Yii::createComponent рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╡рд░реНрдЧ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

config
 array( 'modules'=>array( 'front'=>array( 'class'=>'front\FrontModule' ) ) ) 


рдпрд╣ рд╡рд┐рдзрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ yii рдХреЛ front рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИред рдпрд╣ рдЙрд╕реА рд╕рд┐рджреНрдзрд╛рдВрдд рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ app рдЙрдкрдирд╛рдо рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб рдХреА рдЕрддрд┐рд░реЗрдХ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдпрд╣ рддрд░реАрдХрд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдерд╛ (рдореИрдВ рдХреЗрд╡рд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛), рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдЖрд╕рд╛рди рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдиреЗ рд╡рдВрд╢рдЬ CWebApplication рдмрджрд▓ рджрд┐рдпрд╛ред

WebApplication
 class WebApplication extends CWebApplication { // .... /** *        (,  ) * @param array $modules */ public function setModules($modules) { $modulesConfig=array(); foreach($modules as $id=>$module){ if(is_int($id)) { $id=$module; $module=array(); } if(!isset($module['class'])) { //   \Yii::setPathOfAlias($id,$this->getModulePath().DIRECTORY_SEPARATOR.$id); $module['class']=NS_SEPARATOR.$id.NS_SEPARATOR.ucfirst($id).'Module'; } $modulesConfig[$id]=$module; } parent::setModules($modulesConfig); } } 


рд╕рдорд╛рдзрд╛рди рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдФрд░ рдПрдХ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рд╕рдВрдХрд▓рд┐рдд рдХреА рдЬрд╛рдПрдЧреА (рдХреНрдпреЛрдВ, рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реБрдП, y рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рдЗрд╕реЗ рдкреНрд░рдкрддреНрд░ app.modules.ModuleClass рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛)ред рдЕрдм, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рд╕рдм рдмрджрд▓ рджреЗрдВ рдФрд░ рдХрдо рдХрд░реЗрдВ CWebApplication , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ CWebApplication рдореЗрдВ рдЙрдкрдирд╛рдо рдХреА рд╕реНрдерд╛рдкрдирд╛ рдбрд╛рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдореБрдЦреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред

рд╣рдордиреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рдпрд╣ рд╕рдмрдореЙрдбреНрдпреВрд▓реНрд╕ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рд╣рдо рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред рд╣рд╛рдВ, рдФрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП controllerNamespace рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВред

BaseModule
 class BaseModule extends \CWebModule { /** *    +  */ protected function init() { parent::init(); //   ,      $namespace=implode(NS_SEPARATOR, array_slice(explode(NS_SEPARATOR,get_class($this)),0,-1)); $this->controllerNamespace=$namespace.NS_SEPARATOR.'controllers'; } /** *        (,  ) * @param array $modules */ public function setModules($modules) { $modulesConfig=array(); foreach($modules as $id=>$module){ if(is_int($id)) { $id=$module; $module=array(); } if(!isset($module['class'])) { \Yii::setPathOfAlias($id,$this->getModulePath().DIRECTORY_SEPARATOR.$id); $module['class']=NS_SEPARATOR.$id.NS_SEPARATOR.ucfirst($id).'Module'; } $modulesConfig[$id]=$module; } parent::setModules($modulesConfig); } } 


рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд▓рдХреНрд╖рдгреЛрдВ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред

рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдб


рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ "рдиреЗрдорд╕реНрдкреЗрд╕" рдХрдорд╛рдВрдб рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рддреЛ рдореБрдЭреЗ commandNampespace рд╕рдорд╛рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ рдпрд╛ рддреЛ 'CConsoleApplication' рдпрд╛ 'CConsoleCommandRunner' рдореЗрдВ (рд╢рд╛рдпрдж рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд╣реИ?)ред рдореИрдВ commandMap рдУрд░ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рд▓рдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рднреА рдирд┐рд░рд╛рд╢рд╛ рдиреЗ рдореЗрд░рд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ред

config рдХрдВрд╕реЛрд▓ред php
 //   ,       Yii::setPathOfAlias('app',dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR); //... 'commandMap'=>array( 'import'=>'\app\commands\ImportCommand', ), 


рдХреЛрдб рдЗрд╕ рддрдереНрдп рдкрд░ рд╢рдкрде рдЧреНрд░рд╣рдг рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ ImportCom рд╡рд░реНрдЧ рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрд╛ред

рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

console.php
:
 //   ,       Yii::setPathOfAlias('app',dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR); //... 'commandMap'=>array( //   'import'=>array( 'class'=>'\app\commands\ImportCommand', ) ), 


рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ minuses рдореЗрдВ рд╕реЗ, рд╕рднреА рдЯреАрдореЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдЬ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдореИрдВ рджреВрд╕рд░реЛрдВ рдХреЛ рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрд╛ред

рдЖрджрд░реНрд╢


рддреЛ рд╣рдо рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдмрд╕ рдпрд╣рд╛рдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реИрд╕реЗ рднреА рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╕рдВрдмрдВрдз рд╡рд┐рдзрд┐ рдХреИрд╕реЗ рджрд┐рдЦрдиреА рд╢реБрд░реВ рд╣реБрдИ, рддреЛ рдореИрдВрдиреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛: const CLASS_NAME=__CLASS_NAME__; ред

рддрдм рдореИрдВрдиреЗ рдмреЗрд╕ рдореЙрдбрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рдЖрд╕рд╛рди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рд╕рдорд╛рдзрд╛рди yii2 рдореЗрдВ рдЬрд╛рд╕реВрд╕реА рд╣реИ)ред

рдмреЗрд╕ рдореЙрдбрд▓ NamespaceRecord
 class NamespaceRecord extends CActiveRecord { public static function className() { return get_called_class(); } } 



рдЗрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╣реЛ рдЧрдП рд╣реИрдВред

рдпрд╣ рдерд╛:
  public function relations(){ return array( 'country'=>'app\location\Country', ) } 


рдпрд╣ рдмрди рдЧрдпрд╛:
  public function relations(){ return array( 'country'=>Country::className(), ) } 


рдкреНрд░рдкрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ, рд▓реЗрдХрд┐рди yii рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдерд╛ред

рд╡рд┐рдЬреЗрдЯ


рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдЗрд╕ $this->widget(' \ ') рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, yii2 рдХреА рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ yii2 рдХреА рддрд░рд╣ рдмрдирд╛рдпрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рднреА рд╡рд┐рдЬреЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред

NSWidget рдмреЗрд╕ рд╡рд┐рдЬреЗрдЯ
 class NSWidget extends \CWidget{ /** * @param array $options * @return \CWidget */ public static function begin($options=array()) { return \Yii::app()->controller->beginWidget(get_called_class(),$options); } /** * @return \CWidget */ public static function end() { return \Yii::app()->controller->endWidget(); } /** * @param array $options * @return string widget content */ public static function runWidget($options=array()) { return \Yii::app()->controller->widget(get_called_class(),$options,true); } } 



рд╕рдм рдХреБрдЫ, рдЕрдм рд╣рдо рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ
 echo MyWidgetNS\MyWidget::begin($options); echo MyWidgetNS\MyWidget::end(); //... echo MyWidget2NS\MyWidget2::runWidget($options); 


рдпрд╣ рд╕рдм рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдпрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ - рд▓рд┐рдЦреЛ, рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдХрд░реВрдВрдЧрд╛ред
рдпреБрдкреАрдбреАред рдЖрдЬ рд╣рдордиреЗ рдПрдХ рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдЧ рддрдп рдХрд┐рдпрд╛ред CWebApplication рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ред рдЙрдкрдирд╛рдо рдХреЗ рд▓рд┐рдП, рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ (рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдп рд╣реИ) рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
config
 'aliases'=>array( 'app'=>'application' ), 


рдПрдХ рд╣реА рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП "рдмреИрд╕рд╛рдЦреА" рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ

Source: https://habr.com/ru/post/In209526/


All Articles