2012-01-24 28 views
8

Tôi có một phương thức trong bộ điều khiển nói như thế này. Trong thực tế, tôi cần phải khai báo một chức năng checkLogin để tôi có thể sử dụng trong một số phương thức điều khiển như sau:Symfony 2 Gọi hàm trong Phương thức điều khiển

class DefaultController extends Controller 
{ 
/** 
    * @Route("/test") 
    * @Template() 
    */ 
    public function testAction() 
    { 

     if (checkLogin()){} 
      else {} 
     exit; 
    } 

    public static function checkLogin() 
    { 
     return 1; 
    } 
} 

Trong trường hợp trên, khi tôi làm như thế này, tôi nhận được các lỗi sau:

Fatal error: Call to undefined function NouPei \ WebSiteBundle \ khiển \ checkLogin() trong /home/noor/noupei/website/WebSiteBundle/Controller/DefaultController.php trên đường dây 142

+4

Đó là thiết kế phần mềm không hợp lệ. Bạn không nên đặt nó trong bộ điều khiển. –

Trả lời

21

Đó là một phương pháp, không phải là một chức năng:

if (self::checkLogin()){} 
5

Đối với tài khoản quản lý trong Symfony 2, bạn nên sử dụng quản lý bảo mật của symfony 2 (here). Bạn sẽ có thể để kiểm tra đăng nhập người dùng như thế này:

public function indexAction() 
{ 
    // show different content to admin users 
    if ($this->get('security.context')->isGranted('ADMIN')) { 
     // Load admin content here 
    } 
    // load other regular content here 
} 

Source

Nếu bạn không muốn sử dụng quản lý an ninh Symfony 2, bạn nên sử dụng services để làm cho phương pháp có sẵn cho tất cả các bộ điều khiển.

+0

không quên đăng nhập, tôi muốn có thể gọi một chức năng khác trong một phương thức – Noor

+0

Bạn có thể gọi các hàm trong một phương thức ... Tôi không hiểu ý bạn là gì – BlackCharly

17

bạn có thể gọi hàm như thế này:

$this->checkLogin(); 
1

Có một số cách để làm điều này:

  1. Sử dụng tường lửa do Symfony cung cấp. Bạn có thể cấu hình nó trong app/config/security.yml dưới access_control: - {path: ^/anyurl dạng/mô hình $, vai trò: ROLE_USER}

    sử dụng phương pháp này: symfony sẽ một để xác minh tính hợp lệ của phiên. và nếu phiên không hợp lệ, phiên sẽ tự động chuyển hướng người dùng đến trang đăng nhập và người dùng chưa được xác thực sẽ không bao giờ có thể truy cập vào các trang này nếu không đăng nhập.

    Triển khai phương pháp này cũng có một số tùy chọn trước khi nó hoạt động. Bạn có thể cần tạo Nhà cung cấp hoặc Sử dụng của riêng bạn và nhà cung cấp hiện tại tôi khuyên bạn nên FOSUserBundle. Gói này có sự đa dạng về cách quản lý người dùng. Một tùy chọn khác là tạo Provider của riêng bạn nếu bạn muốn xác thực bên ngoài đặc biệt khi bạn đang sử dụng api (SOA) để kiểm tra tính xác thực của người dùng.

  2. Nếu bạn muốn thêm phương thức sẽ được sử dụng cho tất cả Bộ điều khiển.Nó hoặc là bạn tạo ra một lớp mà kéo dài điều khiển Symfony của:

    lớp BaseController mở rộng điều khiển { bảo vệ chức năng checkLogin() {} }

    lớp DefaultController kéo dài BaseController { public function testAction() { $ loggedIn = $ this-> checkLogin(); }}

Hoặc bạn có thể tạo ra một đặc điểm và bao gồm nó trong điều khiển của bạn.

trait ControllerTrait 
{ 
    protected function checkLogin(){} 
} 

class DefaultController extends BaseController 
{ 
     use ControllerTrait; 

     public function testAction() 
     { 
     $loggedIn = $this->checkLogin(); 
     } 
} 

Nhưng tôi khuyên bạn nên sử dụng tường lửa vì mục đích bảo mật và nó cung cấp nhiều chức năng và kiểm tra bảo mật.

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