Dù có vẻ lạ lùng, tôi đã phải sử dụng một thực thể với khóa chính được đặt trên trường varchar, và một số giá trị chứa " / ".
Cho đến khi bạn đối mặt với vấn đề, thật không thể tưởng tượng nó sẽ gây ra sự cố. Và rồi, bi kịch bắt đầu.
An exception has been thrown during the rendering of a template ("Parameter "id" for route "admin_app_wtype_edit" must match "[^/]++" ("MACHIN/CHOSE" given) to generate a corresponding URL.").
Nói ngắn gọn, dấu gạch chéo được hiểu bởi trình tạo URL như một dấu phân cách URL, làm sập hệ thống.
Vì vậy, bạn cần chỉnh sửa trình tạo URL sao cho nó chuyển " / " thành cái khác (cơ bản là mã hóa URL), và sau đó ở phía nhập vào, bạn cần chỉnh sửa giá trị khóa chính đã lấy để chọn đối tượng sao cho nó thực hiện phép chuyển đổi ngược lại.
Trong file XxxAdmin.php của bạn, thêm giao diện sau:
use Symfony\Component\Routing\Generator\UrlGeneratorInterface as RoutingUrlGeneratorInterface;
Sau đó thêm hai hàm sau:
public function generateUrl($name, array $parameters = [], $absolute = RoutingUrlGeneratorInterface::ABSOLUTE_PATH)
{
if(!empty($parameters['id'])){
$parameters['id'] = str_replace("/","%2F",$parameters['id']);
}
return $this->routeGenerator->generateUrl($this, $name, $parameters, $absolute);
}
public function getObject($id)
{
$id=str_replace("%2F","/",$id);
$object = $this->getModelManager()->find($this->getClass(), $id);
foreach ($this->getExtensions() as $extension) {
$extension->alterObject($this, $object);
}
return $object;
}