tebazil/yii2-vodka-behavior

Yii2 恶搞扩展,拦截应用响应并替换为笑话消息

0.0.0 2015-09-05 13:50 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:15:00 UTC


README

Vodka 是一个笑话 "醉酒" 应用行为,以一定的概率(默认为 0.75)拦截响应,并用默认或自定义生成器中的某些 "名言" 替换。适用于 Web 和控制台应用。
以下是输出示例

VODKA BEHAVIOR says:
Obna obbbaaoo n  bnbnb oabb bnn 
a bn  a anba baaooaobboboaabna n  nboo oan b a   oa nbonbao ona b
  obnob b nob bb  nnnb  boaban b n o anon oaoannan oaaooaaababobo
anonob a anooaao nb aa ooo bb  n bnnabab abbbbno bnb nnoboo noano
ooanabaaoonn anaao ab n an  ona  n o  anaaa nbobbann  anoo boa ob
banaooa    noanaonbbno o oono  a .

安装

安装此扩展的最佳方式是通过 composer

运行以下命令之一:

$ composer require tebazil/yii2-vodka-behavior

或者将以下内容添加到您的 composer.json 文件的 require 部分:

"tebazil/yii2-vodka-behavior": "*"

基本用法

VodkaBehavior 是一个典型的 yii2 行为,可以附加到应用上。最简单的方式是在应用的配置部分附加行为

return [
    'id' => 'basic-console',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log', 'gii'],
    ...
	'as vodka'=> [
		'class'=>'tebazil\yii2\behaviors\vodka\VodkaBehavior',
	],
	...
	'components'=>[
	...
	],
	...

现在,当你调用应用(即使是非存在的路由)时,会在浏览器/控制台以一定的概率显示 "名言"。

高级用法

您还可以从一些额外的配置中受益。您可以配置 generatorsprobabilityphrase 以进一步自定义醉酒行为。
phrase(字符串)- 是生成器输出的前缀短语。默认值是 VODKA BEHAVIOR says:
probability(浮点数)- 是输出被拦截的概率,范围从 0 到 1。0 表示行为永远不会触发。1 表示始终触发。默认值是 0.75generators 是生成输出的匿名函数数组。当你定义此参数时,默认生成器会被你指定的替换掉。匿名函数不接受任何参数并返回输出。为了通用使用,请确保从生成器返回字符串。默认的 generators 是包含两个捆绑生成器的数组。

以下是完整配置的示例

return [
    'id' => 'basic-console',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log', 'gii'],
    ...
	'as vodka'=> [
		'class'=>'tebazil\yii2\behaviors\vodka\VodkaBehavior',
		'probability'=>0.95,
		'phrase'=>
		    'Hi, I am your application ... Intrigued, huh? Here is what I have to say:',
		'generators'=>[
		function() {
		  return 'I think everything is possible. 
		  You just have to listen to your heart and work hard.';
		},
		function() {
		    $coreDevs = ['Qiang','Cebe','Samdark','Will Smith'];
		    $endingPhrases = [
		        'The resemblance is unique.',
		        'Sometimes they drink tea together.',
		        'But only in the dark.',
		    ];
		    $randMember = function($arr) { 
		        return $arr[array_rand($arr)]; 
		    };
		    return 
		        $randMember($coreDevs).' looks like '.
		        $randMember($coreDevs).'. '.
		        $randMember($endingPhrases);
		}
		]
	],
	...
	'components'=>[
	...
	],
	...

工作原理

当发生 Application::EVENT_BEFORE_REQUEST 时,计算概率。如果按照概率不是运行时间,则不发生任何操作。如果是运行时间

  • WebApplication 的情况下,设置响应的 data 属性,然后发送响应。
  • ConsoleApplication 的情况下,输出将被回显,然后应用执行结束。

高级生成器使用

您可以在生成器中返回对象和数组。在 ConsoleApplication 的情况下,它们将通过 print_r 显示。在 WebApplication 的情况下,结果将取决于您尝试以何种格式输出生成器的结果。例如,在 html 格式的情况下,您可能会在没有实现 __toString() 的数组和对象中收到错误。