0

0

Flight

php中文网

php中文网

发布时间:2016-08-08 09:29:06

|

2837人浏览过

|

来源于php中文网

原创

说明:  Flight官网 & 原文

Flight是什么?Flight是一个快速,简单,可扩展的PHP框架。Flight能使你快速和轻松地创建RESTful Web应用。
<span><span>require</span><span><span>'</span>flight/Flight.php<span>'</span></span>;</span><span></span><span><span>Flight</span><span>::</span>route(<span><span>'</span>/<span>'</span></span>, <span>function</span>(){</span><span><span>echo</span><span><span>'</span>hello world!<span>'</span></span>;</span><span>});</span><span></span><span><span>Flight</span><span>::</span>start();</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>Learn more<h1helvetica neue ui>需求<phelvetica neue ui font-size:16px line-height:25.6000003814697px>Flight需要<codeliberation mono font-size:14px padding:0.2em margin:0px>PHP 5.3或更高版本。<h1helvetica neue ui>License<phelvetica neue ui font-size:16px line-height:25.6000003814697px>Flight is released under the MIT license.<h1helvetica neue ui>安装<phelvetica neue ui font-size:16px line-height:25.6000003814697px>1. 下载之后取出Flight框架的文件,放入你的web目录中。<phelvetica neue ui font-size:16px line-height:25.6000003814697px>2. 配置你的web服务器<phelvetica neue ui font-size:16px line-height:25.6000003814697px>对于<span>Apache</span>服务器,如下编辑你的<codeliberation mono font-size:14px padding:0.2em margin:0px>.htaccess文件:<pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:16px line-height:1.45 padding:16px word-wrap:normal color:rgb background-color:rgb><codeliberation mono padding:0px margin:0px word-break:normal border:0px display:inline line-height:inherit word-wrap:normal background:transparent>RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
<phelvetica neue ui font-size:16px line-height:25.6000003814697px>对于<span>Nginx</span>服务器,添加如下内容到你的server声明中:<pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:16px line-height:1.45 padding:16px word-wrap:normal color:rgb background-color:rgb><codeliberation mono padding:0px margin:0px word-break:normal border:0px display:inline line-height:inherit word-wrap:normal background:transparent>server {
    location / {
        try_files $uri $uri/ /index.php;
    }
}
<phelvetica neue ui font-size:16px line-height:25.6000003814697px>3. 创建你的<codeliberation mono font-size:14px padding:0.2em margin:0px>index.php文件<phelvetica neue ui font-size:16px line-height:25.6000003814697px>第一步要引入这个框架。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>require</span><span><span>'</span>flight/Flight.php<span>'</span></span>;</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>接着定义一个路由并且注册一个函数去处理这个请求。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>route(<span><span>'</span>/<span>'</span></span>, <span>function</span>(){</span><span><span>echo</span><span><span>'</span>hello world!<span>'</span></span>;</span><span>});</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>最后,启动框架。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>start();</span><h1helvetica neue ui>路由<phelvetica neue ui font-size:16px line-height:25.6000003814697px>Flight中的路由是将一个URL模式(pattern)匹配到一个回调函数中。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>route(<span><span>'</span>/<span>'</span></span>, <span>function</span>(){</span><span><span>echo</span><span><span>'</span>hello world!<span>'</span></span>;</span><span>});</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>回调函数可以是能被调用的任何目标。所以你可以使用一个常规的函数:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>function</span><span>hello</span>(){</span><span><span>echo</span><span><span>'</span>hello world!<span>'</span></span>;</span><span>}</span><span></span><span><span>Flight</span><span>::</span>route(<span><span>'</span>/<span>'</span></span>, <span><span>'</span>hello<span>'</span></span>);</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>或者是一个类中的方法:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>class</span><span>Greeting</span> {</span><span><span>public</span><span>static</span><span>function</span><span>hello</span>() {</span><span><span>echo</span><span><span>'</span>hello world!<span>'</span></span>;</span><span>    }</span><span>}</span><span></span><span><span>Flight</span><span>::</span>route(<span><span>'</span>/<span>'</span></span>, <span>array</span>(<span><span>'</span>Greeting<span>'</span></span>,<span><span>'</span>hello<span>'</span></span>));</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>路由依照定义它们的顺序进行匹配。第一个匹配到请求的路由将被调用。<h2helvetica neue ui>(HTTP)方法路由<phelvetica neue ui font-size:16px line-height:25.6000003814697px>默认情况下,路由模式(patterns)能与所有的请求方法匹配。你能通过在URL前面加一个方法标识符 的方式来响应指定的方法。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>route(<span><span>'</span>GET /<span>'</span></span>, <span>function</span>(){</span><span><span>echo</span><span><span>'</span>I received a GET request.<span>'</span></span>;</span><span>});</span><span></span><span><span>Flight</span><span>::</span>route(<span><span>'</span>POST /<span>'</span></span>, <span>function</span>(){</span><span><span>echo</span><span><span>'</span>I received a POST request.<span>'</span></span>;</span><span>});</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>你还可以使用<codeliberation mono font-size:14px padding:0.2em margin:0px>|分隔符来映射多个方法到单一的回调中。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>route(<span><span>'</span>GET|POST /<span>'</span></span>, <span>function</span>(){</span><span><span>echo</span><span><span>'</span>I received either a GET or a POST request.<span>'</span></span>;</span><span>});</span><h2helvetica neue ui>正则表达式<phelvetica neue ui font-size:16px line-height:25.6000003814697px>在路由中你可以使用正则表达式:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>route(<span><span>'</span>/user/[0-9]+<span>'</span></span>, <span>function</span>(){</span><span><span>// 这个将匹配到 /user/1234</span></span><span>});</span><h2helvetica neue ui>命名参数<phelvetica neue ui font-size:16px line-height:25.6000003814697px>你可以在路由中指定命名参数,它们会被传递到你的回调函数里。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>route(<span><span>'</span>/@name/@id<span>'</span></span>, <span>function</span>(<span>$name</span>, <span>$id</span>){</span><span><span>echo</span><span><span>"</span>hello, <span>$name</span> (<span>$id</span>)!<span>"</span></span>;</span><span>});</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>你也可以通过使用<codeliberation mono font-size:14px padding:0.2em margin:0px>:分隔符在命名变量中引入正则表达式<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>route(<span><span>'</span>/@name/@id:[0-9]{3}<span>'</span></span>, <span>function</span>(<span>$name</span>, <span>$id</span>){</span><span><span>// 这个将匹配到 /bob/123</span></span><span><span>// 但是不会匹配到 /bob/12345</span></span><span>});</span><h2helvetica neue ui>可选参数<phelvetica neue ui font-size:16px line-height:25.6000003814697px>你可以通过将URL段(segments)包在括号里的方式来指定哪些命名参数是可选的。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>route(<span><span>'</span>/blog(/@year(/@month(/@day)))<span>'</span></span>, <span>function</span>(<span>$year</span>, <span>$month</span>, <span>$day</span>){</span><span><span>// 它将匹配如下URLS:</span></span><span><span>// /blog/2012/12/10</span></span><span><span>// /blog/2012/12</span></span><span><span>// /blog/2012</span></span><span><span>// /blog</span></span><span>});</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>任何没有被匹配到的可选参数将以NULL值传入。<h2helvetica neue ui>通配符<phelvetica neue ui font-size:16px line-height:25.6000003814697px>匹配只发生在单独的URL段(segments)。如果你想匹配多段,可以使用<codeliberation mono font-size:14px padding:0.2em margin:0px>*通配符。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>route(<span><span>'</span>/blog/*<span>'</span></span>, <span>function</span>(){</span><span><span>// 这个将匹配到 /blog/2000/02/01</span></span><span>});</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>要将所有的请求路由到单一的回调上,你可以这么做:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>route(<span><span>'</span>*<span>'</span></span>, <span>function</span>(){</span><span><span>// Do something</span></span><span>});</span><h2helvetica neue ui>路由的传递<phelvetica neue ui font-size:16px line-height:25.6000003814697px>当从一个被匹配到的回调函数中返回<codeliberation mono font-size:14px padding:0.2em margin:0px>true时,路由功能将继续执行,传递到下一个能匹配的路由中。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>route(<span><span>'</span>/user/@name<span>'</span></span>, <span>function</span>(<span>$name</span>){</span><span><span>// 检查某些条件</span></span><span><span>if</span> (<span>$name</span><span>!</span><span>=</span><span><span>"</span>Bob<span>"</span></span>) {</span><span><span>// 延续到下一个路由</span></span><span><span>return</span><span>true</span>;</span><span>    }</span><span>});</span><span></span><span><span>Flight</span><span>::</span>route(<span><span>'</span>/user/*<span>'</span></span>, <span>function</span>(){</span><span><span>// 这里会被调用到</span></span><span>});</span><h2helvetica neue ui>路由信息<phelvetica neue ui font-size:16px line-height:25.6000003814697px>如果你想检视匹配到的路由信息,可以请求将路由对象传递到你的回调函数中:你需要把 route方法的第三个参数设置成<codeliberation mono font-size:14px padding:0.2em margin:0px>true。这个路由对象总是会作为最后一个参数传入你的回调函数。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>route(<span><span>'</span>/<span>'</span></span>, <span>function</span>(<span>$route</span>){</span><span><span>// 匹配到的HTTP方法的数组</span></span><span><span>$route</span><span>-></span><span>methods</span>;</span><span></span><span><span>// 命名参数数组</span></span><span><span>$route</span><span>-></span><span>params</span>;</span><span></span><span><span>// 匹配的正则表达式</span></span><span><span>$route</span><span>-></span><span>regex</span>;</span><span></span><span><span>// Contains the contents of any '*' used in the URL pattern</span></span><span><span>$route</span><span>-></span><span>splat</span>;</span><span>}, <span>true</span>);</span><h1helvetica neue ui>扩展<phelvetica neue ui font-size:16px line-height:25.6000003814697px>Fligth被设计成一个可扩展的框架。这个框架带来了一系列的默认方法和组件,但是它允许你 映射你自己的方法,注册你自己的类,甚至可以重写已有的类和方法。<h2helvetica neue ui>方法的映射<phelvetica neue ui font-size:16px line-height:25.6000003814697px>你可以使用<codeliberation mono font-size:14px padding:0.2em margin:0px>map函数去映射你自定义的方法:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>// 映射你自己的方法</span></span><span><span>Flight</span><span>::</span>map(<span><span>'</span>hello<span>'</span></span>, <span>function</span>(<span>$name</span>){</span><span><span>echo</span><span><span>"</span>hello <span>$name</span>!<span>"</span></span>;</span><span>});</span><span></span><span><span>// 调用你的自定义方法</span></span><span><span>Flight</span><span>::</span>hello(<span><span>'</span>Bob<span>'</span></span>);</span><h2helvetica neue ui>类的注册<phelvetica neue ui font-size:16px line-height:25.6000003814697px>你可以使用<codeliberation mono font-size:14px padding:0.2em margin:0px>register函数去注册你自己的类:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>// 注册你定义的类</span></span><span><span>Flight</span><span>::</span>register(<span><span>'</span>user<span>'</span></span>, <span><span>'</span>User<span>'</span></span>);</span><span></span><span><span>// 得到你定义的类的一个实例</span></span><span><span>$user</span><span>=</span><span>Flight</span><span>::</span>user();</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>register方法允许你向类的构造函数传递参数。所以当你加载自定义类的时候,它将会 预初始化(pre-initialized)。你可以通过一个追加的数组来传递定义的构造函数参数。 这是一个加载数据库连接的例子:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>// 注册一个带有构造函数参数的类</span></span><span><span>Flight</span><span>::</span>register(<span><span>'</span>db<span>'</span></span>, <span><span>'</span>PDO<span>'</span></span>, <span>array</span>(<span><span>'</span>mysql:host=localhost;dbname=test<span>'</span></span>,<span><span>'</span>user<span>'</span></span>,<span><span>'</span>pass<span>'</span></span>));</span><span></span><span><span>// 得到你定义的类的一个实例</span></span><span><span>// 这里将创建一个带有你定义的参数的对象</span></span><span><span>//</span></span><span><span>//     new PDO('mysql:host=localhost;dbname=test','user','pass');</span></span><span><span>//</span></span><span><span>$db</span><span>=</span><span>Flight</span><span>::</span>db();</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>如果你传递了额外的回调函数参数,它将会在类构造完之后立即执行。这就允许你为这个新对象去 执行任何的安装过程(set up procedures)。这个回调函数会被传递一个参数,就是这个新对象的实例。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>// 这个回调函数将会传递到这个被构造的对象中</span></span><span><span>Flight</span><span>::</span>register(<span><span>'</span>db<span>'</span></span>, <span><span>'</span>PDO<span>'</span></span>, <span>array</span>(<span><span>'</span>mysql:host=localhost;dbname=test<span>'</span></span>,<span><span>'</span>user<span>'</span></span>,<span><span>'</span>pass<span>'</span></span>), <span>function</span>(<span>$db</span>){</span><span><span>$db</span><span>-></span>setAttribute(<span>PDO</span><span>::</span><span>ATTR_ERRMODE</span>, <span>PDO</span><span>::</span><span>ERRMODE_EXCEPTION</span>);</span><span>});</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>默认情况下,每次你加载一个类,你会得到一个共享的实例。如果要得到一个类的新实例, 简单的传递一个<codeliberation mono font-size:14px padding:0.2em margin:0px>false参数就行了。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>// 类的共享实例</span></span><span><span>$shared</span><span>=</span><span>Flight</span><span>::</span>db();</span><span></span><span><span>// 类的新实例</span></span><span><span>$new</span><span>=</span><span>Flight</span><span>::</span>db(<span>false</span>);</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>需要记住的是,被映射的方法优先于被注册的类。如果你用相同的名字将它们都声明了,那么只有 映射的方法会被调用。<h1helvetica neue ui>重写(Overriding)<phelvetica neue ui font-size:16px line-height:25.6000003814697px>Flight允许你按照自己的需要去重写它的默认功能,而不用修改任何框架的代码。<phelvetica neue ui font-size:16px line-height:25.6000003814697px>例如,当Flight的路由功能没有匹配到一个URL时,它会调用<codeliberation mono font-size:14px padding:0.2em margin:0px>notFound方法,发出一个通用的 <codeliberation mono font-size:14px padding:0.2em margin:0px>HTTP
 404响应。你可以使用<codeliberation mono font-size:14px padding:0.2em margin:0px>map方法去重写这个行为。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>map(<span><span>'</span>notFound<span>'</span></span>, <span>function</span>(){</span><span><span>// 显示自定义的404页面</span></span><span><span>include</span><span><span>'</span>errors/404.html<span>'</span></span>;</span><span>});</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>Flight也允许你替换这个框架的核心组件。例如你可以将默认的Router类替换成你自定义的类:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>// 注册成你自定义的类</span></span><span><span>Flight</span><span>::</span>register(<span><span>'</span>router<span>'</span></span>, <span><span>'</span>MyRouter<span>'</span></span>);</span><span></span><span><span>// When Flight loads the Router instance, it will load your class</span></span><span><span>// 当Flight加载Router实例时,将会加载到你自定义的类</span></span><span><span>$myrouter</span><span>=</span><span>Flight</span><span>::</span>router();</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>然而框架的方法诸如<codeliberation mono font-size:14px padding:0.2em margin:0px>map和<codeliberation mono font-size:14px padding:0.2em margin:0px>register是不能够被重写的。如果你尝试这么做的话你会得到一个error。<h1helvetica neue ui>过滤<phelvetica neue ui font-size:16px line-height:25.6000003814697px>Flight允许你在方法调用之前和之后去过滤它。框架里没有任何你需要记住的预定义的钩子。你可以 过滤任何被映射的自定义方法和框架中的方法。<phelvetica neue ui font-size:16px line-height:25.6000003814697px>一个过滤器函数是像这样的:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>function</span>(<span>&</span><span>$params</span>, <span>&</span><span>$output</span>) {</span><span><span>// Filter code</span></span><span>}</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>通过传入的变量,你可以操作输入参数和/或输出参数。<phelvetica neue ui font-size:16px line-height:25.6000003814697px>这样做就可以在一个方法运行之前运行一个过滤器:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>before(<span><span>'</span>start<span>'</span></span>, <span>function</span>(<span>&</span><span>$params</span>, <span>&</span><span>$output</span>){</span><span><span>// Do something</span></span><span>});</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>这样做就可以在一个方法运行之后运行一个过滤器:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>after(<span><span>'</span>start<span>'</span></span>, <span>function</span>(<span>&</span><span>$params</span>, <span>&</span><span>$output</span>){</span><span><span>// Do something</span></span><span>});</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>你可以给任何函数添加任意数量的过滤器。它们将按照声明的顺序依次被调用。<phelvetica neue ui font-size:16px line-height:25.6000003814697px>这里是一个过滤器处理的例子:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>// 映射一个自定义的方法</span></span><span><span>Flight</span><span>::</span>map(<span><span>'</span>hello<span>'</span></span>, <span>function</span>(<span>$name</span>){</span><span><span>return</span><span><span>"</span>Hello, <span>$name</span>!<span>"</span></span>;</span><span>});</span><span></span><span><span>// 添加一个前置的过滤器</span></span><span><span>Flight</span><span>::</span>before(<span><span>'</span>hello<span>'</span></span>, <span>function</span>(<span>&</span><span>$params</span>, <span>&</span><span>$output</span>){</span><span><span>// 操作这里的params</span></span><span><span>$params</span>[<span>0</span>] <span>=</span><span><span>'</span>Fred<span>'</span></span>;</span><span>});</span><span></span><span><span>// 添加一个后置的过滤器</span></span><span><span>Flight</span><span>::</span>after(<span><span>'</span>hello<span>'</span></span>, <span>function</span>(<span>&</span><span>$params</span>, <span>&</span><span>$output</span>){</span><span><span>// 操作这里的output</span></span><span><span>$output</span><span>.=</span><span><span>"</span> Have a nice day!<span>"</span></span>;</span><span>});</span><span></span><span><span>// 调用这个自定义方法</span></span><span><span>echo</span><span>Flight</span><span>::</span>hello(<span><span>'</span>Bob<span>'</span></span>);</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>这个将会输出:<pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:16px line-height:1.45 padding:16px word-wrap:normal color:rgb background-color:rgb><codeliberation mono padding:0px margin:0px word-break:normal border:0px display:inline line-height:inherit word-wrap:normal background:transparent>Hello Fred! Have a nice day!
<phelvetica neue ui font-size:16px line-height:25.6000003814697px>如果你定义了多个过滤器,你可以通过在任意一个过滤器函数中返回<codeliberation mono font-size:14px padding:0.2em margin:0px>false来终结这个过滤器链。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>before(<span><span>'</span>start<span>'</span></span>, <span>function</span>(<span>&</span><span>$params</span>, <span>&</span><span>$output</span>){</span><span><span>echo</span><span><span>'</span>one<span>'</span></span>;</span><span>});</span><span></span><span><span>Flight</span><span>::</span>before(<span><span>'</span>start<span>'</span></span>, <span>function</span>(<span>&</span><span>$params</span>, <span>&</span><span>$output</span>){</span><span><span>echo</span><span><span>'</span>two<span>'</span></span>;</span><span></span><span><span>// 如下将会终止这个过滤器链</span></span><span><span>return</span><span>false</span>;</span><span>});</span><span></span><span><span>// 这里将不会得到调用</span></span><span><span>Flight</span><span>::</span>before(<span><span>'</span>start<span>'</span></span>, <span>function</span>(<span>&</span><span>$params</span>, <span>&</span><span>$output</span>){</span><span><span>echo</span><span><span>'</span>three<span>'</span></span>;</span><span>});</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>记住,核心函数诸如<codeliberation mono font-size:14px padding:0.2em margin:0px>map和<codeliberation mono font-size:14px padding:0.2em margin:0px>register是不能够被过滤的,因为它们是被直接调用而非动态调用的。<h1helvetica neue ui>变量<phelvetica neue ui font-size:16px line-height:25.6000003814697px>Flight允许你定义变量,使得它能在应用内的任何地方被使用。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>// 保存你定义的变量</span></span><span><span>Flight</span><span>::</span>set(<span><span>'</span>id<span>'</span></span>, <span>123</span>);</span><span></span><span><span>// 在应用的其他地方使用</span></span><span><span>$id</span><span>=</span><span>Flight</span><span>::</span>get(<span><span>'</span>id<span>'</span></span>);</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>去检测一个变量是否被设置了可以这么做:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>if</span> (<span>Flight</span><span>::</span>has(<span><span>'</span>id<span>'</span></span>)) {</span><span><span>// Do something</span></span><span>}</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>去清除一个变量你可以这么做:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>// 清除这个id变量</span></span><span><span>Flight</span><span>::</span>clear(<span><span>'</span>id<span>'</span></span>);</span><span></span><span><span>// 清除所有的变量</span></span><span><span>Flight</span><span>::</span>clear();</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>Flight框架使用变量的目的还包括了配置。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>set(<span><span>'</span>flight.log_errors<span>'</span></span>, <span>true</span>);</span><h1helvetica neue ui>视图<phelvetica neue ui font-size:16px line-height:25.6000003814697px>Flight默认提供了一些基础的模板功能。调用带有模板文件和 可选的模板数据的<codeliberation mono font-size:14px padding:0.2em margin:0px>render函数,去显示一个视图模板。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>render(<span><span>'</span>hello.php<span>'</span></span>, <span>array</span>(<span><span>'</span>name<span>'</span></span><span>=></span><span><span>'</span>Bob<span>'</span></span>));</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>你传进来的模板数据,会被自动的注入到模板当中,并且可以像一个本地变量一样去引用。 模板文件就是简单的PHP文件。如果一个文件名为<codeliberation mono font-size:14px padding:0.2em margin:0px>hello.php的模板文件的内容是这样的:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Hello</span>, <span><span>'</span><?php echo $name; ?><span>'</span></span><span>!</span></span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>输出会是:<pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:16px line-height:1.45 padding:16px word-wrap:normal color:rgb background-color:rgb><codeliberation mono padding:0px margin:0px word-break:normal border:0px display:inline line-height:inherit word-wrap:normal background:transparent>Hello, Bob!
<phelvetica neue ui font-size:16px line-height:25.6000003814697px>你可以使用set函数来手动的设置视图中的变量:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>view()<span>-></span>set(<span><span>'</span>name<span>'</span></span>, <span><span>'</span>Bob<span>'</span></span>);</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>这个<codeliberation mono font-size:14px padding:0.2em margin:0px>name 变量现在在你所有的视图中都是可用的了。所以就可以简化成这样了:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>render(<span><span>'</span>hello<span>'</span></span>);</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>注意当你在render函数中指定模板名时,你可以去掉这个<codeliberation mono font-size:14px padding:0.2em margin:0px>.php的扩展名。<phelvetica neue ui font-size:16px line-height:25.6000003814697px>默认情况下Flight会在<codeliberation mono font-size:14px padding:0.2em margin:0px>views目录下寻找模板文件。你可以通过如下配置的设定来为你的模板 设置另外一个路径。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>set(<span><span>'</span>flight.views.path<span>'</span></span>, <span><span>'</span>/path/to/views<span>'</span></span>);</span><h2helvetica neue ui>布局(Layouts)<phelvetica neue ui font-size:16px line-height:25.6000003814697px>对网站来说,拥有一个单独的可交换内容的布局(layout)模板文件是很常见的。要在布局中使用渲染的内容, 你可以给<codeliberation mono font-size:14px padding:0.2em margin:0px>render函数传递一个可选的参数。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>render(<span><span>'</span>header<span>'</span></span>, <span>array</span>(<span><span>'</span>heading<span>'</span></span><span>=></span><span><span>'</span>Hello<span>'</span></span>), <span><span>'</span>header_content<span>'</span></span>);</span><span><span>Flight</span><span>::</span>render(<span><span>'</span>body<span>'</span></span>, <span>array</span>(<span><span>'</span>body<span>'</span></span><span>=></span><span><span>'</span>World<span>'</span></span>), <span><span>'</span>body_content<span>'</span></span>);</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>紧接着你的视图就有了命名为<codeliberation mono font-size:14px padding:0.2em margin:0px>header_content和<codeliberation mono font-size:14px padding:0.2em margin:0px>body_content的已保存的变量。接下来你就可以
 这样渲染你的布局了:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>render(<span><span>'</span>layout<span>'</span></span>, <span>array</span>(<span><span>'</span>title<span>'</span></span><span>=></span><span><span>'</span>Home Page<span>'</span></span>));</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>如果你的模板文件是这样的:<phelvetica neue ui font-size:16px line-height:25.6000003814697px><codeliberation mono font-size:14px padding:0.2em margin:0px>header.php:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span><span>h1</span><span>>?<span>php</span><span>echo</span><span>$heading</span>; </span><span><span>?</span>></span><span>h1</span>><phelvetica neue ui font-size:16px line-height:25.6000003814697px><codeliberation mono font-size:14px padding:0.2em margin:0px>body.php:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span><span>div</span><span>>?<span>php</span><span>echo</span><span>$body</span>; </span><span><span>?</span>></span><span>div</span>><phelvetica neue ui font-size:16px line-height:25.6000003814697px><codeliberation mono font-size:14px padding:0.2em margin:0px>layout.php:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span><span>html</span><span>></span></span><span><span><span>head</span><span>></span></span><span><span><span>title</span><span>>?<span>php</span><span>echo</span><span>$title</span>; </span><span><span>?</span>></span><span>title</span>>
<span>head</span>>
body</span>>
<span><?php </span><span><span>echo</span><span>$header_content</span>; </span><span><span>?</span>></span><span><?php </span><span><span>echo</span><span>$body_content</span>; </span><span><span>?</span>></span>
<span>body</span>>
<span>html</span>><phelvetica neue ui font-size:16px line-height:25.6000003814697px>输出会是:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb>html
> head> title>Home Pagetitle> head> body> h1>Helloh1> div>Worlddiv> body> html>自定义视图Flight允许你替换默认的视图引擎,只需简单的注册你自己的视图类即可。这里展示的是在视图中 如何使用Smarty模板引擎:
<span><span>// 加载Smarty类库</span></span><span><span>require</span><span><span>'</span>./Smarty/libs/Smarty.class.php<span>'</span></span>;</span><span></span><span><span>// 将Smarty注册成视图类</span></span><span><span>// 同时传递一个回调函数,在加载过程中配置Smarty</span></span><span><span>Flight</span><span>::</span>register(<span><span>'</span>view<span>'</span></span>, <span><span>'</span>Smarty<span>'</span></span>, <span>array</span>(), <span>function</span>(<span>$smarty</span>){</span><span><span>$smarty</span><span>-></span><span>template_dir</span><span>=</span><span><span>'</span>./templates/<span>'</span></span>;</span><span><span>$smarty</span><span>-></span><span>compile_dir</span><span>=</span><span><span>'</span>./templates_c/<span>'</span></span>;</span><span><span>$smarty</span><span>-></span><span>config_dir</span><span>=</span><span><span>'</span>./config/<span>'</span></span>;</span><span><span>$smarty</span><span>-></span><span>cache_dir</span><span>=</span><span><span>'</span>./cache/<span>'</span></span>;</span><span>});</span><span></span><span><span>// 模板中数据的赋值</span></span><span><span>Flight</span><span>::</span>view()<span>-></span>assign(<span><span>'</span>name<span>'</span></span>, <span><span>'</span>Bob<span>'</span></span>);</span><span></span><span><span>// 显示这个模板</span></span><span><span>Flight</span><span>::</span>view()<span>-></span>display(<span><span>'</span>hello.tpl<span>'</span></span>);</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>出于完备性,你还应该重写Flight的默认render方法:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>map(<span><span>'</span>render<span>'</span></span>, <span>function</span>(<span>$template</span>, <span>$data</span>){</span><span><span>Flight</span><span>::</span>view()<span>-></span>assign(<span>$data</span>);</span><span><span>Flight</span><span>::</span>view()<span>-></span>display(<span>$template</span>);</span><span>});</span><h1helvetica neue ui>错误(Error)处理<h2helvetica neue ui>错误(Errors)和异常(Exceptions)<phelvetica neue ui font-size:16px line-height:25.6000003814697px>所有的errors和exceptions都会被Flight捕获,然后传到<codeliberation mono font-size:14px padding:0.2em margin:0px>error方法。该方法默认的行为是 发出一个带有错误信息的通用的<codeliberation mono font-size:14px padding:0.2em margin:0px>HTTP
 500 Internal Server Error响应。<phelvetica neue ui font-size:16px line-height:25.6000003814697px>出于你自己的需要,你可以重写这个行为:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>map(<span><span>'</span>error<span>'</span></span>, <span>function</span>(<span>Exception</span><span>$ex</span>){</span><span><span>// 错误处理</span></span><span><span>echo</span><span>$ex</span><span>-></span>getTraceAsString();</span><span>});</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>默认情况下,错误(errors)是不会被记录日志到web服务器的。你可以通过改变配置来允许记录。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>set(<span><span>'</span>flight.log_errors<span>'</span></span>, <span>true</span>);</span><h2helvetica neue ui>Not
 Found<phelvetica neue ui font-size:16px line-height:25.6000003814697px>当一个URL没有被找到时,Flight将会调用<codeliberation mono font-size:14px padding:0.2em margin:0px>notFound方法。该方法默认的行为是 发出一个通用的<codeliberation mono font-size:14px padding:0.2em margin:0px>HTTP
 404 Not Found响应并带有简单的说明信息。<phelvetica neue ui font-size:16px line-height:25.6000003814697px>出于你自己的需要,你可以重写这个行为:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>map(<span><span>'</span>notFound<span>'</span></span>, <span>function</span>(){</span><span><span>// 处理not found</span></span><span>});</span><h1helvetica neue ui>重定向(Redirects)<phelvetica neue ui font-size:16px line-height:25.6000003814697px>你可以使用<codeliberation mono font-size:14px padding:0.2em margin:0px>redirect方法将当前请求重定向到传入的新URL中。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>redirect(<span><span>'</span>/new/location<span>'</span></span>);</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>默认情况下Flight会发出一个HTTP 303状态码。你可以选择设置一个自定义的状态码。<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>Flight</span><span>::</span>redirect(<span><span>'</span>/new/location<span>'</span></span>, <span>401</span>);</span><h1helvetica neue ui>请求<phelvetica neue ui font-size:16px line-height:25.6000003814697px>Flight将HTTP请求封装到一个单独的对象中,你可以这样获取到它:<divhelvetica neue ui font-size:16px line-height:25.6000003814697px><pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:0px line-height:1.45 padding:16px word-wrap:normal word-break:normal background-color:rgb><span><span>$request</span><span>=</span><span>Flight</span><span>::</span>request();</span><phelvetica neue ui font-size:16px line-height:25.6000003814697px>request对象提供了如下的属性:<pre class="brush:php;toolbar:false;" liberation mono font-size:14px margin-top:0px margin-bottom:16px line-height:1.45 padding:16px word-wrap:normal color:rgb background-color:rgb><codeliberation mono padding:0px margin:0px word-break:normal border:0px display:inline line-height:inherit word-wrap:normal background:transparent>url - The URL being requested
base - The parent subdirectory of the URL
method - The request method (GET, POST, PUT, DELETE)
referrer - The referrer URL
ip - IP address of the client
ajax - Whether the request is an AJAX request
scheme - The server protocol (http, https)
user_agent - Browser information
type - The content type
length - The content length
query - Query string parameters
data - Post data or JSON data
cookies - Cookie data
files - Uploaded files
secure - Whether the connection is secure
accept - HTTP accept parameters
proxy_ip - Proxy IP address of the client
<phelvetica neue ui font-size:16px line-height:25.6000003814697px>你可以通过数组或对象的方式来获取<codeliberation mono font-size:14px padding:0.2em margin:0px>query,<codeliberation mono font-size:14px padding:0.2em margin:0px>data,<codeliberation mono font-size:14px padding:0.2em margin:0px>cookies和 <codeliberation mono font-size:14px padding:0.2em margin:0px neue ui font-size:16px line-height:25.6000003814697px>files属性。<phelvetica></phelvetica></codeliberation></codeliberation></codeliberation></codeliberation></phelvetica></codeliberation>

相关文章

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

705

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

233

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

117

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

22

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

61

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

30

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

15

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

669

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

58

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
前端系列快速入门课程
前端系列快速入门课程

共4课时 | 0.4万人学习

后盾网smaryt模板引擎视频教程
后盾网smaryt模板引擎视频教程

共14课时 | 2.7万人学习

smarty完全中文手册
smarty完全中文手册

共0课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号