ルート内に複数のナメクジが関係する質問は見当たりませんでした。
「教師」、「コース」、「科目」というテーブルがあります。それぞれに「ショートカット」と呼ばれるフィールドがあります。
次のようなURLから正しいTeacher.id、Course.id、Subject.idをルーティングしてプルするにはどうすればよいですか。
http://www.domain.com/bowlerae/grade-5/math
ここで、「bowlerae」はTeacher.shortcut、「grade-5」はCourse.shortcut、「math」はSubject.shortcutです。
これを最初にルーティングする方法、各3つの要素のIDをプルする方法(AppControllerまたは必要な個々のコントローラーでこれを実行しますか?)、およびリバースルーティングとページネーションと互換性のあるリンクを構築する方法がわかりません。また、フィールド「ショートカット」には、「teacher_slug」、「course_slug」、「subject_slug」など、テーブルごとに一意の名前を付ける必要がありますか?
現在、routes.phpに3つのモデルをそれぞれロードし、それぞれに対応するIDを取得するようにクエリを実行して(URLのその部分が存在する場合)、それらの値をコントローラーに渡します。しかし、ご想像のとおり、多くのリソースを消費します。
追加の質問/懸念事項(AD7sixおよびその他の場合)
このようなURLが必要な場合
http://www.domain.com/bowlerae
教師のホームページ、またはこのようなURLを指す
http://www.domain.com/bowlerae/grade-5
コースのホームページを指すには、次のようなルートがあります
Router::connect(
'/:teacher',
array('controller' => 'teachers', 'action' => 'view'),
array(
'teacher' => '[a-z0-9]{1}([a-z0-9\-]{2,}[a-z0-9]{1})?',
'pass' => array('teacher')
));
教師用、およびコース用に以下
Router::connect(
'/:teacher/:course',
array('controller' => 'courses', 'action' => 'view'),
array(
'teacher' => '[a-z0-9]{1}([a-z0-9\-]{2,}[a-z0-9]{1})?',
'course' => '[a-z0-9]{1}([a-z0-9\-]{2,}[a-z0-9]{1})?',
'pass' => array('teacher', 'course')
));
私の懸念は、誰かが次のようなURLに移動した場合はどうなるかということです
http://www.domain.com/accountここで、アカウントは有効なコントローラーですが、有効な教師ではありません
また
http://www.domain.com/bowlerae/students学生は有効な管理者ですが、有効なコースではありません
これらのインスタンスをどのように処理しますか?私はそのようなリダイレクト方法を使用してみました...
TeachersController.php
public function view($tSlug = null) {
$this->Teacher->id = $this->Teacher->findByShortcut($tSlug);
if (!$this->Teacher->exists()) {
$this->Session->setFlash('This teacher does not exist');
$this->redirect(array('controller' => $tSlug));
}
else{
// do this
} // end else if teacher exists
}
次のURLをルーティングすることを期待していました
http://www.domain.com/accountをアカウントコントローラーにルーティングしましたが、
http://www.domain.com/account/index、正しいアカウントコントローラーと正しいインデックスアクションですが、URLの末尾に「/index」が追加されています。
現在のルートでは、コースコントローラーにアクセスしようとしているので、同じリダイレクトメソッドをコースコントローラーに追加しました...
CoursesController.php
public function view($tSlug = null, $cSlug = null) {
$this->Teacher->id = $this->Teacher->findByShortcut($tSlug);
$this->Course->id = $this->Course->findByShortcut($cSlug);
if (!$this->Teacher->exists()) {
$this->Session->setFlash('This teacher does not exist');
$this->redirect(array('controller' => $tSlug, 'action' => $cSlug));
}
elseif (!$this->Course->exists()) {
$this->Session->setFlash('This course does not exist');
$this->redirect(array('controller' => $tSlug, 'action' => $cSlug));
}
else{
// do this
} // end else if everything is fine
}
残念ながら、リダイレクトが終了しないというエラーが表示されます。
また、そのようなURLのルートを作成しました(教師、コース、または科目が存在しない場合)が、おそらくそれらは正しくありません。