PHP Hiệu trưởng SetList

tôi muốn sử dụng Rector để tái cấu trúc mã của mình vì tôi đã cập nhật dự án của mình lên symfony 5. 4 đến 6. 1. Phiên bản dự án php của tôi. số 8. 1. 5

Vì vậy, tôi muốn sử dụng một quy tắc đơn giản để thay đổi chú thích của mình thành thuộc tính với hiệu trưởng. nhưng khi tôi thực hiện hiệu trưởng với lệnh. quy trình nhà cung cấp/bin/hiệu trưởng src

Hiệu trưởng thông báo cho tôi. [OK] Hiệu trưởng đã xong

Nhưng tệp của tôi không thay đổi, chú thích thực thể của tôi không thay đổi. tôi cố gắng làm theo tài liệu này để cấu hình hiệu trưởng của tôi. php và sử dụng hiệu trưởng với symfony

Tại thư mục gốc của dự án, bạn có thể thêm một hiệu trưởng. php để thêm cấu hình của Hiệu trưởng. Trong phần tham số bạn có thể thêm phần setParameters với tùy chọn SKIP. Điều này cho phép bạn bỏ qua một số quy tắc cho Hiệu trưởng trong dự án của bạn. Xem cấu hình bên dưới

Tại Hiệu trưởng 0. 12. 16, `TypedPropertyRector` có thể định cấu hình để cho phép thay đổi được bảo vệ và sửa đổi công khai cũng như xa khi có thể với cấu hình mới

   $services->set[TypedPropertyRector::class]
        ->configure[[
            TypedPropertyRector::INLINE_PUBLIC => true,
        ]];

Bài viết này có hiệu lực đối với Hiệu trưởng parameters[];$parameters->set[Option. ĐƯỜNG, [__DIR__. '/src']];$containerConfigurator->import[LevelSetList. UP_TO_PHP_74];};

Nếu bạn xem lại tài liệu, bạn sẽ thấy một liên kết đến kho lưu trữ Symfony nơi nó cho bạn biết về một loạt các "quy tắc" của Symfony - từ ưa thích của "nâng cấp" - mà họ đã chuẩn bị sẵn. Đó là tốt đẹp của họ

Mẹo

Cấu hình trên trang này bây giờ sẽ trông khác so với trong video. Nhưng, nó vẫn hoạt động như cũ. Sao chép phiên bản mới nhất vào ứng dụng của bạn

Dưới đây, sao chép bên trong chức năng gọi lại của họ. và dán nó lên những gì chúng ta có

dòng 1 - 7use Rector\Symfony\Set\SymfonySetList;use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;. dòng 10 trả về hàm tĩnh [ContainerConfigurator $containerConfigurator]. void {$parameters = $containerConfigurator->parameters[];$parameters->set[Option. SYMFONY_CONTAINER_XML_PATH_PARAMETER,__DIR__. '/var/cache/dev/App_KernelDevDebugContainer. xml'];$containerConfigurator->import[SymfonySetList. SYMFONY_52];$containerConfigurator->import[SymfonySetList. SYMFONY_CODE_QUALITY];$containerConfigurator->import[SymfonySetList. SYMFONY_CONSTRUCTOR_INJECTION];};

Điều này trỏ Hiệu trưởng đến một tệp bộ nhớ cache giúp nó thực hiện công việc của mình. và quan trọng nhất, nó nói với Hiệu trưởng rằng chúng tôi muốn nâng cấp mã của mình lên Symfony 5. 2 tương thích, cũng như nâng cấp mã của chúng tôi lên một số tiêu chuẩn chất lượng mã Symfony và chèn "hàm tạo". Nếu bạn muốn biết thêm về những gì chúng làm, bạn có thể theo dõi các hằng số để kiểm tra mã

Nhưng khoan đã, chúng tôi không muốn nâng cấp mã của mình lên Symfony 5. 2. Chúng tôi muốn nâng cấp hoàn toàn lên Symfony 5. 4. Bạn có thể mong đợi tôi chỉ đặt "54" ở đây. Và chúng ta có thể làm điều đó. Nhưng thay vào đó, tôi sẽ sử dụng

namespace Lib;

class SomeClass
{
    public int $a;

    protected string $b;

    private bool $c;
}
9. Ồ. có vẻ như tôi cũng cần thêm một câu lệnh
namespace Lib;

class SomeClass
{
    protected string $b;
}
0 cho
namespace Lib;

class SomeClass
{
    protected string $b;
}
1. Để tôi gõ lại, nhấn "tab" và. tuyệt vời

dòng 1 - 7sử dụng Rector\Symfony\Set\SymfonyLevelSetList; sử dụng Rector\Symfony\Set\SymfonySetList;. dòng 10 - 11trả về hàm tĩnh [ContainerConfigurator $containerConfigurator]. khoảng trống {. dòng 13 - 20$containerConfigurator->import[SymfonyLevelSetList. UP_TO_SYMFONY_54];. dòng 22 - 23};

Dù sao đi nữa. Chúng tôi cần nâng cấp mã của mình từ 5. 0 đến 5. 1. rồi 5. 1 đến 5. 2. và cứ như vậy cho đến Symfony 5. 4. Đó là ý nghĩa của

namespace Lib;

class SomeClass
{
    protected string $b;
}
2. nó sẽ bao gồm tất cả các "quy tắc" để nâng cấp mã của chúng tôi lên 5. 1, 5. 2, 5. 3 và cuối cùng là 5. 4

Và. đó là nó. Chúng tôi đã sẵn sàng để chạy cái này. Nhưng trước khi chúng tôi thực hiện, tôi tò mò không biết điều này sẽ tạo ra những thay đổi gì. Vì vậy, hãy thêm tất cả các thay đổi vào git. và cam kết. Hoàn hảo

Để điều hành Hiệu trưởng, hãy nói

namespace Lib;

class SomeClass
{
    protected string $b;
}
3. Chúng tôi cũng có thể chỉ ra điều này tại các thư mục
namespace Lib;

class SomeClass
{
    protected string $b;
}
4 hoặc
namespace Lib;

class SomeClass
{
    protected string $b;
}
5. nhưng phần lớn những thay đổi nó sẽ áp dụng cho các lớp học của chúng tôi trong
namespace Lib;

class SomeClass
{
    /** @var int */
    public $a;

    /** @var string */
    protected $b;

    /** @var bool */
    private $c;
}
60

namespace Lib;

class SomeClass
{
    /** @var int */
    public $a;

    /** @var string */
    protected $b;

    /** @var bool */
    private $c;
}
6

Và. nó đang hoạt động. Thật tuyệt vời. Tám tập tin đã được thay đổi bởi Hiệu trưởng. Hãy cuộn lên trên cùng. cái này hay đấy. nó hiển thị cho bạn tệp đã được thay đổi, thay đổi thực tế và bên dưới, quy tắc nào gây ra thay đổi đó

Một sửa đổi mà nó đã thực hiện là

namespace Lib;

class SomeClass
{
    /** @var int */
    public $a;

    /** @var string */
    protected $b;

    /** @var bool */
    private $c;
}
61 thành
namespace Lib;

class SomeClass
{
    /** @var int */
    public $a;

    /** @var string */
    protected $b;

    /** @var bool */
    private $c;
}
62. Đó là một sự thay đổi tốt. giao diện cũ không được dùng nữa để thay thế cho giao diện mới. Nó cũng thay đổi
namespace Lib;

class SomeClass
{
    /** @var int */
    public $a;

    /** @var string */
    protected $b;

    /** @var bool */
    private $c;
}
63 thành
namespace Lib;

class SomeClass
{
    /** @var int */
    public $a;

    /** @var string */
    protected $b;

    /** @var bool */
    private $c;
}
64. Một bản cập nhật cấp thấp, tốt khác cho một số mã không dùng nữa

Cũng có một sự thay đổi đối với một lớp học trong

namespace Lib;

class SomeClass
{
    /** @var int */
    public $a;

    /** @var string */
    protected $b;

    /** @var bool */
    private $c;
}
65. và một số thứ tương tự khác. Gần phía dưới, danh sách bộ chất lượng mã Symfony đã thêm loại trả về
namespace Lib;

class SomeClass
{
    /** @var int */
    public $a;

    /** @var string */
    protected $b;

    /** @var bool */
    private $c;
}
66 cho mọi bộ điều khiển. đó là tùy chọn. nhưng tốt đẹp

Vì vậy, nó không tạo ra nhiều thay đổi, nhưng nó đã khắc phục một số lỗi không dùng nữa mà chúng tôi không cần phải làm gì cả

Tuy nhiên. nó không hoàn hảo. Một vấn đề là, đôi khi, Hiệu trưởng sẽ gây rối với phong cách viết mã của bạn. Đó là bởi vì hiệu trưởng không thực sự hiểu phong cách mã hóa của bạn là gì. và vì vậy nó thậm chí không thử. Nhưng đó là do thiết kế và sẽ dễ dàng sửa chữa

Thứ hai, trong khi nó đã thay đổi giao diện từ

namespace Lib;

class SomeClass
{
    /** @var int */
    public $a;

    /** @var string */
    protected $b;

    /** @var bool */
    private $c;
}
61 thành
namespace Lib;

class SomeClass
{
    /** @var int */
    public $a;

    /** @var string */
    protected $b;

    /** @var bool */
    private $c;
}
62, nó đã đặt tên toàn bộ lớp. thay vì thêm một câu lệnh
namespace Lib;

class SomeClass
{
    protected string $b;
}
0

dòng 1 - 11use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;. dòng 13 - 24class LoginFormAuthenticator extends AbstractFormLoginAuthenticator implements PasswordAuthenticatedInterface{. dòng 27 - 36hàm công khai __construct[SessionInterface $session, EntityManagerInterface $entityManager, UrlGeneratorInterface $urlGenerator, CsrfTokenManagerInterface $csrfTokenManager, \Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface $passwordEncoder]{. dòng 39 - 43}. dòng 45 - 119}

Và thứ ba, nó không thay đổi bất kỳ tên biến nào. Vì vậy, mặc dù nó đã thay đổi đối số này thành

namespace Lib;

class SomeClass
{
    /** @var int */
    public $a;

    /** @var string */
    protected $b;

    /** @var bool */
    private $c;
}
62, nhưng đối số vẫn được gọi là
namespace Lib;

class SomeClass
{
    public int $a;

    protected string $b;

    private bool $c;
}
81. cùng với tài sản. Tệ hơn nữa,
namespace Lib;

class SomeClass
{
    /** @var int */
    public $a;

    /** @var string */
    protected $b;

    /** @var bool */
    private $c;
}
62 có một phương pháp khác trên đó. và nó không cập nhật mã ở đây để sử dụng tên phương thức mới đó

dòng 1 - 24class LoginFormAuthenticator mở rộng AbstractFormLoginAuthenticator thực hiện PasswordAuthenticatedInterface{. dòng 27 - 34 private $passwordEncoder;. dòng 36hàm công khai __construct[SessionInterface $session, EntityManagerInterface $entityManager, UrlGeneratorInterface $urlGenerator, CsrfTokenManagerInterface $csrfTokenManager, \Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface $passwordEncoder]{. dòng 39 - 42$this->passwordEncoder = $passwordEncoder;}. dòng 45 - 119}

Vì vậy, Hiệu trưởng là một điểm khởi đầu tuyệt vời để nắm bắt một loạt các thay đổi. Nhưng chúng ta sẽ cần lấy những gì chúng ta đã tìm thấy và hoàn thành công việc. Hãy làm điều đó tiếp theo. Chúng tôi sẽ làm một phần của điều đó bằng tay. nhưng rất nhiều tự động với PHP CS Fixer

Chủ Đề