2013-02-04 23 views
6

Tôi có một dự án dựa trên twig với Symfony 2. Do bản chất của Symfony 2, Không gian tên được sử dụng. Bởi vì điều này tôi không thể cung cấp các chức năng toàn cục bên ngoài không gian tên.Tôi không thể sử dụng chức năng bên trong với Twig_SimpleFilter trong Twig_Extension class

Đây là của tôi cành mở rộng lớp:

<?php 
namespace Web\MailBundle\Twig; 

use Twig_Extension, Twig_SimpleFilter; 

class Twig extends Twig_Extension 
{ 
    public function getName() 
    { 
     return 'twig_extension'; 
    } 

    public function getFilters() { 
     return array(
      'shortKey' => new Twig_SimpleFilter('shortKey', 'myCustomFilterFunction') 
     ); 
    } 

    public function myCustomFilterFunction() { 
     //code here... 
    } 

quả: FatalErrorException: Error: Call to undefined function myCustomFilterFunction()

Tại sao: Bởi vì, cành đang cố gắng để tìm chức năng này nhưng nó là bên trong một lớp học. Nếu tôi di chuyển nó ra bên ngoài lớp lần này, tôi phải đối mặt với các không gian tên. Bởi vì nó là không gian tên.

Nghiên cứu: Tôi bật mã. Twig làm điều tương tự. Họ viết các bộ lọc và chức năng bên ngoài lớp học. Nhưng do không gian tên tôi không thể làm điều đó. Nếu có thể tôi muốn làm điều đó bằng cách sử dụng giải pháp thích hợp. Nếu nó không thành công; Tôi sẽ đi kèm với các giải pháp mới nhất được tạo ra một file php mà không gian tên và bao gồm nó cho dự án ...

-

Làm thế nào tôi có thể vượt qua nó? Bộ lọc Twig đã không được chấp nhận và chúng tôi phải sử dụng phương pháp SimpleFilter. Nhưng tôi không thể làm được.

Trả lời

8

Bạn có thể vượt qua một mảng dựa trên callable như tham số thứ hai để các nhà xây dựng Twig_SimpleFilter - trong trường hợp của bạn, sử dụng một mảng như sau:

public function getFilters() { 
    return array(
     'shortKey' => new Twig_SimpleFilter('shortKey', array($this, 'myCustomFilterFunction')) 
    ); 
} 

mà sẽ sử dụng phương pháp của đối tượng của bạn khi lọc được sử dụng.

Xem các ví dụ trong Twig documentation.

+1

Làm cách nào tôi bỏ lỡ chương "Quá tải" trên tài liệu: (Cảm ơn bạn đã đánh thức tôi! – xangr

Các vấn đề liên quan