Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor admin controllers #3

Open
khanhicetea opened this issue Aug 30, 2015 · 1 comment
Open

Refactor admin controllers #3

khanhicetea opened this issue Aug 30, 2015 · 1 comment

Comments

@khanhicetea
Copy link
Contributor

Các bạn nên refactor những đoạn code có số lần lặp lại > 2 lần


Ví dụ điển hình là viết các controller admin, các bạn thường viết đoạn sau đầu mỗi method (quá dư thừa, cần refactor lại)

        $nameAdmin = $this->app['session']->get('adminName', '1');
        if ($nameAdmin == 1) {
            return $this->redirect('login-admin');
        }

Giải pháp : dùng OOP chẳng hạn

  • tạo 1 file là AuthedController.php có nội dung như sau
<?php
abstract class AuthedController extends Base {
    protected $authed = null;   

    public function __construct() {
        parent::__construct();
        if ($authed = $this->app['session']->get('admin_authed', false)) {
            $this->authed = $authed;
        } else {
            $response = $this->redirect('admin_auth_signin');
            $response->send();
            return $this->app->terminate($this->request, $response);
        }
    }
}

với admin_auth_signin là route Signin vào admin , vào $this->authed sẽ là biến lưu instance User đăng nhập vào hệ thống mà trong Controller Signin $this->app['session']->set('admin_authed', $user);

Công việc là chỉ cần extends AuthedController những Controller muốn bảo vệ Admin là xong. ví dụ

<?php
namespace App\Controller\Admin;

class CategoryController extends AuthedController {
}
@haiquang9994
Copy link

controller này hình như nó vẫn thực hiện lệnh mặc dù không đăng nhập.
em có 1 route là
'/delete-post/{alias}' => 'Admin\PostController:delete:admin_post_delete',
PostController extends AuthedController, nhưng em thử copy link vào trình duyệt ẩn danh chạy.
thì nó redirect về trang sign in, nhưng vẫn thực hiện lệnh delete trong hàm deleteAction
trong csdl vẫn bị mất dữ liệu
em khắc phục bằng cách thay vì
return $this->app->terminate($this->request, $response);
thì em exit() luôn, nó vẫn redirect về trang sign in và không thực hiện lệnh delete
em không biết cái phần "return $this->app->terminate($this->request, $response);" có gì đặc biệt không. có bỏ đi giống như em đang làm được không.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants