本文转自:http://www.cnblogs.com/Seekr/archive/2012/06/15/2550894.html
Symfoy2 是什么?
PHP世界里又一广受关注的web MVC框架? Fabien Potencier 却不这么说!
Fabien Potencier这样定义Symfoy2 是个什么东西:
首先,Symfony2 是一个独立,松散的,有组织严密的PHP组件集合,它可以为你解决一些web开发中遇到的一般性问题。
其次,基于这些组件,Symfoy2 也可以作为一个独立的web框架使用。
那么Symfony2 是一个MVC框架吗?
Fabien Potencier 说Symfony2从来没有把自己定义为一个MVC框架!
那它是什么? Fabien Potencier 我们从来不关心MVC模式,关心的只有各个关注点的分离(separation of concerns)。
但是Symfony2 还是提供了部分的MVC模式的实现:比如Controller部分,View部分却没有Mode部分不过你可以通过和它紧密继承的ORM(Doctrine2和Propel)实现。
从这个角度看Symfony的确也没有逃出web MVC框架的圈子啊!!!
Fabien Potencier 又说Symfony2从来就没有想靠这些ORM来使自己成为另一个MVC的追随者,我们的目标更远大!
告诉你吧, Symfony2 是一个HTTP框架或者说是一个Request/Response 框架。我们紧盯的目标不是MVC模式,而是HTTP协议,我们是更低级的更基础的框架。
我们为什么要这么说呢? 有根据的!
近几年随着web的发展,有时候你只需要创建一组REST API,所有的逻辑都放到浏览器端,服务器端只提供数据就是一种web了。不信你看 backbone.js !
再说了,MVC模式只不过是Web 应用程序的其中一种实现方式罢了。
剥去所有框架模式的皮,你看看那个web程序不是处理一个接收到的Request然后返回一个Response啊?
我们Symfony2 抓住的就是web程序的根本! 再说我们众多的HTTP流媒体有哪个会选择使用MVC呢?
总之,我们Symfony2比MVC更靠近根本,我们更底层,更通用!!!
说起Symfony2,Fabien Potencier说我们有着更加远大的目标,怎么解释呢?
Symfony2 将继续专注于Pack技术的研究和创新!我们相信她会继续推动web的向前发展。
先看看Symfony2 中我们已经包含的创新吧!
从Bundles,HTTP 缓存,分布式,依赖注入,模板引擎,声明式配置,资产管理,稳定的API到web分析器等等一系列技术都对web的发展起到了巨大的推动作用。
“ 要知道一个独立的框架永远不可能成为PHP世界里的一个标准,所以Symfony2 在探寻另外一条路!”
“ 共享无处不在。”
“ 我们不能重复制造轮子。”
因此,我们紧密的集成了Monolog,Composer,Doctrine,Propel,Assetic,Twig,Swiftmailer等伟大产品。
更重要的是我们想跟大家分享我们的工作!
所以,我们最终选择了走组件(components)化这条路!
我们将为一切web项目提供建筑模块,无论是个人项目还是商业项目,更或者是开源项目!
据说在Symfony2 的代码中可能会有标志为@api的类或者方法,它意味着一个方法从名字到参数以及返回值都不会因为Symfony2发展版本而变化,所以,如果
你的项目只使用了这些,那么你就不用担心Symfony2的版本升级问题。
看看Symfony2 现在拥有的组件吧:
DependencyInjection
EventDispatcher
HttpFoundation
DomCrawler
ClassLoader
CssSelector
HttpKernel
BrowserKit
Templating
Translation
Serializer
Validator
Security
Routing
Console
Process
Config
Finder
Locale
Yaml
Form
Fabien 简单介绍了几个bundle:
1. ClassLoader:
实现了PSR-o 标准(自动加载具有命名空间的类,适用于PHP5.3以上)的自动加载器,同时它也能按照PEAR命名规则加载类。它非常灵活可以基于子命名空间在不同的目录中查询要加载的类。你甚至可以为一个命名空间指定多个目录。
<span> 1</span> <span>require_once</span> __DIR__.'/src/Symfony/Component/ClassLoader/UniversalClassLoader.php'<span>; </span><span> 2</span> <span> 3</span> <span>use</span><span> Symfony\Component\ClassLoader\UniversalClassLoader; </span><span> 4</span> <span> 5</span> <span>$loader</span> = <span>new</span><span> UniversalClassLoader(); </span><span> 6</span> <span>$loader</span>->registerNamespaces(<span>array</span><span>( </span><span> 7</span> 'Symfony' => <span>array</span>(__DIR__.'/src', __DIR__.'/symfony/src'), <span> 8</span> 'Doctrine\\Common' => __DIR__.'/vendor/doctrine-common/lib', <span> 9</span> 'Doctrine\\DBAL' => __DIR__.'/vendor/doctrine-dbal/lib', <span>10</span> 'Doctrine' => __DIR__.'/vendor/doctrine/lib', <span>11</span> 'Monolog' => __DIR__.'/vendor/monolog/src', <span>12</span> <span>)); </span><span>13</span> <span>$loader</span>->registerPrefixes(<span>array</span><span>( </span><span>14</span> 'Twig_' => __DIR__.'/vendor/twig/lib', <span>15</span> <span>)); </span><span>16</span> <span>$loader</span>->register();
如果你想获取更加高的执行效率,可以选择使用APC缓存版Universal类加载器。
2.Console 命令行工具
在创建web应用程序时使用命令行工具很方便,你可以想如下代码一样创建自己的命令行工具:
<span> 1</span> <span>use</span><span> Symfony\Component\Console\Application; </span><span> 2</span> <span>use</span><span> Symfony\Component\Console\Input\InputInterface; </span><span> 3</span> <span>use</span><span> Symfony\Component\Console\Input\InputArgument; </span><span> 4</span> <span>use</span><span> Symfony\Component\Console\Input\InputOption; </span><span> 5</span> <span>use</span><span> Symfony\Component\Console\Output\OutputInterface; </span><span> 6</span> <span> 7</span> <span>$console</span> = <span>new</span><span> Application(); </span><span> 8</span> <span>$console</span> <span> 9</span> ->register('ls'<span>) </span><span>10</span> ->setDefinition(<span>array</span><span>( </span><span>11</span> <span>new</span> InputArgument('dir', InputArgument::REQUIRED, 'Directory name'), <span>12</span> <span> )) </span><span>13</span> ->setDescription('Displays the files in the given directory'<span>) </span><span>14</span> ->setCode(<span>function</span> (InputInterface <span>$input</span>, OutputInterface <span>$output</span><span>) { </span><span>15</span> <span>$dir</span> = <span>$input</span>->getArgument('dir'<span>); </span><span>16</span> <span>17</span> <span>$output</span>->writeln(<span>sprintf</span>('Dir listing for <info>%s</info>', <span>$dir</span><span>)); </span><span>18</span> <span> }) </span><span>19</span> <span>; </span><span>20</span> <span>$console</span>->run();
3.YAML 一种现在很流行的配置格式。
<span>use</span><span> Symfony\Component\Yaml\Yaml; </span><span>$array</span> = Yaml::parse(<span>$file</span><span>); </span><span>print</span> Yaml::dump(<span>$array</span>);
4. Finder 优秀文件资源的操作接口。
<span> 1</span> <span>use</span><span> Symfony\Component\Finder\Finder; </span><span> 2</span> <span> 3</span> <span>$finder</span> = <span>new</span><span> Finder(); </span><span> 4</span> <span> 5</span> <span>$iterator</span> = <span>$finder</span> <span> 6</span> -><span>files() </span><span> 7</span> ->name('*.php'<span>) </span><span> 8</span> ->depth(0<span>) </span><span> 9</span> ->size('>= 1K'<span>) </span><span>10</span> -><span>in(__DIR__); </span><span>11</span> <span>12</span> <span>foreach</span> (<span>$iterator</span> <span>as</span> <span>$file</span><span>) { </span><span>13</span> <span>print</span> <span>$file</span>->getRealpath()."\n"<span>; </span><span>14</span> }
你甚至可以用它获取远程服务器文件系统中的资源,比如获取Amazon S3上的文件:
<span>1</span> <span>$s3</span> = <span>new</span> \Zend_Service_Amazon_S3(<span>$key</span>, <span>$secret</span><span>); </span><span>2</span> <span>$s3</span>->registerStreamWrapper("s3"<span>); </span><span>3</span> <span>4</span> <span>$finder</span> = <span>new</span><span> Finder(); </span><span>5</span> <span>$finder</span>->name('photos*')->size('< 100K')-><span>date</span>('since 1 hour ago'<span>); </span><span>6</span> <span>foreach</span> (<span>$finder</span>->in('s3://bucket-name') <span>as</span> <span>$file</span><span>) { </span><span>7</span> <span>print</span> <span>$file</span>->getFilename()."\n"<span>; </span><span>8</span> }
5.Process 进程组件,你可以用来在一个外部进程中执行命令!下面例子是执行一个简单的目录列表命令并返回结果:
<span> 1</span> <span>use</span><span> Symfony\Component\Process\Process; </span><span> 2</span> <span> 3</span> <span>$process</span> = <span>new</span> Process('ls -lsa'<span>); </span><span> 4</span> <span>$process</span>->setTimeout(3600<span>); </span><span> 5</span> <span>$process</span>-><span>run(); </span><span> 6</span> <span>if</span> (!<span>$process</span>-><span>isSuccessful()) { </span><span> 7</span> <span>throw</span> <span>new</span> RuntimeException(<span>$process</span>-><span>getErrorOutput()); </span><span> 8</span> <span>} </span><span> 9</span> <span>10</span> <span>print</span> <span>$process</span>->getOutput();
如果你想监控执行过程,你可以给run方法传入一个匿名方法:
<span> 1</span> <span>use</span><span> Symfony\Component\Process\Process; </span><span> 2</span> <span> 3</span> <span>$process</span> = <span>new</span> Process('ls -lsa'<span>); </span><span> 4</span> <span>$process</span>->run(<span>function</span> (<span>$type</span>, <span>$buffer</span><span>) { </span><span> 5</span> <span>if</span> ('err' === <span>$type</span><span>) { </span><span> 6</span> <span>echo</span> 'ERR > '.<span>$buffer</span><span>; </span><span> 7</span> } <span>else</span><span> { </span><span> 8</span> <span>echo</span> 'OUT > '.<span>$buffer</span><span>; </span><span> 9</span> <span> } </span><span>10</span> });
6.DomCrawler jQuery的php版本!你可以用它导航定位HTML的DOM结构或者XML文档。
<span>1</span> <span>use</span><span> Symfony\Component\DomCrawler\Crawler; </span><span>2</span> <span>3</span> <span>$crawler</span> = <span>new</span><span> Crawler(); </span><span>4</span> <span>$crawler</span>->addContent('<html><body><p>Hello World!</p></body></html>'<span>); </span><span>5</span> <span>6</span> <span>print</span> <span>$crawler</span>->filterXPath('descendant-or-self::body/p')->text();
7.CssSelector 我们经常用XPath来访问Dom结构,其实用Css 选择器更加容易,这个组件就是把Css选择器转为XPath等效的东西。
<span>1</span> <span>use</span><span> Symfony\Component\CssSelector\CssSelector; </span><span>2</span> <span>3</span> <span>print</span> CssSelector::toXPath('div.item > h4 > a');
所以你可以使用CssSelector 和DomCrawler来替代XPath:
<span>1</span> <span>use</span><span> Symfony\Component\DomCrawler\Crawler; </span><span>2</span> <span>3</span> <span>$crawler</span> = <span>new</span><span> Crawler(); </span><span>4</span> <span>$crawler</span>->addContent('<html><body><p>Hello World!</p></body></html>'<span>); </span><span>5</span> <span>6</span> <span>print</span> <span>$crawler</span>->filter('body > p')->text();
8.HttpFoundation
该组件只是在PHP的相关web内容上面增加了一个面向对象层,包括Request,Response,Uploaded files,Cookies,Sessions...
<span>1</span> <span>use</span><span> Symfony\Component\HttpFoundation\Request; </span><span>2</span> <span>use</span><span> Symfony\Component\HttpFoundation\Response; </span><span>3</span> <span>4</span> <span>$request</span> = Request::<span>createFromGlobals(); </span><span>5</span> <span>echo</span> <span>$request</span>->getPathInfo();
你用它可以很容易的创建自己的Request 和 Response:
<span>1</span> <span>$request</span> = Request::create('/?foo=bar', 'GET'<span>); </span><span>2</span> <span>echo</span> <span>$request</span>-><span>getPathInfo(); </span><span>3</span> <span>4</span> <span>5</span> <span>$response</span> = <span>new</span> Response('Not Found', 404, <span>array</span>('Content-Type' => 'text/plain'<span>)); </span><span>6</span> <span>$response</span>->send();
9.Routing
路由组件和Request对象是相互配合着把Request转换为Response。
<span> 1</span> <span>use</span><span> Symfony\Component\HttpFoundation\Request; </span><span> 2</span> <span>use</span><span> Symfony\Component\Routing\Matcher\UrlMatcher; </span><span> 3</span> <span>use</span><span> Symfony\Component\Routing\RequestContext; </span><span> 4</span> <span>use</span><span> Symfony\Component\Routing\RouteCollection; </span><span> 5</span> <span>use</span><span> Symfony\Component\Routing\Route; </span><span> 6</span> <span> 7</span> <span>$routes</span> = <span>new</span><span> RouteCollection(); </span><span> 8</span> <span>$routes</span>->add('hello', <span>new</span> Route('/hello', <span>array</span>('controller' => 'foo'<span>))); </span><span> 9</span> <span>10</span> <span>$context</span> = <span>new</span><span> RequestContext(); </span><span>11</span> <span>12</span> <span>//</span><span> this is optional and can be done without a Request instance</span> <span>13</span> <span>$context</span>->fromRequest(Request::<span>createFromGlobals()); </span><span>14</span> <span>15</span> <span>$matcher</span> = <span>new</span> UrlMatcher(<span>$routes</span>, <span>$context</span><span>); </span><span>16</span> <span>17</span> <span>$parameters</span> = <span>$matcher</span>->match('/hello');
10.EventDispatcher
<span> 1</span> <span>use</span><span> Symfony\Component\EventDispatcher\EventDispatcher; </span><span> 2</span> <span>use</span><span> Symfony\Component\EventDispatcher\Event; </span><span> 3</span> <span> 4</span> <span>$dispatcher</span> = <span>new</span><span> EventDispatcher(); </span><span> 5</span> <span> 6</span> <span>$dispatcher</span>->addListener('event_name', <span>function</span> (Event <span>$event</span><span>) { </span><span> 7</span> <span>//</span><span> ...</span> <span> 8</span> <span>}); </span><span> 9</span> <span>10</span> <span>$dispatcher</span>->dispatch('event_name');
11.DependencyInjection
<span>use</span><span> Symfony\Component\DependencyInjection\ContainerBuilder; </span><span>use</span><span> Symfony\Component\DependencyInjection\Reference; </span><span>$sc</span> = <span>new</span><span> ContainerBuilder(); </span><span>$sc</span> ->register('foo', '%foo.class%'<span>) </span>->addArgument(<span>new</span> Reference('bar'<span>)) ; </span><span>$sc</span>->setParameter('foo.class', 'Foo'<span>); </span><span>$sc</span>->get('foo');
12.HttpKernel
Http 内核组件提供了HTTP协议中最有活力的部分,以下面接口的形式定义展示,它也是Symfony2框架的核心。
<span> 1</span> <span>interface</span><span> HttpKernelInterface </span><span> 2</span> <span>{ </span><span> 3</span> <span>/*</span><span>* </span><span> 4</span> <span> * Handles a Request to convert it to a Response. </span><span> 5</span> <span> * </span><span> 6</span> <span> * @param Request $request A Request instance </span><span> 7</span> <span> * </span><span> 8</span> <span> * @return Response A Response instance </span><span> 9</span> <span>*/</span> <span>10</span> <span>function</span> handle(Request <span>$request</span>, <span>$type</span> = self::MASTER_REQUEST, <span>$catch</span> = <span>true</span><span>); </span><span>11</span> }
它接受一个Request输入并返回一个Response输出。 只要遵循这个接口规定,你就能使用Symfony2中所有的精彩内容。
下面使用Symfony2 组件来创建一个简单的框架:
<span> 1</span> <span>$routes</span> = <span>new</span><span> RouteCollection(); </span><span> 2</span> <span>$routes</span>->add('hello', <span>new</span> Route('/hello', <span>array</span>('_controller' => <span> 3</span> <span>function</span> (Request <span>$request</span><span>) { </span><span> 4</span> <span>return</span> <span>new</span> Response(<span>sprintf</span>("Hello %s", <span>$request</span>->get('name'<span>))); </span><span> 5</span> <span> } </span><span> 6</span> <span>))); </span><span> 7</span> <span> 8</span> <span>$request</span> = Request::<span>createFromGlobals(); </span><span> 9</span> <span>10</span> <span>$context</span> = <span>new</span><span> RequestContext(); </span><span>11</span> <span>$context</span>->fromRequest(<span>$request</span><span>); </span><span>12</span> <span>13</span> <span>$matcher</span> = <span>new</span> UrlMatcher(<span>$routes</span>, <span>$context</span><span>); </span><span>14</span> <span>15</span> <span>$dispatcher</span> = <span>new</span><span> EventDispatcher(); </span><span>16</span> <span>$dispatcher</span>->addSubscriber(<span>new</span> RouterListener(<span>$matcher</span><span>)); </span><span>17</span> <span>18</span> <span>$resolver</span> = <span>new</span><span> ControllerResolver(); </span><span>19</span> <span>20</span> <span>$kernel</span> = <span>new</span> HttpKernel(<span>$dispatcher</span>, <span>$resolver</span><span>); </span><span>21</span> <span>22</span> <span>$kernel</span>->handle(<span>$request</span>)->send();
ok, 这就是框架了!
如果想添加一个HTTP反向代理以获取HTTP caching和ESI(Edge Side Includes)带来的好处,那么这样做!
<span>1</span> <span>$kernel</span> = <span>new</span> HttpKernel(<span>$dispatcher</span>, <span>$resolver</span><span>); </span><span>2</span> <span>3</span> <span>$kernel</span> = <span>new</span> HttpCache(<span>$kernel</span>, <span>new</span> Store(__DIR__.'/cache'));
想对它做一下功能测试:
<span>1</span> <span>$client</span> = <span>new</span> Client(<span>$kernel</span><span>); </span><span>2</span> <span>$crawler</span> = <span>$client</span>->request('GET', '/hello/Fabien'<span>); </span><span>3</span> <span>4</span> <span>$this</span>->assertEquals('Fabien', <span>$crawler</span>->filter('p > span')->text());
想要一个好看的错误展示页面?
<span>1</span> <span>$dispatcher</span>->addSubscriber(<span>new</span> ExceptionListener(<span>function</span> (Request <span>$request</span><span>) { </span><span>2</span> <span>$msg</span> = 'Something went wrong! ('.<span>$request</span>->get('exception')->getMessage().')'<span>; </span><span>3</span> <span>4</span> <span>return</span> <span>new</span> Response(<span>$msg</span>, 500<span>); </span><span>5</span> }));
(1).转动一次;旋转一圈。 南朝 梁武帝 《白紵辞》:“短歌流目未肯前,含笑一转私自怜。” 唐 顾况 《悲歌》之二:“我心皎洁君不知,辘轳一转一惆怅。” 元 王实甫 《西厢记》第一本第一折:“怎当他临去秋波那一转!”《儿女英雄传》第四回:“且说那女子把那石头撂倒在平地上,用右手推着一转,找着那个关眼儿伸进两个指头去勾住了。”
(2).提炼一次。 晋 葛洪 《抱朴子·金丹》:“其一转至九转,迟速各有日数,多少以此知之耳。”
(3).计算一遍。 南朝 宋 刘义庆 《世说新语·文学》:“尝算浑天不合,诸弟子莫能解。或言 玄 ( 郑玄 )能者。 融 ( 马融 )令算,一转便决。”
(4).四周。《儒林外史》第十四回:“两边一望,一边是江,一边是湖,又有那山色一转围着。”《儒林外史》第三十回:“诸名士看这湖亭时,轩窗四起,一转都是湖水围绕。”
(1).转换勋阶一次。《新唐书·太宗纪》:“从伐 高丽 无功者,皆赐勋一转。”
(2).表数量。 清 翟灏 《通俗编·数目》引 李翊 《俗呼小录》:“ 杭州 以柴四圆箍为一转。”
ZDIC.NET 汉 典 网
【一转语】 禅宗机锋往来的关键处,称“玄关”。破“玄关”必须亲证实悟。以片言只语,拨转对方的心机,使之冲破“玄关”,“柳暗花明又一村”,谓之“转语”。《景德传灯录·百丈怀海禅师》指出:“古人只错对一转语,五百生堕野狐身。”可见“转语”的重要。举几个例子。问:“不起一念有过无过?”答:“须弥山。”又如问;“磨砖岂成镜耶?”答:“磨砖既不成镜,坐禅岂得成佛耶!”后亦用“一转语”指别出心裁。如宋·张元干《青玉案》词序:“贺方回所作,世间和韵者多矣。余经行松江,何啻百回,念欲下一转语。”也指用一二句话让人恍然大悟。如胡适《尝试篇》:“尝试成功自古无,放翁此语未必是;我今为下一转语,自古成功在尝试。”
この文は決まり文句だと考えるべきですが、感情や気分のコントロールは常にそれほどうまくはありません。時には怒りや嫉妬、恨みも出てくるでしょう。私はいつも自分の感情を隠すことができない人間だと言ってきましたが、喜び、怒り、悲しみ、喜びはすべて私の顔に書かれています。一見、単純な言葉のように聞こえますが、そうではありません。ある日、私が何かについてひどく悲しくて怒り、それを隠そうとしたとき、用心深い友人が私を見つけて、きっぱりと言いました。「あなたは真顔だと本当に醜いです。」悪い感情が消えないのであれば、悪い感情を隠す方法を知る必要はなく、私たちがしなければならないのは、悪い感情を解決する方法を知ることだけであることが分かりました。 。 今はリソースや情報が発達しており、良い文章や記事を読む方法はたくさんあります。良い記事を皆さんと共有したいと思っています。 私たちが皆、自分自身を理解し、自分自身を幸せにそして幸せにする方法を知っている自分になれることを願っています。 --------------------------------------共有分割線------ ----------------------------- 【転載】記事出典:天智文書 古代、予測技術である人相学が形成され、これは、人の五感に保存されている情報を使用して、人の不幸、幸運、幸運、不幸を推測する特殊な人相学であり、「人には顔が一つある」という格言があるように、中国人の間ではよく知られています。人の五感や見た目が一目でわかり、人の第一感覚や第一印象も与えます。街に行ったり、自由市場に行ったりしたときに、歩いて見て、誰が紳士で誰が泥棒かを見分けてください。泥棒は普通の人と違う視力を持っているからです。 国家革命時代、龍と蛇が入り乱れ、無謀な英雄が乱立し、社会秩序が混乱する乱世の真っただ中の中国、上海警察署に一人の達人がいた。法を遵守するパトロールマンは、尋問の後、逮捕した全員が窃盗と悪行を犯したことを自白します。彼が習得した人相学は正確であり、10 人を捕まえることができます。科学的な。 実際、人は生まれたとき、その人の人生の幸運も不運もすべて顔の特徴に含まれています。その人の顔の特徴は、その人の寿命の長さ、早死を含むその人の人生の情報地図です。両親の数、子供の数、兄弟の数、結婚の幸不幸はすべて人の五感に反映されます。心優しい人が外見的には狡猾に見えるのに、心優しく邪悪な人が外見的には狡猾に見えるのはなぜでしょうか。これは永遠の哲学を反映しています。 よく言われる心とは心の奥底にある思考活動のことであり、単に人間の心を指すものではありません。あなたの心にあるものはすべて、顔の特徴に反映されます。人の心に何か刺激的なことや楽しいことがあったとき、その人はたくさん笑い、何か楽しいことが起こったに違いないと他の人に知らせます。反対に、人に悲しいことが起こったとき、その人の顔には悲しみの表情が現れます。つまり、人の喜び、怒り、悲しみ、喜び、悲しみ、思考、恐怖、驚きはすべて五感に反映されており、五感は非常に正確な測定器なのです。 『黄帝内経』には、外は内から現れ、内は外から表れるという説があります。胃の問題を抱えた人が医師の診察を受けると、医師は患者の鼻を見て、匂いを嗅ぎ、質問し、切開することで、その人が胃に問題があると判断します。ホログラフィック理論の表現です。人が人に対して深い憎しみを抱き、復讐のためにその人を殺したいと思うとき、その目は火を吐き、激しい表情を浮かべ、殺意を示すことができます。手術が成功するかどうか占ってもらうために占い師を探したところ、占い師はこう言いました。「あなたは殺意があるようです。危険を冒さないでください。」 私の知っている60代の老婦人は、周儀を愛しています。みんなは彼女をミャオポーと呼んでいます。私が彼女に初めて会ったのは三角花園でした。彼女は私に運試しをしてほしいと言いました。彼女の左目の下に三本の縞模様があるのが見えましたが、その下の縞模様は左にまっすぐではなく、左の頬骨を横切って下に向かって伸びていました。彼女はこう答えました。「だから、私の末の娘が若い男と駆け落ちしたのです。今はどこに行ったのか分かりません。」 1か月以上経って、ミャオさんに再び会ったとき、彼女はすでに幼い娘の用事から帰宅しており、ミャオさんの蚕の縞模様がまっすぐになっているのが見えました。これは、内面の思考によって外見が変化することを示しています。幼い娘がいなくなった後、彼女は一日中娘のことを寂しがり、心配していました。その思考のエネルギーが彼女の顔立ちに反映されていました。 「見かけは心から生じ、心で環境が変わる」という言葉は、多くの人がよく口にする仏教の言葉です...全文の続きはこちら >>