fatfree-f3小型php框架教程(四)

這裏還有一個重要的說明,php

$f3->route('GET /','Main->home');

這是一個動態的函數調用,可是在調用home函數以前,f3會尋找一個叫作beforeRoute()的函數而且調用它,若是你定義了的話。而後調用home,而後走以前又會調用一個叫作afterRoute()的函數。並且若是你在同一個類中定義了好幾個不一樣路由不一樣方法的好幾個route的話,他們都是調用同一組before,afterroute的。 web


動態路由:數組

以前說過了用@定義的參數如@free是能夠做爲參數調用進入函數裏面的,這裏要說的是,路由一樣也能夠這樣作。例如架構

$f3->route('GET /products/@action','Products->@action');

這樣定義起來就很方便了,一條定義就解決了一堆定義。並且調用的時候只要把@action替換成對應的product類中的函數名,就能夠直接動態調用該函數了。框架

接下來再看看靜態的變量路由和框架經常使用定義函數

// static method$f3->route('GET /public/@genre','Main::@genre');// object mode$f3->route('GET /public/@controller/@action','@controller->@action');

可是,若是你定義了參數又沒有給參數賦值,系統就會跳出HTTP 404 Not Found錯誤了。學習


路由就講到這裏了,下面講變量部分:ui

在fatfree裏面的變量定義是全局的,也就是說這個變量適用於整個MVC架構。這裏講的變量不是php中的變量啊,要區分開來,fatfree中定義變量是這樣的:this

$f3->set('var',value)

而後這個var就能夠全局用了,看了上一章的人也會發現,有些特殊字符是不能做爲變量名的,例如AUTOLOAD,這些是重載過的函數,有別的意思。而php中的變量是$var,而且不會重名,二者用$區分開來。 spa

而後下面講講基本變量語法:

數組定義

$f3->mset(
    array(
        'foo'=>'bar',
        'baz'=>123
    ));

調用變量:

$f3->get('var')

刪除變量:

$f3->clear('var')

檢查是否存在:

$f3->exists('var')


剛纔就說過一些特殊的名字是不能定義的,例如SESSION,REQUEST這些都不能夠。可是由於他們有特殊含義而且常常調用,因此在php中有他們對應的映射變量,也就是說只要改php中這個量fatfree這個量也會變化。分別是$_SESSION和$_REQUEST。

也就說只要在前面加"%_"就好了、

這種定義好的全局變量不少,能夠看這裏來了解一下


接下里開始快速學習,學過php或者C基本語法的都能看懂:

$f3->set('a','fire');$f3->concat('a','cracker');echo $f3->get('a'); // returns the string 'firecracker'$f3->copy('a','b');echo $f3->get('b'); // returns the same string: 'firecracker'

還有一些原始函數:

$f3->set('colors',array('red','blue','yellow'));$f3->push('colors','green'); // works like PHP's array_push()echo $f3->pop('colors'); // returns 'green'$f3->unshift('colors','purple'); // similar to array_unshift()echo $f3->shift('colors'); // returns 'purple'$f3->set('grays',array('light','dark'));$result=$f3->merge('colors','grays'); // merges the two arrays

由於要作項目了,接下來會加快講解,不懂的評論問我。


Fatfree的錯誤機制:

若是你以爲系統內置的錯誤機制沒有很好地適應你的程序,你能夠本身生成本身的錯誤機制:

$f3->set('ONERROR',
    function($f3) {
        // custom error handler code goes here        // use this if you want to display errors in a        // format consistent with your site's theme        echo $f3->get('ERROR.title');
    });

error變量實際上是一個內置的數組,他的元素分別是:

`ERROR.code` - the HTTP status error code (`404`, `500`, etc.)
`ERROR.status` - a brief description of the HTTP status code. e.g. `'Not Found'`
`ERROR.title` - header and page title
`ERROR.text` - error context
`ERROR.trace` - stack trace stored in an `array()`


在作項目的時候最好把debug的最高等級設定好,這樣就能更容易找出錯誤的根本緣由:

$f3->set('DEBUG',3);

可是若是項目已經debug好了能夠上市了,那就改成

$f3->set('DEBUG',0);


以前說過能夠用set方法定義全局變量,可是咱們須要的全局變量通常是不少的,若是所有都寫到代碼裏面那就顯得很庸餘,因此咱們常把一堆set的全局變量寫在‘setup.cfg’裏面,而後:

$f3->config('setup.cfg');

或者把setup寫成這樣

[globals]num=123; this is a regular stringstr=abc; another way of assigning stringsstr="abc"; this is an arrayhash[x]=1hash[y]=2hash[z]=3; dot-notation is recognized toohash.x=1hash.y=2hash.z=3; this is also an arrayitems=7,8,9; array with mixed elementsmix="this",123.45,FALSE

其中,string型不必定要一行,能夠寫成

[globals]str="this is a \
very long \
string"

路由也能夠寫在裏面:

[routes]GET /=homeGET /404=App->page404GET /page/@num=Page->@controller

更別說是map了

[maps]/blog=Blog\Login/blog/@controller=Blog\@controller
相關文章
相關標籤/搜索