0

管理者が動的に静的コンテンツ ページを追加/編集/削除できるアプリケーション用の静的ページ コンポーネントを作成しました。これらはデータベースに保存されます。

(たとえば、「about」というページを作成し、myapplication/about でアクセスできます)

これは、これらのページのルーティングです。

$page = new StaticPage();
$slugs = $page->find('list', array(
    'fields' => array('slug'),
    'recursive' => -1,
    'order' => 'StaticPage.slug DESC',
));

Router::connect('/:slug', 
    array('controller' => 'static_pages', 'action' => 'display'),
    array(
        'pass' => array('slug'),
        'slug' => implode($slugs, '|')
    )
);

現在、スラッグが既存のコントローラー(ユーザーなど)と一致するページを作成すると、RouteがUsersControllerに上書きされるという問題があります。

そのため、ブラックリストなどのようなものが必要です。そのコントローラーが存在するかどうかを確認する検証ルールを書き始めました。Cake 1.3 には、コントローラーが存在しない場合に false を返す関数「loadController」がありましたが、cake 2.x にはそのような関数はありません。私はどういうわけかこれを逃していますか?それは新しい名前を持っていますか、それとも現在ユーティリティライブラリにありますか?

または、これを解決するためのより良い方法はありますか?

4

2 に答える 2

2

これを試してみてください:http ://www.cleverweb.nl/cakephp/list-all-controllers-in-cakephp-2/

すべてのコントローラーのリストを取得することで、コントローラーの名前を簡単に除外できます

于 2012-07-26T10:22:57.967 に答える
0

これは今のところ私の検証方法です:

$route = Router::parse($check['slug']);
$controllerName = Inflector::camelize($route['controller'] . 'Controller');

$aCtrlClasses = App::objects('controller');

  foreach ($aCtrlClasses as $controller) {
    if ($controller != 'AppController') {
      // Load the controller
      App::import('Controller', str_replace('Controller', '', $controller));

      // Load the ApplicationController (if there is one)
      App::import('Controller', 'AppController');
      $controllers[] = $controller;
    }
  }

  if (in_array($controllerName, $controllers)) {
    return false;
  } else {
    return true;
  }
于 2012-07-26T10:45:26.263 に答える