Cách sạch nhất để thêm tiền tố vào mọi URL trong CakePHP, như thông số ngôn ngữ là gì?Thêm tiền tố vào mỗi URL trong CakePHP
http://example.com/en/controller/action
http://example.com/ru/admin/controller/action
Nó cần phải làm việc với tiền tố "thật" như admin
, và lý tưởng URL trần /controller/action
có thể được chuyển hướng đến /DEFAULT-LANGUAGE/controller/action
.
Nó đang hoạt động trong ứng dụng được trang bị retro cho tôi, nhưng đó là loại hack và tôi cần bao gồm tham số ngôn ngữ bằng tay trong hầu hết các liên kết, điều này không tốt.
Vậy câu hỏi gồm hai phần:
- cách tốt nhất để cấu trúc đường là gì, vì vậy tham số ngôn ngữ được ngầm bao gồm theo mặc định mà không cần phải được xác định cho từng Route mới được xác định?
Router::connect('/:controller/:action/*', ...)
hoàn toàn nên bao gồm tiền tố.- Tham số phải có sẵn trong
$this->params['lang']
hoặc một nơi nào đó tương tự được đánh giá trongAppController::beforeFilter()
.
- Cách nhận
Router::url()
để tự động bao gồm tiền tố trong URL, nếu không được chỉ định rõ ràng?Router::url(array('controller' => 'foo', 'action' => 'bar'))
nên trở/en/foo/bar
- Kể từ
Controller::redirect()
,Form::create()
hoặc thậm chíRouter::url()
trực tiếp cần phải có hành vi tương tự, trọng mỗi chức năng duy nhất là không thực sự là một lựa chọn. Ví dụ:Html::image()
sẽ tạo ra một URL ít tiền tố hơn.
Các phương pháp sau đây dường như gọi Router::url
.
Controller::redirect
Controller::flash
Dispatcher::__extractParams
quaObject::requestAction
Helper::url
JsHelper::load_
JsHelper::redirect_
View::uuid
, nhưng chỉ cho một thế hệ băm
Trong số đó có vẻ như các phương thức Bộ điều khiển và Trình trợ giúp cần được ghi đè, tôi có thể sống mà không có JsHelper
. Ý tưởng của tôi là viết một hàm tổng quát trong AppController
hoặc có thể chỉ trong bootstrap.php
để xử lý chèn tham số. Các phương thức Bộ điều khiển và Trình trợ giúp bị ghi đè sẽ sử dụng hàm này, như tôi sẽ làm nếu tôi muốn gọi thủ công Router::url
. Điều này có đủ không?
Và theo nhận xét, ghi đè 'AppController :: url' sẽ làm điều đó cho bộ điều khiển. Cho đến nay rất tốt, có gì khác không? Các phần khác có gọi là 'Router :: url' trực tiếp không? – deceze