Làm cách nào để có được đường dẫn Symfony?

Tôi đang nghiên cứu định tuyến tái cấu trúc Symfony 2. 8 dự án một tháng trước. Bài kiểm tra định tuyến chúng tôi chỉ có thể đếm các tuyến đường. Đó là nó

Điều đó giống như giả sử lò phản ứng hạt nhân hoạt động vì không có đám cháy nào ở ngôi làng cách đó 5 dặm

Chúng tôi cần một thử nghiệm tốt hơn bao gồm tải mọi tuyến đường, đường dẫn, tiền tố và mọi thứ mà

use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];
4 có thể chứa. Đây là một ý tưởng thô 10 dòng

Tôi đang tái cấu trúc cấu hình ~80 tuyến từ YAML sang PHP, nhưng cần chúng hoạt động 😊

Làm cách nào để bạn kiểm tra xem tất cả các tuyến vẫn giống nhau trong #symfony?

This is my go ↓ pic.twitter.com/hdqLDAEk3v

– Tomas Votruba 🇺🇦 [@VotrubaT] ngày 27 tháng 4 năm 2022


Một tháng sau

Chúng tôi vẫn có thử nghiệm này đang hoạt động tốt. cho đến nay nó

  • đã phát hiện ra 5 lỗi trong kiểm tra CI theo yêu cầu kéo
  • đã giúp chúng tôi tìm ra 1 tuyến đường chết

Đó là lý do tại sao tôi muốn chia sẻ nó với bạn, từng bước một. Cái hay của nó là bạn có thể viết bài kiểm tra này trong 10 phút và không tốn chi phí bảo trì. Bạn có thể sử dụng phương pháp này không chỉ cho định tuyến Symfony mà còn cho các thực thể được tải hoặc bất kỳ thứ gì ở dạng mảng. Phản hồi của CI rằng mọi thứ vẫn hoạt động là vô giá

1. Nhận các tuyến đã tải từ Symfony

Bước đầu tiên mà chúng ta phải làm là lấy tất cả các tuyến đã tải. Để làm được điều đó, chúng ta cần một

use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];
5. Chúng ta sẽ xem xét cách lấy dữ liệu được định tuyến chuẩn hóa. Sau đó, chúng tôi sẽ đặt mọi thứ lại với nhau trong một trường hợp thử nghiệm

/** @var \Symfony\Component\Routing\RouterInterface $router */
$routeCollection = $router->getRouteCollection[];

// here we collect route data to an array
$routeMap = [];

foreach [$routeCollection->all[] as $name => $route] {
    // we wanted to test only attributes we use, but you can name all of them
    $routeMap[$name] = [
        'path' => $route->getPath[],
        'requirements' => $route->getRequirements[],
        'defaults' => $route->getDefaults[],
        'methods' => $route->getMethods[],
    ];
}

// sort A → Z for nice standardized output
ksort[$routeMap];

Bạn có thể thử điều này một cách nhanh chóng trong bộ điều khiển hoặc lệnh.

use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];
6 để xem bạn đã thu thập các tuyến đường chưa


được rồi. Chúng tôi có dữ liệu về các tuyến đường mà dự án của chúng tôi hiện có. Làm thế nào để chúng ta biến nó thành một thử nghiệm chứng minh trong tương lai để tránh sự cố lõi hạt nhân?

2. Ảnh chụp liên tục vào tệp

Thử nghiệm sau đây đôi khi được gọi là "ảnh chụp nhanh" và rất hữu ích để thử nghiệm kết quả đầu ra HTML. Chúng tôi có dữ liệu trong một

use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];
0 với các chuỗi. Làm cách nào để chúng tôi biến nó thành ảnh chụp nhanh được lưu trữ trong một tệp?

Chà, ngay cả bài kiểm tra phức tạp hơn như I/O của Hiệu trưởng cũng có thể được chuyển thành ảnh chụp nhanh

Chúng tôi có thể xử lý một

use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];
0, phải không?

use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];


Chuỗi là gì, có thể được lưu vào tệp

file_put_contents[__DIR__ . '/Fixture/expected_route_map.json', $routeMapJson];

Bây giờ chúng tôi có ảnh chụp nhanh các tuyến đường của mình trong một tệp JSON. Không chỉ là dòng dài, mà là tệp JSON được thụt lề đẹp mắt. Chúng ta có thể mở nó và tự đi qua nó. Các tuyến bao gồm tiền tố, YAML, XML, chú thích và tuyến thuộc tính. Chúng tôi không quan tâm đến định dạng, chỉ cần cuối cùng mọi thứ ở cùng một vị trí

Nếu một tên tuyến đường được thay đổi chỉ bằng một ký tự, chúng tôi biết điều đó. Nếu một tuyến đường mới được thêm vào, chúng tôi biết điều đó

Bảo trì dễ dàng?

Nếu chúng tôi thêm một tuyến đường mới, chúng tôi biết điều đó. bài kiểm tra sẽ thất bại. Nhưng đó không phải là những gì chúng ta mong đợi. Chúng tôi đã thêm một tuyến đường mới, vì vậy chúng tôi muốn nó ở đó. Ồ, chúng ta sẽ phải cập nhật tệp

use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];
2

Nhưng bằng cách nào?

Đó là một sự lãng phí thời gian mà chúng tôi muốn sử dụng cho công việc có ý nghĩa hơn


Ở đây chúng ta sẽ tận dụng mẹo thử nghiệm mà tôi đã học được từ Nikita Popov khi tôi đang đóng góp trình phân tích cú pháp php. Không chỉ là niềm vui khi được đóng góp mà bạn còn có thể cập nhật các bài kiểm tra từ một dòng lệnh. Đúng vậy, không cần làm việc, không cần chỉnh sửa thủ công, chỉ cần chạy

use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];
4

________số 8


Nó không thể đơn giản hơn. Để cập nhật lịch thi thử, hãy thêm

use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];
5 trước khi chạy PHPUnit

use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];
0

Cuối cùng
use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];
6

Chúng tôi có các mảnh. bây giờ chúng ta chỉ cần đặt chúng lại với nhau

use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];
2


Hãy thêm thử nghiệm này và chạy nó. ồ, nó thất bại. Đầu tiên, chúng ta phải tạo tệp lịch thi đấu bằng thủ thuật nhỏ của mình

use Nette\Utils\Json;

$routeMapJson = Json::encode[$routeMap, Json::PRETTY];
0


Đó là nó. Bây giờ bạn đang kiểm tra tất cả các tuyến đường của mình và bạn có thể chắc chắn rằng nhà máy điện hạt nhân vẫn an toàn

Làm cách nào để xác định tuyến đường trong Symfony?

// config/tuyến. php sử dụng Ứng dụng\Trình điều khiển\BlogContoder; . class, 'list']] ->requirements[[ 'page' => '\d+', ]] ; . };$routes->add['blog_list', '/blog/{page}'] ->controller[[BlogController::class, 'list']] ->requirements[[ 'page' => '\d+', ]] ; // .. };

Làm cách nào tôi có thể biết lộ trình của mình trong laravel?

Làm cách nào để lấy tên tuyến đường hiện tại trong Laravel? .
điều kiện tiên quyết
Nhận tên tuyến đường trong Bộ điều khiển hoặc Phần mềm trung gian
Nhận tên tuyến đường bằng Mặt tiền tuyến đường
Nhận tên tuyến đường bằng Mặt tiền yêu cầu
Lấy tên tuyến đường trong Blade View
Nhận thông tin bổ sung về tuyến đường của bạn

Chú thích trong Symfony là gì?

Như bạn có thể biết, Symfony2 sử dụng chú thích cho Thông tin ánh xạ học thuyết và cấu hình xác thực . Tất nhiên, nó hoàn toàn là tùy chọn và điều tương tự cũng có thể được thực hiện với XML, YAML hoặc thậm chí là PHP. Nhưng sử dụng chú thích thì thuận tiện và cho phép bạn xác định mọi thứ trong cùng một tệp.

Chủ Đề