59 changed files with 879 additions and 310 deletions
			
			
		| @ -0,0 +1,4 @@ | |||||||
|  | Creating your own Application structure | ||||||
|  | ======================================= | ||||||
|  | 
 | ||||||
|  | TDB | ||||||
| @ -0,0 +1,117 @@ | |||||||
|  | Managing assets | ||||||
|  | =============== | ||||||
|  | 
 | ||||||
|  | An asset in Yii is a file that is included into the page. It could be CSS, JavaScript or | ||||||
|  | any other file. Framework provides many ways to work with assets from basics such as adding `<script src="` tag | ||||||
|  | for a file that is [handled by View](view.md) section to advanced usage such as pusblishing files that are not | ||||||
|  | under webserve document root, resolving JavaScript dependencies or minifying CSS. | ||||||
|  | 
 | ||||||
|  | Declaring asset bundle | ||||||
|  | ---------------------- | ||||||
|  | 
 | ||||||
|  | In order to publish some assets you should declare an asset bundle first. The bundle defines a set of asset files or | ||||||
|  | directories to be published and their dependencies on other asset bundles. | ||||||
|  | 
 | ||||||
|  | Both basic and advanced application templates contain `AppAsset` asset bundle class that defines assets required | ||||||
|  | applicationwide. Let's review basic application asset bundle class: | ||||||
|  | 
 | ||||||
|  | ```php | ||||||
|  | class AppAsset extends AssetBundle | ||||||
|  | { | ||||||
|  | 	public $basePath = '@webroot'; | ||||||
|  | 	public $baseUrl = '@web'; | ||||||
|  | 	public $css = [ | ||||||
|  | 		'css/site.css', | ||||||
|  | 	]; | ||||||
|  | 	public $js = [ | ||||||
|  | 	]; | ||||||
|  | 	public $depends = [ | ||||||
|  | 		'yii\web\YiiAsset', | ||||||
|  | 		'yii\bootstrap\BootstrapAsset', | ||||||
|  | 	]; | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | In the above `$basePath` specifies web-accessible directory assets are served from. It is a base for relative | ||||||
|  | `$css` and `$js` paths i.e. `@webroot/css/site.css` for `css/site.css`. Here `@webroot` is an alias that points to | ||||||
|  | application's `web` directory. | ||||||
|  | 
 | ||||||
|  | `$baseUrl` is used to specify base URL for the same relative `$css` and `$js` i.e. `@web/css/site.css` where `@web` | ||||||
|  | is an alias that corresponds to your website base URL such as `http://example.com/`. | ||||||
|  | 
 | ||||||
|  | In case you have asset files under non web accessible directory, that is the case for any extension, you need | ||||||
|  | to additionally specify `$sourcePath`. Files will be copied or symlinked from source bath to base path prior to being | ||||||
|  | registered. In case source path is used `baseUrl` is generated automatically at the time of publising asset bundle. | ||||||
|  | 
 | ||||||
|  | Dependencies on other asset bundles are specified via `$depends` property. It is an array that contains fully qualified | ||||||
|  | names of bundle classes that should be published in order for this bundle to work properly. | ||||||
|  | 
 | ||||||
|  | Here `yii\web\YiiAsset` adds Yii's JavaScript library while `yii\bootstrap\BootstrapAsset` includes | ||||||
|  | [Bootstrap](http://getbootstrap.com) frontend framework. | ||||||
|  | 
 | ||||||
|  | Asset bundles are regular classes so if you need to define another one, just create alike class with unique name. This | ||||||
|  | class can be placed anywhere but the convention for it is to be under `assets` directory of the applicaiton. | ||||||
|  | 
 | ||||||
|  | Registering asset bundle | ||||||
|  | ------------------------ | ||||||
|  | 
 | ||||||
|  | Asset bundle classes are typically registered in views or, if it's main application asset, in layout. Doing it is | ||||||
|  | as simple as: | ||||||
|  | 
 | ||||||
|  | ```php | ||||||
|  | use app\assets\AppAsset; | ||||||
|  | AppAsset::register($this); | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Since we're in a view context `$this` refers to `View` class. | ||||||
|  | 
 | ||||||
|  | Overriding asset bundles | ||||||
|  | ------------------------ | ||||||
|  | 
 | ||||||
|  | Sometimes you need to override some asset bundles application wide. A good example is loading jQuery from CDN instead | ||||||
|  | of your own server. In order to do it we need to configure `assetManager` application component via config file. In case | ||||||
|  | of basic application it is `config/web.php`: | ||||||
|  | 
 | ||||||
|  | ```php | ||||||
|  | return [ | ||||||
|  |     // ... | ||||||
|  |     'components' => [ | ||||||
|  |         'assetManager' => [ | ||||||
|  |             'bundles' => [ | ||||||
|  |                 'yii\web\JqueryAsset' => [ | ||||||
|  |                      'sourcePath' => null, | ||||||
|  |                      'js' => ['//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js'] | ||||||
|  |                 ], | ||||||
|  |             ], | ||||||
|  |         ], | ||||||
|  |     ], | ||||||
|  | ]; | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | In the above we're adding asset bundle definitions to `bunldes` property of asset manager. Keys there are fully | ||||||
|  | qualified class paths to asset bundle classes we want to override while values are key-value arrays of class properties | ||||||
|  | and corresponding values to set. | ||||||
|  | 
 | ||||||
|  | Setting `sourcePath` to `null` tells asset manager not to copy anything while `js` overrides local files with a link | ||||||
|  | to CDN. | ||||||
|  | 
 | ||||||
|  | Enabling symlinks | ||||||
|  | ----------------- | ||||||
|  | 
 | ||||||
|  | Asset manager is able to use symlinks instead of copying files. It is turned off by default since symlinks are often | ||||||
|  | disabled on shared hosting. If your hosting environment supports symlinks you certainly should enable the feature via | ||||||
|  | application config: | ||||||
|  | 
 | ||||||
|  | ```php | ||||||
|  | return [ | ||||||
|  |     // ... | ||||||
|  |     'components' => [ | ||||||
|  |         'assetManager' => [ | ||||||
|  |             'linkAssets' => true, | ||||||
|  |         ], | ||||||
|  |     ], | ||||||
|  | ]; | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | There are two main benefits in enabling it. First it is faster since no copying is required and second is that assets | ||||||
|  | will always be up to date with source files. | ||||||
| @ -0,0 +1,86 @@ | |||||||
|  | Basic concepts of Yii | ||||||
|  | ===================== | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Component and Object | ||||||
|  | -------------------- | ||||||
|  | 
 | ||||||
|  | Classes of the Yii framework usually extend from one of the two base classes [[Object]] and [[Component]]. | ||||||
|  | These classes provide useful features that are added automatically to all classes extending from them. | ||||||
|  | 
 | ||||||
|  | The `Object` class provides the [configuration and property feature](../api/base/Object.md). | ||||||
|  | The `Component` class extends from `Object` and adds [event handling](events.md) and [behaviors](behaviors.md). | ||||||
|  | 
 | ||||||
|  | `Object` is usually used for classes that represent basic data structures while `Component` is used for | ||||||
|  | application components and other classes that implement higher logic. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Object Configuration | ||||||
|  | -------------------- | ||||||
|  | 
 | ||||||
|  | The [[Object]] class introduces a uniform way of configuring objects. Any descendant class | ||||||
|  | of [[Object]] should declare its constructor (if needed) in the following way so that | ||||||
|  | it can be properly configured: | ||||||
|  | 
 | ||||||
|  | ```php | ||||||
|  | class MyClass extends \yii\base\Object | ||||||
|  | { | ||||||
|  |     public function __construct($param1, $param2, $config = []) | ||||||
|  |     { | ||||||
|  |         // ... initialization before configuration is applied | ||||||
|  | 
 | ||||||
|  |         parent::__construct($config); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function init() | ||||||
|  |     { | ||||||
|  |         parent::init(); | ||||||
|  | 
 | ||||||
|  |         // ... initialization after configuration is applied | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | In the above, the last parameter of the constructor must take a configuration array | ||||||
|  | which contains name-value pairs for initializing the properties at the end of the constructor. | ||||||
|  | You can override the `init()` method to do initialization work that should be done after | ||||||
|  | the configuration is applied. | ||||||
|  | 
 | ||||||
|  | By following this convention, you will be able to create and configure a new object | ||||||
|  | using a configuration array like the following: | ||||||
|  | 
 | ||||||
|  | ```php | ||||||
|  | $object = Yii::createObject([ | ||||||
|  |     'class' => 'MyClass', | ||||||
|  |     'property1' => 'abc', | ||||||
|  |     'property2' => 'cde', | ||||||
|  | ], $param1, $param2); | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Path Aliases | ||||||
|  | ------------ | ||||||
|  | 
 | ||||||
|  | Yii 2.0 expands the usage of path aliases to both file/directory paths and URLs. An alias | ||||||
|  | must start with a `@` character so that it can be differentiated from file/directory paths and URLs. | ||||||
|  | For example, the alias `@yii` refers to the Yii installation directory. Path aliases are | ||||||
|  | supported in most places in the Yii core code. For example, `FileCache::cachePath` can take | ||||||
|  | both a path alias and a normal directory path. | ||||||
|  | 
 | ||||||
|  | Path alias is also closely related with class namespaces. It is recommended that a path | ||||||
|  | alias be defined for each root namespace so that you can use Yii the class autoloader without | ||||||
|  | any further configuration. For example, because `@yii` refers to the Yii installation directory, | ||||||
|  | a class like `yii\web\Request` can be autoloaded by Yii. If you use a third party library | ||||||
|  | such as Zend Framework, you may define a path alias `@Zend` which refers to its installation | ||||||
|  | directory and Yii will be able to autoload any class in this library. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Autoloading | ||||||
|  | ----------- | ||||||
|  | 
 | ||||||
|  | TBD | ||||||
|  | 
 | ||||||
|  | Helper classes | ||||||
|  | -------------- | ||||||
|  | 
 | ||||||
|  | TDB | ||||||
| @ -0,0 +1,4 @@ | |||||||
|  | Building console applications | ||||||
|  | ============================= | ||||||
|  | 
 | ||||||
|  | TDB | ||||||
| @ -0,0 +1,43 @@ | |||||||
|  | Events | ||||||
|  | ====== | ||||||
|  | 
 | ||||||
|  | TBD, see also [Component.md](../api/base/Component.md). | ||||||
|  | 
 | ||||||
|  | There is no longer the need to define an `on`-method in order to define an event in Yii 2.0. | ||||||
|  | Instead, you can use whatever event names. To attach a handler to an event, you should | ||||||
|  | use the `on` method now: | ||||||
|  | 
 | ||||||
|  | ```php | ||||||
|  | $component->on($eventName, $handler); | ||||||
|  | // To detach the handler, use: | ||||||
|  | // $component->off($eventName, $handler); | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | When you attach a handler, you can now associate it with some parameters which can be later | ||||||
|  | accessed via the event parameter by the handler: | ||||||
|  | 
 | ||||||
|  | ```php | ||||||
|  | $component->on($eventName, $handler, $params); | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Because of this change, you can now use "global" events. Simply trigger and attach handlers to | ||||||
|  | an event of the application instance: | ||||||
|  | 
 | ||||||
|  | ```php | ||||||
|  | Yii::$app->on($eventName, $handler); | ||||||
|  | .... | ||||||
|  | // this will trigger the event and cause $handler to be invoked. | ||||||
|  | Yii::$app->trigger($eventName); | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | If you need to handle all instances of a class instead of the object you can attach a handler like the following: | ||||||
|  | 
 | ||||||
|  | ```php | ||||||
|  | Event::on(ActiveRecord::className(), ActiveRecord::EVENT_AFTER_INSERT, function ($event) { | ||||||
|  | 	Yii::trace(get_class($event->sender) . ' is inserted.'); | ||||||
|  | }); | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | The code above defines a handler that will be triggered for every Active Record object's `EVENT_AFTER_INSERT` event. | ||||||
| @ -0,0 +1,25 @@ | |||||||
|  | The Gii code generation tool | ||||||
|  | ============================ | ||||||
|  | 
 | ||||||
|  | Yii2 includes a handy tool that allows rapid prototyping by generating commonly used code snippets | ||||||
|  | as well as complete CRUD controllers. | ||||||
|  | 
 | ||||||
|  | Installing and configuring | ||||||
|  | -------------------------- | ||||||
|  | 
 | ||||||
|  | How to use it | ||||||
|  | ------------- | ||||||
|  | 
 | ||||||
|  | Add these lines to your config file: | ||||||
|  | 
 | ||||||
|  | ```php | ||||||
|  |     'modules' => [ | ||||||
|  |             'gii' => ['yii\gii\Module'] | ||||||
|  |         ] | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Creating your own templates | ||||||
|  | --------------------------- | ||||||
|  | 
 | ||||||
|  | TDB | ||||||
|  | 
 | ||||||
| After Width: | Height: | Size: 27 KiB | 
									
										Binary file not shown.
									
								
							
						| After Width: | Height: | Size: 5.9 KiB | 
									
										Binary file not shown.
									
								
							
						| @ -1,68 +0,0 @@ | |||||||
| <?php |  | ||||||
| /** |  | ||||||
|  * @link http://www.yiiframework.com/ |  | ||||||
|  * @copyright Copyright (c) 2008 Yii Software LLC |  | ||||||
|  * @license http://www.yiiframework.com/license/ |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| namespace yii\jui; |  | ||||||
| 
 |  | ||||||
| use Yii; |  | ||||||
| use yii\helpers\Html; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Slider renders a slider jQuery UI widget. |  | ||||||
|  * |  | ||||||
|  * For example: |  | ||||||
|  * |  | ||||||
|  * ```php |  | ||||||
|  * echo Slider::widget([ |  | ||||||
|  *     'model' => $model, |  | ||||||
|  *     'attribute' => 'amount', |  | ||||||
|  *     'clientOptions' => [ |  | ||||||
|  *         'min' => 1, |  | ||||||
|  *         'max' => 10, |  | ||||||
|  *     ], |  | ||||||
|  * ]); |  | ||||||
|  * ``` |  | ||||||
|  * |  | ||||||
|  * The following example will use the name property instead: |  | ||||||
|  * |  | ||||||
|  * ```php |  | ||||||
|  * echo Slider::widget([ |  | ||||||
|  *     'name'  => 'amount', |  | ||||||
|  *     'clientOptions' => [ |  | ||||||
|  *         'min' => 1, |  | ||||||
|  *         'max' => 10, |  | ||||||
|  *     ], |  | ||||||
|  * ]); |  | ||||||
|  *``` |  | ||||||
|  * |  | ||||||
|  * @see http://api.jqueryui.com/slider/ |  | ||||||
|  * @author Alexander Makarov <sam@rmcreative.ru> |  | ||||||
|  * @since 2.0 |  | ||||||
|  */ |  | ||||||
| class Slider extends InputWidget |  | ||||||
| { |  | ||||||
| 	/** |  | ||||||
| 	 * Renders the widget. |  | ||||||
| 	 */ |  | ||||||
| 	public function run() |  | ||||||
| 	{ |  | ||||||
| 		echo $this->renderWidget(); |  | ||||||
| 		$this->registerWidget('slider', SliderAsset::className()); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Renders the Slider widget. |  | ||||||
| 	 * @return string the rendering result. |  | ||||||
| 	 */ |  | ||||||
| 	public function renderWidget() |  | ||||||
| 	{ |  | ||||||
| 		if ($this->hasModel()) { |  | ||||||
| 			return Html::activeTextInput($this->model, $this->attribute, $this->options); |  | ||||||
| 		} else { |  | ||||||
| 			return Html::textInput($this->name, $this->value, $this->options); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
					Loading…
					
					
				
		Reference in new issue