国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Symfony2 是什么(轉)

2019-11-15 01:50:06
字體:
來源:轉載
供稿:網友
Symfony2 是什么(轉)

本文轉自:http://m.survivalescaperooms.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 現在擁有的組件吧:

DependencyInjectionEventDispatcherHttpFoundationDomCrawlerClassLoaderCSSSelectorHttpKernelBrowserKitTemplatingTranslationSerializerValidatorSecurityRoutingConsoleProcessConfigFinderLocaleYamlForm

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     ->setDescr

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('< 100K')->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('<html><body><p>Hello World!</p></body></html>');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('<html><body><p>Hello World!</p></body></html>');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/Depen
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 来凤县| 通辽市| 湘阴县| 三门峡市| 长寿区| 闻喜县| 铁岭县| 平江县| 和龙市| 峨山| 永寿县| 宁武县| 广饶县| 祁东县| 灵丘县| 保靖县| 麻城市| 黑水县| 高阳县| 勐海县| 揭阳市| 信阳市| 宾川县| 舞钢市| 富裕县| 穆棱市| 启东市| 龙胜| 陕西省| 理塘县| 武鸣县| 高邮市| 安溪县| 句容市| 车致| 登封市| 壶关县| 沙洋县| 通渭县| 百色市| 仁怀市|