Türler

Türler route kuralları içerisindeki argümanların daha esnek bir biçimde yönetilmesini sağlar ve güvenliği arttırır.

$config = array(
    'types' => [
        new IntType('<int:id>'),
        new StrType('<str:name>'),
        new StrType('<str:word>'),
        new AnyType('<any:any>'),
        new BoolType('<bool:status>'),
        new IntType('<int:page>'),
        new SlugType('<slug:slug>'),
        new SlugType('<slug:slug_>', '(?<%s>[\w-_]+)'), // slug with underscore
    ]
);

Varsayılan türler

Tür Regex Route Php Url
AnyType (?<any>.*) http://example.com/<any:any>/ string http://example.com/%s
BoolType (?<status>[0-1]) http://example.com/<bool:status>/ boolean http://example.com/%01d
FourDigitYearType (?<year>[0-9]{4}) http://example.com/<yyyy:year>/ integer http://example.com/%04d
IntType (?<id>\d+) http://example.com/<int:id>/ integer http://example.com/%d
SlugType (?<slug>[\w-]+) http://example.com/<slug:slug>/ string http://example.com/%s
StrType (?<name>\w+) http://example.com/<str:name>/ string http://example.com/%s
TranslationType (?<locale>[a-z]{2}) http://example.com/<locale:locale>/ string http://example.com/%02s
TwoDigitDayType (?<day>[0-9]{2}) http://example.com/<dd:day>/ integer http://example.com/%02d
TwoDigitMonthType (?<month>[0-9]{2}) http://example.com/<mm:month>/ integer http://example.com/%02d

Aşağıda Int türüne ait bir örnek gösteriliyor.

class IntType extends Type
{
    protected $regex = '(?<%s>\d+)';

    /**
     * Php format
     * 
     * @param  number $value 
     * @return int
     */
    public function toPhp($value)
    {
        return (int)$value;
    }

    /**
     * Url format
     * 
     * @param mixed $value
     * @return string
     */
    public function toUrl($value)
    {
        return sprintf('%d', $value);
    }
}

Tanımlı tür fonksiyonlarından yeni bir düzenli ifade elde etmek için construct metodu ikinci parametresi kullanılabilir.

new SlugType('<slug:slug>');
new SlugType('<slug:slug_>', '(?<%s>[\w-_]+)');  // slug with underscore

Klonlanan türe ait ismi değiştirmeniz gerekir. Yukarıdaki örnekte slug türüne alt çizgi desteği ekleyebilmek için etiket <slug:slug_> olarak değiştirildi.