您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 随州分类信息网,免费分类信息发布

Symfoy2 是什么(转),symfoy2_PHP教程

2024/8/26 5:07:25发布22次查看
symfoy2 是什么(转),symfoy2本文转自: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命名规则加载类。它非常灵活可以基于子命名空间在不同的目录中查询要加载的类。你甚至可以为一个命名空间指定多个目录。
1 require_once __dir__.'/src/symfony/component/classloader/universalclassloader.php'; 2 3 use symfony\component\classloader\universalclassloader; 4 5 $loader = new universalclassloader(); 6 $loader->registernamespaces(array( 7 'symfony' => array(__dir__.'/src', __dir__.'/symfony/src'), 8 'doctrine\\common' => __dir__.'/vendor/doctrine-common/lib', 9 'doctrine\\dbal' => __dir__.'/vendor/doctrine-dbal/lib',10 'doctrine' => __dir__.'/vendor/doctrine/lib',11 'monolog' => __dir__.'/vendor/monolog/src',12 ));13 $loader->registerprefixes(array(14 'twig_' => __dir__.'/vendor/twig/lib',15 ));16 $loader->register();
如果你想获取更加高的执行效率,可以选择使用apc缓存版universal类加载器。
2.console 命令行工具
在创建web应用程序时使用命令行工具很方便,你可以想如下代码一样创建自己的命令行工具:
1 use symfony\component\console\application; 2 use symfony\component\console\input\inputinterface; 3 use symfony\component\console\input\inputargument; 4 use symfony\component\console\input\inputoption; 5 use symfony\component\console\output\outputinterface; 6 7 $console = new application(); 8 $console 9 ->register('ls')10 ->setdefinition(array(11 new inputargument('dir', inputargument::required, 'directory name'),12 ))13 ->setdescription('displays the files in the given directory')14 ->setcode(function (inputinterface $input, outputinterface $output) {15 $dir = $input->getargument('dir');16 17 $output->writeln(sprintf('dir listing for %s', $dir));18 })19 ;20 $console->run();
3.yaml 一种现在很流行的配置格式。
use symfony\component\yaml\yaml; $array = yaml::parse($file); print yaml::dump($array);
4. finder 优秀文件资源的操作接口。
1 use symfony\component\finder\finder; 2 3 $finder = new finder(); 4 5 $iterator = $finder 6 ->files() 7 ->name('*.php') 8 ->depth(0) 9 ->size('>= 1k')10 ->in(__dir__);11 12 foreach ($iterator as $file) {13 print $file->getrealpath().\n;14 }
你甚至可以用它获取远程服务器文件系统中的资源,比如获取amazon s3上的文件:
1 $s3 = new \zend_service_amazon_s3($key, $secret);2 $s3->registerstreamwrapper(s3);3 4 $finder = new finder();5 $finder->name('photos*')->size('date('since 1 hour ago');6 foreach ($finder->in('s3://bucket-name') as $file) {7 print $file->getfilename().\n;8 }
5.process 进程组件,你可以用来在一个外部进程中执行命令!下面例子是执行一个简单的目录列表命令并返回结果:
1 use symfony\component\process\process; 2 3 $process = new process('ls -lsa'); 4 $process->settimeout(3600); 5 $process->run(); 6 if (!$process->issuccessful()) { 7 throw new runtimeexception($process->geterroroutput()); 8 } 9 10 print $process->getoutput();
如果你想监控执行过程,你可以给run方法传入一个匿名方法:
1 use symfony\component\process\process; 2 3 $process = new process('ls -lsa'); 4 $process->run(function ($type, $buffer) { 5 if ('err' === $type) { 6 echo 'err > '.$buffer; 7 } else { 8 echo 'out > '.$buffer; 9 }10 });
6.domcrawler jquery的php版本!你可以用它导航定位html的dom结构或者xml文档。
1 use symfony\component\domcrawler\crawler;2 3 $crawler = new crawler();4 $crawler->addcontent('hello world!
');5 6 print $crawler->filterxpath('descendant-or-self::body/p')->text();
7.cssselector 我们经常用xpath来访问dom结构,其实用css 选择器更加容易,这个组件就是把css选择器转为xpath等效的东西。
1 use symfony\component\cssselector\cssselector;2 3 print cssselector::toxpath('div.item > h4 > a');
所以你可以使用cssselector 和domcrawler来替代xpath:
1 use symfony\component\domcrawler\crawler;2 3 $crawler = new crawler();4 $crawler->addcontent('hello world!
');5 6 print $crawler->filter('body > p')->text();
8.httpfoundation
该组件只是在php的相关web内容上面增加了一个面向对象层,包括request,response,uploaded files,cookies,sessions...
1 use symfony\component\httpfoundation\request;2 use symfony\component\httpfoundation\response;3 4 $request = request::createfromglobals();5 echo $request->getpathinfo();
你用它可以很容易的创建自己的request 和 response:
1 $request = request::create('/?foo=bar', 'get');2 echo $request->getpathinfo();3 4 5 $response = new response('not found', 404, array('content-type' => 'text/plain'));6 $response->send();
9.routing
路由组件和request对象是相互配合着把request转换为response。
1 use symfony\component\httpfoundation\request; 2 use symfony\component\routing\matcher\urlmatcher; 3 use symfony\component\routing\requestcontext; 4 use symfony\component\routing\routecollection; 5 use symfony\component\routing\route; 6 7 $routes = new routecollection(); 8 $routes->add('hello', new route('/hello', array('controller' => 'foo'))); 9 10 $context = new requestcontext();11 12 // this is optional and can be done without a request instance13 $context->fromrequest(request::createfromglobals());14 15 $matcher = new urlmatcher($routes, $context);16 17 $parameters = $matcher->match('/hello');
10.eventdispatcher
1 use symfony\component\eventdispatcher\eventdispatcher; 2 use symfony\component\eventdispatcher\event; 3 4 $dispatcher = new eventdispatcher(); 5 6 $dispatcher->addlistener('event_name', function (event $event) { 7 // ... 8 }); 9 10 $dispatcher->dispatch('event_name');
11.dependencyinjection
use symfony\component\dependencyinjection\containerbuilder;use symfony\component\dependencyinjection\reference; $sc = new containerbuilder();$sc ->register('foo', '%foo.class%') ->addargument(new reference('bar'));$sc->setparameter('foo.class', 'foo'); $sc->get('foo');
12.httpkernel
http 内核组件提供了http协议中最有活力的部分,以下面接口的形式定义展示,它也是symfony2框架的核心。
1 interface httpkernelinterface 2 { 3 /** 4 * handles a request to convert it to a response. 5 * 6 * @param request $request a request instance 7 * 8 * @return response a response instance 9 */10 function handle(request $request, $type = self::master_request, $catch = true);11 }
它接受一个request输入并返回一个response输出。 只要遵循这个接口规定,你就能使用symfony2中所有的精彩内容。
下面使用symfony2 组件来创建一个简单的框架:
1 $routes = new routecollection(); 2 $routes->add('hello', new route('/hello', array('_controller' => 3 function (request $request) { 4 return new response(sprintf(hello %s, $request->get('name'))); 5 } 6 ))); 7 8 $request = request::createfromglobals(); 9 10 $context = new requestcontext();11 $context->fromrequest($request);12 13 $matcher = new urlmatcher($routes, $context);14 15 $dispatcher = new eventdispatcher();16 $dispatcher->addsubscriber(new routerlistener($matcher));17 18 $resolver = new controllerresolver();19 20 $kernel = new httpkernel($dispatcher, $resolver);21 22 $kernel->handle($request)->send();
ok, 这就是框架了!
如果想添加一个http反向代理以获取http caching和esi(edge side includes)带来的好处,那么这样做!
1 $kernel = new httpkernel($dispatcher, $resolver); 2 3 $kernel = new httpcache($kernel, new store(__dir__.'/cache'));
想对它做一下功能测试:
1 $client = new client($kernel);2 $crawler = $client->request('get', '/hello/fabien');3 4 $this->assertequals('fabien', $crawler->filter('p > span')->text());
想要一个好看的错误展示页面?
1 $dispatcher->addsubscriber(new exceptionlistener(function (request $request) {2 $msg = 'something went wrong! ('.$request->get('exception')->getmessage().')';3 4 return new response($msg, 500);5 }));
一转是什
(1).转动一次;旋转一圈。 南朝 梁武帝 《白紵辞》:“短歌流目未肯前,含笑一转私自怜。” 唐 顾况 《悲歌》之二:“我心皎洁君不知,辘轳一转一惆怅。” 元 王实甫 《西厢记》第一本第一折:“怎当他临去秋波那一转!”《儿女英雄传》第四回:“且说那女子把那石头撂倒在平地上,用右手推着一转,找着那个关眼儿伸进两个指头去勾住了。”
(2).提炼一次。 晋 葛洪 《抱朴子·金丹》:“其一转至九转,迟速各有日数,多少以此知之耳。”
(3).计算一遍。 南朝 宋 刘义庆 《世说新语·文学》:“尝算浑天不合,诸弟子莫能解。或言 玄 ( 郑玄 )能者。 融 ( 马融 )令算,一转便决。”
(4).四周。《儒林外史》第十四回:“两边一望,一边是江,一边是湖,又有那山色一转围着。”《儒林外史》第三十回:“诸名士看这湖亭时,轩窗四起,一转都是湖水围绕。”
(1).转换勋阶一次。《新唐书·太宗纪》:“从伐 高丽 无功者,皆赐勋一转。”
(2).表数量。 清 翟灏 《通俗编·数目》引 李翊 《俗呼小录》:“ 杭州 以柴四圆箍为一转。”
zdic.net 汉 典 网
【一转语】 禅宗机锋往来的关键处,称“玄关”。破“玄关”必须亲证实悟。以片言只语,拨转对方的心机,使之冲破“玄关”,“柳暗花明又一村”,谓之“转语”。《景德传灯录·百丈怀海禅师》指出:“古人只错对一转语,五百生堕野狐身。”可见“转语”的重要。举几个例子。问:“不起一念有过无过?”答:“须弥山。”又如问;“磨砖岂成镜耶?”答:“磨砖既不成镜,坐禅岂得成佛耶!”后亦用“一转语”指别出心裁。如宋·张元干《青玉案》词序:“贺方回所作,世间和韵者多矣。余经行松江,何啻百回,念欲下一转语。”也指用一二句话让人恍然大悟。如胡适《尝试篇》:“尝试成功自古无,放翁此语未必是;我今为下一转语,自古成功在尝试。”
(转)相由心生 境随心转是什?
这句应该算是老生常谈了,但是对于情绪和心境的控制并不是时时刻刻都能做得那么好。也会偶有愤怒,妒嫉,怨恨产生。从前一直说自己是个不懂掩藏情绪的人,喜怒哀乐全部写在脸上。乍一听好像说的是种直率,但其实不然。直至一日在我因为某事极度悲愤而又试图掩盖时,仍然被一位心细的朋友发现并且直言:你板着脸的时候真的很难看。­原来不是要懂得隐藏不好的情绪,如果坏情绪不走,是无法从根本上改变周遭的;我们做的是要懂得如果化解不好的情绪。 现在资源信息发达,有很多途径可以读到好的文字和文章,在此愿以好文与大家分享。 希望我们都能做一个懂得自己,懂得如何让自己快乐和幸福的自己。 --------------------------------------共享的分割线------------------------------------ 【转载】文章来源:天机文献 在古代,形成了一种预测术面相学,是专门以人的五官所储存的信息来推断一个人的祸、福、吉、凶的,面相学,是中国人家喻户晓的,俗话说:人是一面相。一眼就能看出一个人的五观及外貌,同时带给人的第一感观及印象。当你走到大街上或者是去自由市场,走一走,看一看,哪是正人君子,哪是小偷,你一眼就能认出来,因为小偷跟正常人的眼神不一样。 在国民革命时期,中国正处在乱世之秋,龙蛇混杂,草莽逞英雄时代,社会秩序很乱在大上海警察局里,就有一位精通。相法的巡警,凡是他所见到的贼眉鼠眼之人见了就抓每当审问后所抓之人均供认,曾有过偷窃和做坏事的行为,他能抓十个准十个,这就说明:他所掌握的相法是准确的,科学的。 其实,人一生下来,一生中的吉凶祸福,全都包含在人的五官当中人的五官相就是一副人的生命信息图,人的寿命的长短,父母的早亡,子女的多少,兄弟的祸福,婚姻的克离,无不表现在人的五官之中。为什么心地善良的人,他所长的相貌就和善心地凶恶的人,所长出的相貎就狡狯呢?这就反出了一条亘古不变的哲理一相心生。 心是人们常说的内心深处的思维活动,并不单纯指的是人的心脏。内心里想的什么,在五官上就能现表什么。当一个人内心有兴奋的或有使人高兴的事情,这个人就笑口常开,让别人一看便知道在他身上一定有喜悦的事情发生。相反当一个人有悲伤的事情发生,表现在他面上则是哭丧的表情。总之,人的喜、怒、哀、乐、悲、思、恐、惊无不表现在五官相上,五官就是一个很精确的测量仪。 黄帝内经中有表里如一论,外是由内而发,内则靠外来表现。当一个有胃病的人,去看医生,医师则用望、闻、问、切给他诊病,当医生看到病人的鼻准头有红而赤的颜色时,就能判断出此人有胃病,这就是全息理论表现形式。人的思维也是一样,当一个人对另一个人有深仇大恨,并且想杀掉这个人要报仇的时候,他的两眼足以能喷出火来,目露凶光,双目流露杀气,当他想找一位相师占卜一下,问一下行动是否成功的时候,相师就说:你目露杀气,请你不要挺而走险。 我认识一位爱好周易的老太太,约有六十来岁,大家都叫她苗坡。第一次与她相识,是在三角花‘园,她让我给她测一下运气。我看到她相上左边眼下卧蚕,有三条纹,最下面的一条纹,不是平直向左方伸展,而是向左下方穿过左颧,我间:苗姨,你的小女儿在家吗?她回答:哎呀,我就是为这事来预测的,小女儿随一个小伙子私奔了,现在不知道她去了什么地方?事过月余,再遇到苗太太时,间及小女儿的事,已经回家来了,再瞧瞧苗太太的那条卧蚕纹也平直伸展了。这就说明,相是随内心的思维而发生变化的。当她的小女儿走后,她整日里思念、烦恼,这种思维能量就表现在五官上了。相由心生,境随心转这句话出自佛教的揭语,被很多人经常挂在......余下全文>>
http://www.bkjia.com/phpjc/890826.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/890826.htmltecharticlesymfoy2 是什么(转),symfoy2 本文转自:http://www.cnblogs.com/seekr/archive/2012/06/15/2550894.html symfoy2 是什么? php世界里又一广受关注的web mvc框架?...
随州分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录