yii框架 url助手类资料

记得 在前面写

use yii\htmlpers\Url;

原文网址:

http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html
Routing and URL Creation(路由和创建URL)

本文主题:请求处理中的路由和创建URL(Routing and URL Creation)

1、Url Formats
2、Routing
3、Creating URLs
4、Using Pretty URLs
5、Performance Consideration

当一个Yii应用开始处理一个请求的URL时,这个URL首先会被解析成一个路由(route),然后这个路由被用于实例化对应的控制器(controller)和动作(action)以处理这个请求。这个过程被称为路由解析(routing)。
路由解析的反向过程被称为创建URL(URL creation),就是通过一个给定的路由和相关的查询参数生成一个URL。当再使用这个创建的URL进行请求时,路由解析过程将把它解析成对应的路由和请求参数。
负责路由解析和创建URL的是URL manager,它被注册为urlManager应用组件。URL manager提供了parseRequest()方法用于将一个请求解析为路由和查询参数,它还提供了createUrl()方法用于创建URL。
通过在应用中配置urlManager组件,无需改动应用中的代码,你可以让你的应用可以识别任意的URL格式,例如,你可以使用以下代码为post/view动作创建一个URL:

use yii\helpers\Url;
$url=Url::to(['post/view','id'=>100]);

依据urlManager配置的不同,生成的URL可能是以下格式(或更多)中的一种:

/index.php?r=post%2Fview&id=100
/index.php/post/100
/post/100
1、Url Formats

URL manager支持两种URL格式:
1)默认的URL格式
2)美化的URL格式
默认的URL格式使用一个名为’r’的查询参数,它代表路由参数,而其他的普通查询参数则仅代表与此路由相关的查询参数,例如:Url /index.php?r=post/view&id=100,表示路由是post/view,查询参数id是100,默认URL格式无需在Web服务器创建时对URL manager做任何配置。
美化URL格式使用紧跟入口脚本名称的扩展路径来表示路由和查询参数。例如:
扩展路径URL /index.php/post/100,/post/100或许代表路由post/view和查询参数id是100,说“或许”是因为这个路径由URL rule来决定。要使用美化URL,需要根据实际需要设计一套URL rules,它将决定URL是什么样子。
你可以通过URL manager的enablePrettyUrl属性在两种URL格式之间切换,无需对应用中的代码做任何修改。
//一个rules定义实例:
D:\phpwork\advanced\common\config\main.php

//path//rules,路由规则
	'urlManager' => [
		'class' => 'yii\web\UrlManager',
		'showScriptName' => false,
		'enablePrettyUrl' => true,
		'rules' => array(
			'<controller:\w+>/<id:\d+>' => '<controller>/view',
			'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
			'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
		),
	],
2、Routing

路由解析包括两个步骤:
1)输入的请求被解析为一个路由和查询参数;
2)与路由对应的有一个控制器和动作(controller action)被创建以处理这个请求。

当使用默认URL格式时,解析一个请求为路由非常简单,只需获取GET查询参数中的’r’值即可。
当使用美化URL格式 时,URL manager会检查注册的URL rules,匹配将这个请求解析为路由的一条规则,如果没有找到,则会抛出一个yii\web\NotFoundHttpException的异常。
一旦请求被解析为路由,就应当为这个路由创建一个控制器和动作了。路由被斜杠划分为多个部分,site/index将被分解为site和index,每个部分都是一个ID,它可以指向的是一个模块(module),一个控制器(contorller),或者是一个动作(action)。从路由的第一部分开始,应用遵循以下步骤去创建模块、控制器和动作:
1)设置当前应用为当前模块;
2)在当前模块的控制器映射表(controller map)中检查是否包含这个ID(1st ID),如果包含,将创建一个对应的控制器对象,然后从第5步继续执行;
3)如果不包含,在当前模块的模块属性(modules property)中查找此ID(1st ID)是否符合,如果符合,将创建一个新模块,以新模块为起点返回第2步继续执行;
4)如果不符合,将此ID(1st ID)视为控制器ID(controller ID),并创建一个控制器对象,继续下一步操作;
5)控制器在其动作映射表(action map)中查找当前ID(2nd ID),如果找到就创建一个动作,否则,控制器将尝试创建一个与当前动作ID(ation ID)相匹配的内联动作(inline action)。
以上步骤中,如果有错误发生,将抛出一个yii\web\NotFoundHttpException异常,描述路由解析过程的失败情况。

Default Route

如果一个请求被解析为空路由,将会调用默认路由(the so-called default route)。缺省的默认路由是site/index,将指向site控制器的index动作,你可以通过配置应用的defaultRoute属性来自定义默认路由:

[
    // ...
    'defaultRoute' => 'main/index',
];

与应用的默认路由相似,模块也有默认路由,例如,有一个user模块,解析到user模块的请求将由defaultRouter决定使用哪个控制器,控制器的默认路由是default。如果在defaultRoute中没有定义action,则控制器的defaultAction属性将被用于指定默认的动作,在本例中,全路由就是:user/default/index

catchAll Route

有时,你或许想在应用临时维护的过程中,将所有的请求指向同一个页面,有许多方法都可以实现,最简单的方法就是配置yii\web\Application::$catchAll 属性如下:

[
    // ...
    'catchAll' => ['site/offline'],
];

通过以上配置,site/offline动作将被用于处理所有的请求。
catchAll属性可以是一个数组,第一个元素定义了路由,其他元素(键-值对)定义绑定到动作的参数。
提示:开发环境中的调试面板(Debug panel)在此种模式下将不会工作。

3、Creating URLs

Yii2提供了yii\helpers\Url::to()方法用于创建URL,可以指定路由和查询参数,例如:

use yii\helpers\Url;

//错误的写法:
//echo Url::to('post/index');//生成的路径是:post/index,是个相对路径,不是绝对路径

//创建一个URL:/index.php?r=post%2Findex
echo Url::to(['post/index']);//生成的路径是:/post/index

//创建一个带参数的URL:/index.php?r=post%2Fview&id=100
echo Url::to(['post/view', 'id' => 100]);

//创建一个锚点URL:/index.php?r=post%2Fview&id=100#content
echo Url::to(['post/view', 'id' => 100, '#' => 'content']);

//创建一个绝对路径:http://www.example.com/index.php?r=post%2Findex
echo Url::to(['post/index'], true);

//使用https创建一个绝对路径:https://www.example.com/index.php?r=post%2Findex
echo Url::to(['post/index'], 'https');
测试结果:
/*
post/index
/post/index
/post/100
/post/100#content
http://localhost:8082/post/index
https://localhost:8082/post/index
*/

注意,在上例中,我们假定使用默认的URL格式,如果使用的是简洁URL(pretty URL),创建出来的URL会不同,主要依据的是使用的URL规则(URL rules)
URL规则详细介绍:
http://www.yiiframework.com/doc-2.0/yii-web-urlmanager.html#$rules-detail

传递给yii\helpers\Url::to()方法的路由参数是上下文敏感的,可以是一个相对路径,也可以是一个绝对路径,遵循的规则如下:
1、如果路由是一个空字符串,当前请路由将被使用;
2、如果路由中没有斜线,它将被认为是当前控制器的一个动作ID,并将添加上当前控制器的uniqueId;
3、如果路由左端不是以斜线开头,它将被认为是当前模块的相对路由,并将添加上当前模块的uniqueId。

源代码:
public function actionUrl(){
	echo Url::to();// /post/url
	echo "<br>";

	echo Url::to('');// /post/url
	echo "<br>";

	echo Url::to(['']);// /post/url
	echo "<br>";
}
测试结果:
http://localhost:8082/post/url
/*
/post/url
/post/url
*/
URL
//创建一个带参数的URL:/index.php?r=post%2Fview&id=100
echo Url::to(['post/view', 'id' => 100]);
依据urlManager配置的不同,生成的URL可能是以下格式(或更多)中的一种:
/index.php?r=post%2Fview&id=100
/index.php/post/100
/post/100 //本例中生成的格式
echo Url::to(['post2/viewbbc', 'id' => 100,'act'=>'this']);
/*
/post2/viewbbc/100?act=this
*/

从Yii 2.0.2开始,你可以定义一个别名形式的路由,在这种情况下,别名将首先被转换为一个实际路径,随后再依据上述规则转为一个绝对路径。

例如,假定当前模块是admin,当前控制器是post:

	use yii\helpers\Url;

	//当前的请求路径是:/index.php?r=admin%2Fpost%2Findex
	echo '<br>'.Url::to(['']);

	//仅有一个动作ID的相对路径是:/index.php?r=admin%2Fpost%2Findex
	echo '<br>index'.Url::to(['index']);

	//一个相对路由:/index.php?r=admin%2Fpost%2Findex
	echo '<br>post/index'.Url::to(['post/index']);

	//一个绝对路由:/index.php?r=post%2Findex
	echo '<br>/post/index'.Url::to(['/post/index']);

	// /index.php?r=post%2Findex     assume the alias "@posts" is defined as
	//使用别名@posts(/post/index)的路径:/index.php?r=post%2Findex
	Yii::setAlias('@posts', '/post/index');
	echo '<br>@posts:'.Url::to(['@posts']);
测试结果:
/*
/post/url
index/post/index
post/index/post/index
/post/index/post/index
@posts:/post/index
*/

yii\helpers\Url::to()方法是通过调用URL管理器的createUrl()和createAbsoluteUrl()方法实现的,在后续的章节里,我们将说明如何配置URL管理器(URL manager)实现自定义创建的URL的格式。
yii\helpers\Url::to()方法也支持未关联路径的URL,此时不用给它的首参数传递数组,而是一个字符串,例如:

	use yii\helpers\Url;

	//当前的请求路径URL: /index.php?r=admin%2Fpost%2Findex
	echo Url::to();

	//别名URL:http://example.com
	Yii::setAlias('@example', 'http://example.com/');
	echo Url::to('@example');

	//一个绝对路径:http://example.com/images/logo.gif
	echo Url::to('/images/logo.gif', true);
测试结果:
/*
/post/url
http://example.com
http://localhost:8082/images/logo.gif
*/

除了to()方法外,yii\helpers\Url类还提供了其他替代方法,例如:

	use yii\helpers\Url;

    //主页URL: /index.php?r=site%2Findex
	echo "home:".Url::home();
	echo "<br>";

	//基础URL,如果一个应用部署在一个网站应用的子目录下时此路径就很有用。
	echo "base:".Url::base();
	echo "<br>";

	//当前请求URL的canonical路径,详见:https://en.wikipedia.org/wiki/Canonical_link_element
	echo "canonical:".Url::canonical();
	echo "<br>";

	//记住当前请求的URL
	Url::remember();
	//获取上一页面记住的URL
	echo "previous:".Url::previous();
	echo "<br>";
测试结果:
/*
home:/
base:
canonical:http://localhost:8082/post/url
previous:/post/url
*/
4、Using Pretty URLs

使用简洁URL
//pretty URL
要使用简洁URL,需要在应用配置中设置urlManager组件:

[
    'components' => [
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'enableStrictParsing' => false,
            'rules' => [
                // ...
            ],
        ],
    ],
]

enablePrettyUrl属性用于开关简洁URL格式,其他属性是可选的,以上配置是通用设置。
showScriptName,此属性决定是否在创建的URL中包含入口脚本文件,例如:此属性设置为false时,将使用/post/100,而不是/index.php/post/100
enableStrictParsing,此属性决定是否使用严格的请求解析。如果严格解析有效,进入的请求URL属性必须至少匹配一条规则可以处理成有效请求,或者执行一个yii\web\NotFoundHttpException异常。如果严格解析失效,当没有规则匹配请求的URL时,URL的部分路径信息将会处理成请求路由。
rules,此属性包含的是规则列表,定义了如何去解析和创建URL。这是你创建URL时主要设置的属性,它的格式将满足你特定的应用需求。

注意:如果要在生成的URL中隐藏入口脚本文件名,除了设置showScriptName为false外,你还需要配置Web server,当一个请求URL没有明确定义时能够正确识别由哪个PHP脚本去执行。如果你使用Apache Web服务器,你可以参考安装章节描述的推荐配置:
http://www.yiiframework.com/doc-2.0/guide-start-installation.html#recommended-apache-configuration

URL规则(URL Rules)

URL规则是yii\web\UrlRule或其子类的实例,每个URL规则由一个匹配路径信息的模式(pattern)、一个路由(route)和一些查询参数(query parameter)组成。如果一个URL规则的模式与请求的URL相匹配,它就可以被解析为一个请求。如果一个URL规则的路由和参数名称符合所给定的,它就可以用于创建URL。

当简洁URL格式有效时,URL管理器使用规则属性中声明的URL规则去解析请求,并创建URL。特定情况下,要解析请求,URL管理器以定义的顺序检测规则,并查找第一条符合请求URL的规则。匹配的规则将被用于解析URL为一个带参数的路由。类似的,要创建一个URL,URL管理器查找符合给定路由和参数的第一条规则,并使用它去创建一个URL。

你可以配置yii\web\UrlManager::$rules 为一个数组,键名是模式,值是对应的路由,每个模式-路由对构成一个URL规则,例如:

[
	'posts'	=> 'post/index',
	'post/<id:\d+>'=>'post/view',
]

此配置定义了两个URL规则,第一个规则匹配URL”posts”,并映射到路由”post/index”,第二个规则匹配一个正则表达式”post/(\d+)”,并映射到路由”post/view”和一个名为id的参数。

注意:规则中的模式(pattern)用于匹配URL中的路径部分,例如:”/index.php/post/100?source=ad”的路径(path)是post/100(首尾的斜线将被忽略),匹配的模式是”post/(\d+)”。

除了使用模式-路由对来定义URL规则之外,你还可以使用配置数组来定义,每个配置数组用于配置一个单独的URL规则对象,此种配置通常是发生在你需要在URL规则中还要配置其他属性的情况,例如:

[
	[
		'pattern'=>'posts'
		'route'=>'post/index',
		'suffix'=>'.json',
	]	
]

如果你没有定义规则配置的class,默认值是yii\web\UrlRule。

命名参数(Named Parameters)

一个URL规则可以与一些命名的查询参数相关联,这些参数的定义格式为:<ParamName:RegExp>,ParamName定义了参数名称,RegExp是可选的正则表达式,用于匹配参数值,如果RegExp没有定义,意味着参数值会是一个没有斜线的字符串。
注意:你可以为参数只定义正则表达式,模式的剩余部分被认为是文本。

当一个规则用于解析URL,它会与参数相关联,这些参数与URL中的相应部分相匹配,并随后被request应用组件放置到$_GET 中去。当规则用于创建一个URL时,它将从提供的参数中获取值,并将它们插入到参数声明的地方。
我们一起看个例程看看命名参数是如何工作的,假定我们已经声明了如下URL规则:

[
	'posts/<year:\d{4}>/<category>'	=>'post/index',
	'posts'=>'post/index',
	'post/<id:\d+>'=>'post/view',
]

当以上规则用于解析如下URL时:(根据左侧的模式创建路径(符合右侧的路由))

/index.php/posts,使用第2条规则,解析为路由post/index。
/index.php/posts/2014/php,使用第1条规则,解析为路由post/index,参数year的值是2014,参数category的值是php。
/index.php/post/100,使用第3条规则,解析为路由post/view,参数id的值是100。
/index.php/posts/php,当yii\web\UrlManager::$enableSrictParsing 为true时,将抛出一个yii\web\NotFoundHttpException异常;当yii\web\UrlManager::$enableSrictParsing 为false时(默认值),将返回路径部分posts/php作为路由。

当规则用于创建URL时:(解析的逆过程,根据右侧符合的路由,确定生成的路径(套用左侧的模式))

Url::to(['post/index']),使用第2条规则生成路径:/index.php/posts
//不是Url::to('post/index'),此句生成的路径:post/index
Url::to(['post/index','year'=>2014,'category'=>'php']),使用第1条规则生成路径:/index.php/posts/2014/php
Url::to(['post/view','id'=>100]),使用第3条规则生成路径:/index.php/post/100
Url::to(['post/view','id'=>100,'source'=>'ad']),使用第3条规则,生成路径:/index.php/post/100?source=ad,因为source参数在规则中未定义,所以它被追加到生成的URL末尾作为一个参数。
Url::to(['posts/index','category'=>'php']),不适用任何规则,生成路径:/index.php/posts/index?category=php。注意:因为不适用于任何规则,所以只是简单的将路由作为路径信息,参数作为查询字符串追加到生成的URL中。
Url::to(['post/index','category'=>'php']),使用第2条规则,生成路径:/index.php/posts?category=php,其他参数追加到URL尾。

//以上测试时的环境参数配置如下:
D:\phpwork\advanced\common\config\main.php

源代码:
	'urlManager' => [
		'class' => 'yii\web\UrlManager',
		'showScriptName' => true,
		'enablePrettyUrl' => true,
		'rules'=>[
			'posts/<year:\d{4}>/<category>'	=>'post/index',
			'posts'=>'post/index',
			'post/<id:\d+>'=>'post/view',
		],
	]

//参数化路由(Parameterizing Routes)
你可以在URL规则的路由中添加参数名称,这样就允许一条URL规则适用于多条路由,例如,下例规则添加控制器(controller)和动作(action)参数到路由中:

[
	'<controller:(post|comment)>/<id:\d+>/<action:(create|update|delete)>'=>'<controller>/<action>',	
	'<controller:(post|comment)>/<id:\d+>'=>'<controller>/view',
	'<controller:(post|comment)>s'=>'<controller>/index',
]

解析URL /index.php/comment/100/creat,使用第1条规则,设置参数controller为comment,参数action为create,这样路由/就解析为comment/create。
类似的,为路由comment/index创建一个URL,第3条规则适用,将会创建一个URL:/index.php/comment

提示:使用参数路由,可以大大减少URL规则的数量,这样可以有效提升URL管理器的性能。

默认情况下,在一条规则中声明的所有参数都是必须的,如果一个请求URL中未包含一个特定参数,或者一个URL创建时未带特定参数,此规则将不适用。为了使一些参数成为可选项,你需要配置规则的默认属性,列在此属性中的参数如果没有被提供将使用一个预定值。
在下例规则声明中,page和tag参数均是可选的,如果没有被提供,它们将使用默认值1和空字符串。

[
	[
		'pattern'=>'posts/<page:\d+>/<tag>',
		'route'=>'post/index',
		'defaults'=>['page'=>1,'tag'=>''],
	]	
]

上例规则将可以解析和创建以下URL:

/index.php/posts,page是1,tag是''
/index.php/posts/2,page是2,tag是''
/index.php/posts/2/news,page是2,tag是'news'
/index.php/posts/news,page是1,tag是'news'

如果没有使用可选参数,你必须要创建4条规则才能实现以上效果。

//使用服务器名称的规则(Rules with Server Names)
可以在URL规则的模式中包含Web服务器名称,当你的应用与Web服务器名称不相同时,此项功能将非常有用,例如,下例规则将URL http::/ /admin.example.com/login 解析为路由admin/user/login,并将http::/ /www.example.com/login解析为site/login。

[
	'http://admin.example.com/login'=>'admin/user/login',	
	'http://www.example.com/login'=>'site/login',
]

你可以在服务器名称中使用参数替换动态信息,例如,下例规则将URL http:/ /en.example.com/posts 解析为路由post/index,并带有参数language=en。

[
	'http://<language:\w+>.example.com/posts'=>'post/index',
]

注意:含有服务器名称的规则不能被包含在入口脚本的子目录下。例如,如果当前应用位于http:/ /www.example.com/sandbox/blog,然后你应该使用模式http:/ /www.example.com/posts替换http:/ /www.example.com/sandbox/blog/posts,这样将允许你的应用无需修改代码即可部署在其他目录下。

//URL后缀(URL Suffixes)
你或许想要为不同的目的为URL添加后缀,例如,你想要为URL添加.html后缀,这样页面看起来更象是HTML静态页面;你或许想为URL添加.json后缀,以描述响应期望的内容类型,你可以通过配置yii\web\UrlManager::$suffix 属性实现此目的,应用配置代码如下:

[
    'components' => [
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'enableStrictParsing' => true,
            'suffix' => '.html',
            'rules' => [
                // ...
            ],
        ],
    ],
]

上述代码将允许URL管理器识别请求的URL,并创建带后缀.html的URL。
小贴士:你可以设置URL后缀为”/”,这样所有的URL都以斜线结尾。
注意:当你配置了一个URL后缀,如果一个URL没有此后缀,它将被认为是不认识的URL,这是SEO的推荐做法。

你可以为不同的URL使用不同的后缀,在单独的URL规则中配置suffix属性即可。当一个URL规则有此属性设置,它将覆盖URL管理器中的后缀设置,例如:下例配置中包含一个自定义的URL规则,使用.json后缀替换了全局配置的.html。

[
'components' => [
	'urlManager' => [
		'enablePrettyUrl' => true,
		'showScriptName' => false,
		'enableStrictParsing' => true,
		'suffix' => '.html',
		'rules' => [
			// ...
			[
				'pattern' => 'posts',
				'route' => 'post/index',
				'suffix' => '.json',
			],
		],
	],
],
URL标准化(URL normalization)

从2.0.10版本起,URL管理器可以配置为使用UrlNormalizer处理带斜线和不带的URL。因为技术上http:/ /example.com/path和http:/ /example.com/path/是两个不同的URL,而它们提供相同的内容会降低SEO的效果。默认情况下,标准化会折叠斜线,根据后缀是否有尾斜线来决定添加或移除末尾斜线,使用永久重定向指向标准化的URL。标准化可以使用URL管理器进行全局配置,也可以为每一个规则进行单独配置,你可以设置UrlRule::$normalizer 为false,这样就可以为特定的URL规则禁用标准化。
下例展示了如何配置UrlNormalizer:

[
    'components' => [
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'enableStrictParsing' => true,
            'suffix' => '.html',
            'normalizer' => [
                'class' => 'yii\web\UrlNormalizer',
                'action' => UrlNormalizer::ACTION_REDIRECT_TEMPORARY, // 使用临时转向替代永久转向
            ],
            'rules' => [
                // ...
                [
                    'pattern' => 'posts',
                    'route' => 'post/index',
                    'suffix' => '/',
                    'normalizer' => false, //禁用标准化
                ],
                [
                    'pattern' => 'tags',
                    'route' => 'tag/index',
                    'normalizer' => [
                        'collapseSlashes' => false, //不折叠连续斜线
                    ],
                ],
            ],
        ],
    ],
]

注意:UrlManager::$nomalizer 默认是禁用的(disabled),如果要使用URL标准化,你需要明确配置它。

HTTP方法

实现RESTful API时,通常需要根据使用的HTTP方法将同一个URL解析为不同的路由,在规则的模式中添加支持的HTTP方法前缀即可轻松实现。如果一个规则支持多种HTTP方法,可以将各方法之间使用逗号分隔,例如:下例的规则支持不同的HTTP方法,但有相同的模式”post/<id:\d+>”,一个请求PUT post/100将被解析为post/create,另一个请求GET post/100将被解析为post/view。

[
	'PUT,POST post/<id:\d+>'=>'post/create',
	'DELETE post/<id:\d+>'=>'post/delete',
	'post/<id:\d+>'=>'post/view',
]

注意:如果一个URL规则在其模式中包含HTTP方法,此规则则只能用于解析,当创建URL时此规则将被忽略。
小贴士:为了简化RESTful API路由,Yii提供了一个特殊的URL规则类yii\rest\UrlRule,它很有效并支持一些特性,如自动多元化控制器ID,更多细节请参考RESTful API开发的路由章节:
http://www.yiiframework.com/doc-2.0/guide-rest-routing.html

自定义规则(Customizing Rules)

在此前的例子中,URL规则主要是使用模式-路由对的形式定义的,这是通常使用的简短形式,在特定情况下,你可能需要自定义URL规则,自定义一些属性,如yii\web\UrlRule::$suffix ,使用一个完整形式的数据定义此规则即可,下例就是从URL Suffixes部分摘取的:

[
    // ...other url rules...

    [
        'pattern' => 'posts',
        'route' => 'post/index',
        'suffix' => '.json',
    ],
]

信息:如果你没有为规则配置定义class选项,默认值将是yii\web\UrlRule。

动态添加规则(Adding Rules Dynamically)

URL规则可以被动态添加到URL管理器,此种情况在重新分发模块时经常发生,这些模块需要管理它们自己的URL规则。要使用动态添加的规则在规则处理的过程中生效,你需要在引导过程中添加规则。对于模块,意味着将在yii\base\BootstrapInterface中完成,并添加这些规则在bootstrap()方法,示例代码如下:

public function bootstrap($app){
	$app->getUrlManager()->addRules([
		//在此声明规则	
	],false);
}

注意:你也可以在yii\web\Application::bootstrap()中列出这些模块,这样就可以加入到引导过程了。

创建规则类(Creating Rule Classes)

尽管默认的yii\web\UrlRule类足够适用于项目的主要用途,但也有些情况下你必须创建自己的规则类。例如,在一个汽车销售网站,你或许会想要一种URL格式:/Manufacurer/Model,此处的Manufacturer和Model必须与数据库中存在的数据相匹配,默认的规则类在此处就无法使用,因为它是静态定义的模式。
我们可以创建如下的URL规则类来解决这个问题:

amespace app\components;

use yii\web\UrlRuleInterface;
use yii\base\Object;

class CarUrlRule extends Object implements UrlRuleInterface
{

    public function createUrl($manager, $route, $params)
    {
        if ($route === 'car/index') {
            if (isset($params['manufacturer'], $params['model'])) {
                return $params['manufacturer'] . '/' . $params['model'];
            } elseif (isset($params['manufacturer'])) {
                return $params['manufacturer'];
            }
        }
        return false;  // this rule does not apply
    }

    public function parseRequest($manager, $request)
    {
        $pathInfo = $request->getPathInfo();
        if (preg_match('%^(\w+)(/(\w+))?$%', $pathInfo, $matches)) {
            // check $matches[1] and $matches[3] to see
            // if they match a manufacturer and a model in the database
            // If so, set $params['manufacturer'] and/or $params['model']
            // and return ['car/index', $params]
        }
        return false;  // this rule does not apply
    }
}

然后在yii\web\UrlManager::$rules 配置中使用这个新的规则类:

[
	[
		'class'	=>'app\components\CarUrlRule',
		//配置其他属性
	]	
]
5、关于性能(Performance Consideration)

当开发一个复杂的Web应用时,优化URL规则以减少解析请求和创建URL的时间是非常重要的工作。
使用参数化路由,你可以减少URL规则的数量,并显著提升性能。
当解析或创建URL时,URL管理器按定义的顺序检测URL规则,所以,你可以考虑调整URL规则的顺序,将有效的、常用的规则放在其他规则的前面。
如果一些URL规则在模式或路由中使用了相同的前缀,你可以考虑使用yii\web\GroupUrlRule,这样它们可以在一个组中被URL管理器更有效的检测到,此种情况通常是你的应用由多个模块组成,每个有模块有自己的URL规则定义,并以模块ID作为公共前缀。

我的sublime-text 编辑器配置

sublime text 自定义配置
一、快捷键,几个常用的快捷键,配置的和eclipse一样

[
{“keys”: [“alt+up”], “command”: “swap_line_up” },
{“keys”: [“alt+down”], “command”: “swap_line_down”} ,

{ “keys”: [“alt+1”], “command”: “toggle_side_bar” },
{“keys”: [“ctrl+alt+up”], “command”: “duplicate_line”},
{“keys”: [“ctrl+alt+down”], “command”: “duplicate_line”},
{“keys”: [“ctrl+shift+x”], “command”: “upper_case”} ,
{“keys”: [“ctrl+shift+y”], “command”: “lower_case”} ,
{“keys”: [“ctrl+d”], “command”: “run_macro_file”, “args”: {“file”: “res://Packages/Default/Delete Line.sublime-macro”}},
{“keys”: [“ctrl+l”], “command”: “show_overlay”, “args”: {“overlay”: “goto”, “text”: “:”}}

]

二、配色方案Solarized(Light)
三、自定义设置
{
“color_scheme”: “Packages/Color Scheme – Legacy/Solarized (Light).tmTheme”,
“font_size”: 12,
“ignored_packages”:
[
“Vintage”
]
}
四、一些插件 比如  中文插件包……

工作以后如何有效学习

本文转自 悦思悦读 公众号

工作后怎么学习?

有个小妹子问:非常渴望成长,虽然已经工作了,仍然不敢中断学习。但是,在工作中学吧,好像学不深;想学习工作之外的东西,又不知道如何入手。到底应该如何学?

有这样问题的朋友不少。尤其是在好学、努力、有成长意愿和激情的年轻人中,这一问题相当典型。

毕竟,以前在学校里,学习是主业,每天至少花8小时专注学习。该学什么学校都给规定好了,具体的内容老师也会教。等到工作以后,每天的主业变成了完成工作任务,学习已经成了业余时间的“奢侈品”。

以前学了就去考试,好歹有个及格的底限或者争取优秀的目标在那里。现在每天自己学,又不能学完做个卷子拿去找老板升职加薪。虽然知道应该学习,可是,动力好像不那么强了。

怎么才能把自己有限的业余时间和精力投入到有用、有效的学习上去呢?

按区域区分学习内容

相对于在学校里,工作后学习有一个很大的优势:我们可以很容易找到什么“有用”!(虽然有点功利,但不得不承认,“有用”与否是大多数人产生驱动力的重要所在。)

我们可以以职业发展为基准进行学习,从而避免漫无目,东一下,西一下的“乱学”。

千里之行,始于足下。无论未来的发展如何规划,都是从当下的工作开始起步的。

那么,我们就以当前工作为核心,把工作后的学习内容大致分为如下三个区域:核心区、扩展区和外延区。

三个区域

  1. 核心区:指在工作中直接使用到的知识和技能。例如:用Java语言编程,用Excel算账,用PPT做宣传材料等。

    这部分非学不可,不然现在工作不保。

     

  2. 扩展区:指与当前或未来工作(有转岗转行需求)有关,但并不会立刻就用到的知识技能。

    如果学了这部分内容,很可能对自己未来的职业发展有支持作用。

     

  3. 外延区:包罗万象,所有没有纳入前两个区域的内容都可以归属此区。

重点困扰区域

核心区的学习对于一般合格的员工都不成问题。不学就要失业,自然动力十足。而且学了马上就能实践,非常利于掌握。

外延区原本就是Just Have A Try,不必投入太多时间精力,以体验和了解为主。大不了根本不学。

真正困扰大家的是扩展区的内容。

扩展区的学习可以分为软硬两个方面的技能。(从这个角度划分的话,而外延区也可分为软硬两个部分。不过,核心区仅包括硬技能。)

扩展区的软技能

软技能:指管理能力、交流能力、表达能力等soft skills。

软技能无论工作生活,每天都用得上,不过往往没有现成文档指令,只要照着做就能达到某种效果。

这类技能,一般不太可能有速成的培训班,需要长期的揣摩和积累,才有可能进步。

掌握这类技能,最好的办法就是处处留心,经常性的回顾和总结,也就是俗话说的琢磨。

相关的书籍,讲授如何管理,如何写作之类的有不少,可以作为辅助。不过只有和应用结合,在实践中验证理论,才可能有效果。

扩展区的硬技能

硬技能:指具体的技术和知识(多为科技方面)。

这部分更接近于课本知识,对逻辑思维要求较高,在一定程度上,可以靠集中突击来掌握。

扩展区的硬技能,实际是提出这个问题的同学们关注的部分。这种关注,是由这部分内容的性质决定的。

扩展区硬技能的性质

【必要性】

核心区的知识技能一般是用到什么学什么,比较零碎,不成体系,而且很多时候,也深入不下去。想要真的在业务领域达到一定的深度广度,就需要扩展区来补充。

【可行性】

扩展区一般不必被工作单位或老板指定,也因此享有了较大的自由度,可以自行安排学习内容和时间。

【消耗性】

扩展区的学习,和工作相关又不能占用工作时间。因此只能使用自己的业余时间来学,同时要学得深入,还得投入大量精力。很容易打成一场消耗战。

学习的困境

如今,有那么多热门技术(例如:数据分析、机器学习等等),每一种都充斥着各种各样或免费或费用很低的资料、课件、分享、培训。从理论到实践都有讲解。

许多同学自己也制订了详细的学习计划,把计划全部业余时间都用到了吸收各种新的知识技术上。

可是,很多人花费了大量时间,最后却好像没学到什么。这又是为什么呢?

困境的原因

直接原因:精力分散,不够专注,各个方向都有涉猎,但却都仅限于略知皮毛。

深层原因:驱动力不足以让自己专注。

根本原因:没有足够渴望的目标,无法调动自身能量形成驱动力。

有效学习的驱动力

有效学习的核心

其实,无论哪个区域的内容,最为有效的学习都无外乎:带着问题学习

我有一个问题,迫切的想要找到答案。我在读的书、在听的课、在看的代码里就有这个问题的答案,或者至少能帮我找到解决它的思路——在这样的背景之下去学,自然能够专注得起来,深入的下去。

有效学习的驱动力

很显然,扩展区的学习,如果和核心区目标一致,能够迅速将学习成果应用到本职工作上去,那想必能达到事半功倍的效果,至少能够持续获得学习的动力。

如果对现在的工作并没有很大兴趣,非常想要投身进入其他领域,那么不妨参照这个成功转行的例子,考虑一下脱产学习。这样一来精力集中,二来也是背水一战,逼一下自己。

如果既和工作无关,又没有热爱到足够为它辞职,恐怕就需要极大的毅力和自制力才能有效的学习了。

行文到此,之前的部分,是提示你去挖掘自己学习的驱动力;后面的部分,是讲能够使学习过程更有效的具体方法。

但是,所有的理论、方法、工具、提示,都只有在驱动力具备的情况下才能够生效

 

学习的驱动力的问题,是他人无论如何无法代替或帮助你产生的,必须要靠你自己解决。找到自己足够渴望的目标,以目标实现的前景为激励来促使自己产生驱动力——这是你只能自己一个人完成的任务。

有效学习的方法

 

要点和过程

有效学习有三个要点目标明确系统性强足够深入。三者缺一不可。

新的技术知识那么多,如果今天学点这个,明天学点那个,搞成狗熊掰棒子肯定收获甚微。选定目标是最重要的。

学习之初,首先要有一个明确的scope——我要学习哪个领域里面的哪些内容。同时得清楚,学了这个东西,要用来干什么,最终会把它用到什么事情上去。

明确了要学什么,学了用来干什么,也就可以确定一个知识体系(至少是其中一个结构分明的分支)。并进一步确定,对这个体系中的内容需要了解到什么深度,这就有了一个深度目标。

有了体系和深度,进而可以列举出所需要掌握的各个知识模块。

在此基础上,再去指定具体的课表和学习计划。

总结一下

i)明确知识范畴和应用目的;

ii)划定知识体系并确定深度目标;

iii)填充知识模块;

iv)制定针对具体模块各个击破的学习计划;

v)执行学习计划。

其中的 i)- iii)可以借鉴做作文列提纲的办法:在勾勒出轮廓之后,先把知识结构的骨干勾勒出来,分为篇章,列出大标题,再在其中填注小标题。

举例说明

目标:笔者要学习基于机器学习的自然语言处理,具体的应用是开发聊天机器人的语言理解模块。

调研:通过 i) 向有类似经验的同事请教; ii) 到网上搜索综述性文章; iii) 查找实践类的文章、类似开源项目……等一系列手段。笔者了解到,最起码有两件事情必须要做:意图分类和实体提取。

构建体系:为了用机器学习实现这两件事,就需要用到分类和seq2seq预测模型。进一步,为了获取意图,可能还需要做文本聚类。

确定深度:再通过进一步查询资料得知,要了解这些模型的运行原理,就得读公式,那么就需要求导、求微分、求积分、矩阵运算、概率统计等方面的知识。

填充内容:同时为了在现实的数据上应用这些模型,需要掌握将文本转化为向量空间模型的能力,评测模型质量的能力,和数据清洗整理的能力。

所有这些能力又都是以编码能力为支撑的。

制定提纲:有了上面这些,就可以构建如下这个提纲。

为了开发聊天机器人语言理解模块学习机器学习的内容提纲

A. 数学

a. 数学分析:求导、微分、积分

b. 线性代数:向量基本运算,矩阵基本运算,矩阵分解,多种矩阵的性质

c. 概率统计:古典概率模型,贝叶斯公式,常见概率分布及其公式和特点

 

B. 数据处理和向量模型空间的构建

        a. 文本标注

        b. Bagging & Boosting

c. 中文分词方法及原理

d. n-gram模型原理

e. bi-gram文本特征提取

f. 计算文档tf-idf 及其信息熵

C. 模型原理及公式

a. Linear Regression(最小二乘法)

b. Logestic Regression(极大似然估计)

c. Naive Bayes

d. Decision Tree(ID3, C4.5)

e. SVM

f. CRF

g. KMeans

h. Spectral Clustering

i. LDA

D. 模型的构建和验证

        a. Binary-Classification vs Multi-Classification

        b. Normalization & Regularization

c. Validation & Test

d. Cross Validation Methods

e. Precesion, Recall, F1Score

f. ROC, AUC

E. 工具及语言

       a. Python,Java,C#类比及对比

       b. Python 库,Java 库,C# 库

       c. 分词工具(jieba分词)和词库

       d. word2vec

F. 实践

如上只是第一个版本,可以先依据它制定一个为期两到三个月的学习计划。在执行过程中,根据新的认识和具体需要可随时调整提纲和计划。

关于培训

对于自己完全不了解的领域,很多人会选择参加培训。

笼统而言,用自己金钱和时间换取他人的知识和经验当然没问题,甚至可能是更高效的办法。但前提是对方得真的有知识和经验(不是忽悠),而且TA所提供的是你所需要的。否则,不过是浪费钱和时间而已。

要正确判断一门培训课程的质量,除了常识和阅历,还一定要对所学内容有所了解。一无所知,就看广告报个班,即使有幸碰到了好的老师和课程,能吸收的恐怕也非常有限。

所以,笔者对于有偿培训的建议是:慎重,了解后再选择

最好是能够自己列出上面那样的课程提纲后,再去对照提纲寻找满足内容需求的课程。就算不能列出小节名,至少对于需要哪几个部分的知识要有所了解。

对于全新领域,要制作这么一份提纲的确有一定困难。不过,现在的各种资源那么丰富,有各式各样的书籍、文章、论坛、微信/QQ群、免费讲座和分享等可以利用。

只要是有心人,善于利用资源,肯投入进去研究,总还是能够先对自己的目标领域勾勒一个轮廓和大致框架出来的。

有效学习的几点提示

分享几个笔者认为行之有效的日常学习Tips。

关联

 

把新学到的东西和日常的工作、生活联系起来,进行思考。比如:将理论代入现实,不同领域间事物的类比,相似内容的对比等。

以身边的实例来检测理论。不仅能够加深理论知识的理解,而且有助于改进日常事物的处理方法。

记录

准备一个笔记本,纸的或者电子的。有什么发现、感想、疑问、经验等等,全都记下来。

如果是对某个话题、题目有比较完整的想法,最好能够及时整理成文,至少记录下要点。

隔一段时间后把笔记整理一下,把分散的点滴整理成块,一点点填充自己的“思维地图”。

分享

知识技能这种东西,学了,就得“得瑟”——把学习到的新知识、理论、方法,分享给更多的人。如此一来,倒逼自己整理体系、记忆要点,堪称与人方便自己方便的最佳实例。

把自己的感想、体会、经验分享出来也是同理,还多出了锻炼自己逻辑思维能力和归纳总结能力。一举多得,何乐而不为?

外延区的意义

外延区的内容完全可以和自己的工作、专业没有任何关系。

可以肆无忌惮读任何自己想读的书,享受与前辈精英分享思维成果的乐趣。

除了学术类的内容,烹饪、烘培、音乐、美术、插画、煮咖啡……什么都可以尝试一下。

笔者建议大家尝试一下这些完全没有接触过的领域。

一则,可以调剂一下,放松身心,作为休闲的一种方式。

二则,可以从更广泛的角度去理解“学习”这件事。

三则,也可以稍许体会一下“斜杠”的难度。

现在,鼓励大家成为斜杠中青年也渐渐成了励志类自媒体的一种风气。斜杠真的那么容易吗?

反正,自从我学了几次裁缝之后,真心觉得:这些东西,用来玩很有意思,用来赚钱可比当码农难多了累多了,还是把本职工作干好吧。

php框架我该用哪个

最近学习研究了好多的PHP代码,最后发现要开发一个成熟可用的web程序,最好的办法还是研究一个好的框架,然后在此基础上高效的完成任务。

先看看视频教程,然后在去比较着选用一个合适的框架吧。YII 和 ThinkPHP 选择一个吧,还是先从thinkPHP入门吧,毕竟这个教程多,文件体积也小。先从这个入手把框架弄懂。

就这样吧。

一点想法

家教网,教育电子平台,现代教育技术支撑平台、

学生,学习课程,便宜,甚至免费,获取人工辅导(需求自定、知识、时间节点)支付费用,可以辅导小同学

教师,辅导学生获取收益,发布视频获取人气和收益。公开课赚人气。

平凡之路

我出生在一个小山村里,抱着走出山村,走进城市,去过城市人生活的信念,用功读书。命运给我敞开了大门,我终于走出了祖辈生活的山村,来到了城里读书学习。大学里更是把学习放在第一位,就为了毕业能够留在城里工作,不再回到农村。可是没想到命运跟我开了一个玩笑,苦苦追求的理想变成了泡影。
从学校毕业,我却被分到县里最偏僻遥远的高崖乡。刚接到通知,想死的心都有,觉得命运真会作弄人,要是到那种鸡不鸣,狗不叫的地方去教书,几年回不来,恐怕这辈子想找个好女婿都难。我存着侥幸心理,打电话向局长苦苦哀求,能不能考虑重新给我安排一个教学地点,局长毫不犹豫地说,已经决定的事,不能改了。
那一夜,我辗转反侧,彻夜未眠。真想放弃这个职业外出闯荡,可是自己除了教书不会做别的工作,这年头打工没有技术,又没有一把子力气。做什么工作也不行。想想家中年迈的父母,他们供我上学也不容易,还有年幼的弟妹,他们需要我挣钱养活呢。这工作虽然在山村,可是工资有保障,思前想后,这种念头随之打消了。第二天,我背着铺盖行李,经过四个小时的长途跋涉终于来到了这个“世外桃源。”
刚到村子时,我真的傻眼了,那么大的村子里,只稀稀拉拉住着十几户人家,一间间土坯房七零八散地坐落在哪里。因年久失修,早已破败不堪。村子里除了一些老弱病残,年轻力壮的人都早已外出打工。当然我去的学校能相比好一点,半土半砖,也就是说房子的前面是用转垒成的,也许是为了好看的缘故吧。一共三间房子,一间是孩子们的教室,一件是堆放杂物,一件就是宿舍兼厨房。那时候,多么盼望这些孩子都不要念书,去放牛羊,帮家里种地干活,这样就可以把学校撤了,我也不用在山里受苦了。每天,我除了给孩子们上课,还要自己拾柴挑水做饭,日子过得相当煎熬。这些苦都还能忍受,最不能忍受的是寂寞,刚从灯红酒绿的城市来到山村,那无边的寂寞每天都在滋生蔓延。虽然自己也是山村出身的人,可是也过了几年的城里生活,对城里的生活有了印象,再回到山村生活真的很不习惯。
一晃教师节到了,我根本无心去顾及这些,这么贫困落后的地区谁会知道教师节是干啥的。日子每天在恍恍惚惚中度过。9月10早上,我像往常一样去给孩子们上课。当我说了一声,“上课”,仅有的十个孩子异口同声地说,“老师,节日快乐。”班长李梅拿着一张用纸做的贺卡走到我跟前,满含着泪水对我说:“老师节日快乐,这张贺卡是咱班全体同学亲手制作的,上面每一个人写了一句想对您说的话,老师,我知道你不喜欢这个地方,甚至也不喜欢我们,可我们真的很喜欢你,也喜欢听你上课。”说着开始抽泣起来。“老师不要离开我们,如果你走了,我们就没有机会学到知识,也没有可能走出大山,看到外面的世界。”李梅早已泣不成声,其他孩子也跟着哭起来。有几个学生边哭边走到我跟前,只见张丹手里拿着三个核桃,李娟拿着两个热气腾腾的玉米棒子,李鹏英拿着一瓶自家的蜂蜜。李兰拿着一双缝得七扭八歪的鞋垫子,上边绣着一根大大的蜡烛。说:“老师,这是我自己绣的,绣得不好,是我的一点心意。”十个学生围在我的身边,我再也控制不住自己的情绪,俯下身子,和孩子们抱在一起。深情地对孩子们说;“只要有你们在,我便不离不弃,一定会好好给你们教书的。”这时候我才觉得自己身上的担子有多重,才知道自己以前是太不应该了。山村走出的孩子,再回到山村教山村的孩子读书,该是一件多么好的事情,我却不安心在山村教书,总想走出去,太不应该了。我谴责着自己,下决心一定好好教书,为了这些可爱的孩子。
傍晚时分,门外传来一阵“咚咚咚”的敲门声,拉开门一看,门口站着村里所有的大人,其中有几位手里还拿着什么东西,“刘老师,天气冷了,我们听娃娃回来说,老师的被子有点薄,大家就一家拿出十块钱,让班车司机从县城捎了个丝绵被,刚好趁着过节送给您,这是大家的一点心意,您一定要收下。”无论我怎样婉言拒绝,乡亲们都不肯拿回去,他们把被子铺到了床上。我看着他们这样热心也不好拒绝,心想只有好好地教他们的孩子读书,来报答他们的一片心意。他们把被子铺好了,又拿出了鸡蛋、核桃、红薯,说村里没有什么好东西,这都是自己家里的东西,老师别嫌弃,尝尝鲜。他们放下东西一窝蜂地走了,任我怎么追也追不上。看着乡亲们远去的背影,眼眶湿润了,暗暗下定决心,从此以后要好好爱这里的孩子和乡亲们,虽然他们贫穷落后,可他们有一颗朴实善良的心啊,得知道知恩图报啊!把自己的知识传授给他们,让他们有个更好的未来。
也许人的心态变了,一切就变了。在后来的日子,每天上课、做饭、挑水、批改作业反倒乐此不疲,孩子们经常会和我一起去挑水,甚至抢着抬水。每次上山拾柴,孩子们就像跟屁虫一样跟着我,一边拾柴,一边叽叽喳喳地说个不停,再加上眼前青山绿水、鸟语花香,让人觉得真的是一种享受。就这样我在这个小山村待了下来,一心一意地把自己当成这个村里的一分子。村里有个写写画画的事情,他们找到我,我都乐此不疲的去帮忙。小山村在我眼里也越来越美了,每天早上听着小鸟的鸣叫声醒来,傍晚看着灿烂的晚霞送孩子回家。日子过得充实又快乐。
也许,今生,我将沿着这条平凡的路走下去,没有鲜花和掌声,甚至,还会经历很多艰难坎坷,但我已下定决心,永远不后悔。贫瘠的山村里,没有美丽的风景,却有那些善良的村民关心我,可爱的孩子喜欢陪伴我。人这一生,想要追求的东西很多,在欲望里挣扎过,再回归到心灵的净土,我发现,我已经真正走向成熟了,我找到了适合自己的路。这条路,是心路。

美丽的千湖湿地公园

@小不点

今天,我带大家去一个千阳人都知道的地方,那就是——千湖湿地公园。

刚到门口,会看见一座假山,由一块又一块的大石头做成,这座假山大约有19米高,10米宽,50多米长,上面刻着“千湖”两个大字,遒劲有力,假山前是一片休闲广场,晚饭过后,锻炼身体的人蜂拥而至,广场大妈随着音乐翩翩起舞。几个小朋友骑着自己心爱的自行车,动作熟练而流畅,人们不时的为他们欢呼。

进入到千湖湿地里面不远,一块石头上用红色毛笔写着“亲水湾”三个大字,千湖湿地景色最优美的地方——亲水湾到了。不远处的湖水一望无际,十分清澈,甚至可以映出人们的影子。有几个爱好垂钓的老人在湖边钓鱼,钓鱼的人一点儿也不心急,一声不吭,好像早知道自己一定会钓上鱼似的。

亲水湾的旁边我们会看见攀爬的一面高墙,攀岩活动再次不时开展。一个身材娇小的大姐姐自告奋勇的走上攀爬的高墙边,起初,这位姐姐爬了一小半就想下来,围观的人们喊道:“继续爬!继续爬!”。这位大姐姐听见后,便鼓起勇气爬上去,到岔路口时,这位大姐姐毫不犹豫的选择了最难的一条路,爬到了最顶层,人们都为这位大姐姐欢呼了起来。

千湖湿地公园还有被称作东方宝石的国家保护野生鸟类:朱鹮。它洁白的羽毛,艳红的头冠和黑色的长嘴,加上细长的双脚漂亮极了。朱鹮飞翔时翅膀下、尾巴下露出极其明显的粉红色羽毛,叫声清脆,又为千湖湿地公园再添景色。

千湖湿地公园真美啊,真是儿童的乐园。

韩信,一个问题孩子的成长史

最近,去了一趟汉中,参观了汉中的著名历史人文景点,拜将坛(台)。仔细回顾了汉大将军韩信的个人历史,他为汉朝统一作出了不可磨灭的军事贡献。

韩信的生平简介是这样写的:幼失双亲,不事农商,专好兵书,曾乞食、受辱胯下。就这么一个问题孩子最终成长成为一代著名的大将军。放在今天来看,韩信还是一个十足的问题儿童,如果在学校也是不讨老师喜欢的孩子,在家更不是。那么韩信是怎么成才的呢?专好兵书!

这也就回到了另一个问题上,因材施教的问题。人好什么,还是学什么最好。现代教育制度都采用的集体授课制,抹杀了好多孩子的兴趣,升学压力更是逼迫父母也逼迫孩子就在需要考试的那些科目上投入更多的时间和精力,而把孩子本身的兴趣爱好都抹杀了,虽然我们到了大学后开始分专业,但从我的工作实际情况来看,好多学生到高三报志愿的时候了,也不知道自己喜欢什么,想成为一个什么样的人。更甚至,我们在高一的时候就已经给孩子分文理科了,让孩子做一个不能后悔的选择。但他们在前面的受教育中并没有发现自己的兴趣所在、爱好所在,至少大部分孩子是这样的。如果把韩信也放在今天的教育模式下,肯定也是会被遗误的。

作为教育工作者、亦或家长,从小培养孩子的兴趣、发现他的爱好所在、至关重要,在接受基础文化课的教育过程中,也一定要在孩子喜欢的事情上去下功夫,而不能强孩子所难,甚至有的家长以自己为参考,让孩子去实现家长没有实现的理想,那是错误的。

关于韩信,今天就说这么点吧,他的故事很多的。