CakePHPの管理者用画面の作成について

このQ&Aのポイント
  • CakePHPを使用して管理者用の画面を作成する方法について教えてください。
  • 特定のテーブルに関連する管理者だけが更新できる情報を、scaffold機能を使用して表示させる方法を教えてください。
  • 通常のアクションと管理者用のアクションを組み合わせて、CakePHPの画面編集機能を使ってテーブルの管理を行いたいです。どのように記述すれば良いですか?
回答を見る
  • ベストアンサー

管理者用アクションでのscaffold画面の表示

CakePHP1.2の管理者用の画面の作成について質問です。 CakePHPでは、管理者用の画面として、あるコントローラ内で、 function index() { /* 通常のアクション*/ } function admin_index() { /* 管理者用のアクション */ } といったような使い方ができるのですが、 今回作成したデータベースは、テーブルが10個近くもあり、それらをまとめて、レンタルサーバー上で、https://ドメイン名/admin にbasic認証をかけて、その下のテーブルごとに管理者用画面として管理したいのですが、ここまでは通常の使い方だと思うのですが、テーブルの中にたとえば、ショッピングサイトの商品に関する情報のように管理者だけしか更新しないようなテーブルがいくつかありますが、その画面をscaffold(もともとCakeに備わっている表示、追加、編集機能)を使って表示させるようにしたいのです。テーブルの数が多い時など、管理者だけしか使わないテーブルの表示、追加、編集機能をまたわざわざ作り直す手間をはぶきたいのです。 ただ、私の知っている範囲では、scaffoldはコントローラ内で、var $scaffoldの定義をして、そのコントローラ内にindex()のファンクションがない場合にのみ表示されます。 通常は上に書いたように、ユーザの通常のアクションとしてindex()を記述した場合は、それが実行されてしまいますし、index()を書く必要がないような場合でも、一般ユーザにデータベースの中身が見れてしまうのはまずいので、index()内で別のページにリダイレクトさせるなりの処理が必要になってきます。 このように、通常にユーザ用にindex()の記述がある場合にも、管理者用のadmin_index()の下でscaffoldの機能を使って、CakePHPが本来持っている画面編集機能を使ってテーブルの管理を行えるようにしたいのです。 そのために、どういった記述の仕方をすいればいいのかが分かりかねています。 このへんはデータベースを含めた管理者のディレクトリ管理で、多くのCakePHPをお使いの方も同じようなことを考えられている人達も何人かいると思われるので、もし御経験のある方は知恵を貸してください。 よろしくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • foreach
  • ベストアンサー率51% (43/84)
回答No.1

> 通常にユーザ用にindex()の記述がある場合にも、管理者用のadmin_index()の下でscaffoldの機能を使って、CakePHPが本来持っている画面編集機能を使ってテーブルの管理を行えるようにしたいのです。 僕が知る限りデフォルトだと無理な気がします。 scaffoldの仕様的にadminルーティングとの共存は難しいと思います。 かといってscaffoldの機能を拡張しようとは全く思わない。僕としてはそういう用途だとはおもってないので。 > 多くのCakePHPをお使いの方も同じようなことを考えられている人達も何人かいると思われるので、 そんな人いるのかな?少なくても僕は全くそうは思わない。 いくら管理サイトと言ってもプルダウンに連動したAjaxを組み込んだり、状況によってバリデーションを切り替える必要に迫られたり、入力確認画面の実装など、ちょっと考えただけでもscaffoldのみで実現するのが難しい要求定義はいくらでもあり得ます。 > テーブルが10個近くもあり そんなに面倒かな?10回bakeしたら良いだけじゃない?

関連するQ&A

  • wordpressの管理画面

    wordpress(3.4.1)の管理画面について質問です。 BackWPupというプラグインを利用しており、左側の管理メニューに 「BackWPup」というメニューが作成されています。 自分以外の管理者の場合に、このメニューを非表示にさせたく試行錯誤して いるのですが消えてくれません。 同じく、Contact Form 7というプラグインを利用すると左側の管理メニューに 「お問い合わせ」というメニューが作成されますが、これはfunctions.phpに 下記のようにすると消えました。 function remove_admin_menu() { remove_menu_page( 'wpcf7' ); } add_action( 'admin_menu', 'remove_admin_menu' ); この例に沿い function remove_admin_menu() { remove_menu_page( 'backwpup' ); } add_action( 'admin_menu', 'remove_admin_menu' ); とやっているのですが消えません。これを消すにはどうすればいいのでしょうか?

    • ベストアンサー
    • PHP
  • 1つのサーバで複数のドメイン管理

    AWS EC2を使ってウェブサーバを構築し、CakePHPをインストールしてウェブサイトを実装しております。 すでにドメインを2つ取得しており、それぞれのドメインでアクセスした際に、同じディレクトリにある2つのコントローラをそれぞれ実行させてページを表示させたいと思っております。 ドメイン(例) hoge.com fuga.com コントローラ(例) /lib/app/controllers/hoge_controller.php /lib/app/controllers/fuga_controller.php hoge.comに対しては、 routes.phpで Router::connect('/', array('controller' => 'hoge', 'action' => 'index')); と設定して hoge.comでアクセスした際にhogeコントローラのindexアクションが実行されるようにできましたが、この状態を維持しつつfuga.comでアクセスした際にfugaコントローラのindexアクションが実行されるようにできればと思っております。 cakephpやサーバの設定等は自由に行える環境ですので、cakephpのrouterやサーバのバーチャルホストの設定等で実現できますでしょうか。 お分かりいただける方いらっしゃいましたら、ご教授いただけますと幸いです。 以上、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • CakePHPで知ってると便利なもの

    CakePHPでブログをつくるチュートリアルを通して大体の流れをつかめるようになりました。 結構気に入っているのでガッツリ使っていきたいと思います。 そこで、CakePHPにデフォルトで備わってる機能として便利なものがあれば教えて下さい。 「こういう機能だけどこういう使い方もできる」というものでも構いません。 例えば appフォルダを複製して好きな名前をつけることで複数のアプリをもつことができるとか、 管理画面用にadmin用の設定が備わっているなど、どんなことでもよいです。 よろしくお願いします。

    • 締切済み
    • PHP
  • ロータスノーツ、アクションについて

    あるフィールドにテキストを入力するアクションを作りたいのですが、シンプルアクションでは出来ない様で、難しい記述が必要になるのでしょうか? シンプルアクションでも難しい記述でも良いので教えてください。 具体的に・・・ 社内注文のデータベースを作っています。 フォーム(注文書)にキャンセルアクションを作りたいのです。 ◆フォームを開いている(編集モードではない)状態で ◆フィールド「区分」に「【cancel】」を入れ、 ◆保存(上書き) ◆メールメッセージの送信(文書のリンクを含む) 宜しくお願いいたします。

  • PHP ZendFrameworkについて

    PHP ZendFrameworkについて質問がございます。 ブログのようなシステムを作成しており、 フロントコントローラでのルータ設定で困っております。 サイトのURL構成を以下のように考えております。 ■ユーザー画面 http://domain/blogId/controller/action/* ■ブログ所有者の管理画面 http://domain/blogId/module/controller/action/* ※blogIDには、任意の半角英数字が入ります。 ※管理画面の module には "admin" が入る予定です。 ■記述したソース ----------------------------------------------------- // フロントコントローラのインスタンス $front = Zend_Controller_Front::getInstance(); // モジュールディレクトリの設定 $front->addModuleDirectory(_SYS_PATH_.'app/modules'); // ルータを取得 $router = $front->getRouter(); // ルートを設定する $newRoute = array('blogId' => 'none', 'module' => 'default', 'controller' => 'index', 'action' => 'index' ); $route = new Zend_Controller_Router_Route(':blogId/:module/:controller/:action/*', $newRoute); $router->addRoute('default', $route); // ディスパッチする $front->dispatch(); ----------------------------------------------------- 上記のソースで、 ブログ所有者の管理画面はいいのですが、 ユーザー画面で、 http://domain/blogId/controller/action/* とアクセスすると controller が module になってしまいます。 http://domain/blogId/controller/action/* と、moduleを省いた場合は default のモジュールを呼び出せるようにしたいのです。 さらに モジュール を追加するとして、そのモジュールにアクセスする場合は、 http://domain/module/controller/action/* と blogId をはずしてアクセスしたいのですが、可能でしょうか? 初歩的なことかと思いますが、ご教授のほど宜しくお願い致します。

    • 締切済み
    • PHP
  • world press の管理画面エラーについて

    管理画面に入れなくなりました。 下記エラーが出ます。 Fatal error: Call to undefined function nocache_headers() in /home/●●●●●/wp-admin/admin.php on line 33 また、ブログにアクセスすると下記のエラーが出ます。 Fatal error: Call to undefined function wp() in /home/●●●●●/wp-blog-header.php on line 14 いろいろ調べて試みてみましたが、解決しません。 アドバイスよろしくお願いいたします。

  • Cakephp AppControllerについて

    CakePHPにて、 AppControllerクラスに処理を記述しようと思い、 app/app_controller.php を設置したのですが、 app/app_controller.php がどうしても呼び出されません。 色々調べてるのですが、どうしても原因が分かりません。 原因等分かる方がおりましたら教えて頂けますでしょうか? ---------------------- ■cakephpのバージョンは1.3です。 ■app/app_controller.phpの中身は↓です。 class AppController extends Controller { function __construct() { parent::__construct(); } function beforeFilter() { echo "test"; ←これが呼ばれない。 } } ----------------------

    • ベストアンサー
    • PHP
  • ZendFrameworkでModule階層化

    会社のプロジェクトで最近ZendFramework(以下ZF)を使い始めたのですが、 いきなりハマりました・・・ というのもそこそこ大規模なシステムで、メニューがかなり深い階層になりそうです。 ・example.com/module/controller/action のような形式でモジュールというものがあってそれを使うと、まず機能の塊を作れるという所まではわかりました。(間違ってたらごめんなさい・・・) 参考URL:http://framework.zend.com/manual/ja/zend.controller.modular.html 例:blog管理・・・blogモジュール、ニュースページ管理・・・newsモジュール、etc・・・ しかし大規模なシステムですと当然機能というものがたくさんあって、モジュールの中にモジュール(他にうまい言い方わかりませんでした・・・)みたいな事も必要になると思います。 http://www.webresourcesdepot.com/wp-content/uploads/file/admin-template/index.html 上のページのように、上部のタブメニューがmodule、左メニューが子module、さらに孫module・・・なんて言うものが必要になるかもしれません。 その場合、moduleの階層化をしないとかなりグチャグチャなソースになりかねません。 理想としては ■blogの管理者管理 ・example.com/blog/admin/xxx/yyy module:blog 子module:admin コントローラ/アクション:xxx/yyy ■newsの管理者管理 ・example.com/news/admin/xxx/yyy module:news 子module:admin コントローラ/アクション:xxx/yyy のように、階層化してすっきりさせたいのですが、実装方法がわかりませんでした。 blogやnewsごとにドメイン分けろと言われるかもしれませんが、管理画面は一つで一元管理したいので、そこは譲れない所です。 どなたかmoduleの階層化に成功した方いらっしゃいましたら教えてください。 お願いします。

    • ベストアンサー
    • PHP
  • codeigniterのsessionについて

    codeigniterで、管理画面を作っていて、今認証画面に取り掛かってますが、sessionが引き継がれません。 ※以下のコードは、session以外は省いてます。 controller側のtop.phpで、 class Top extends MY_Controller { public function __construct() { parent::__construct(); $this->load->library('session'); } public function index() { $superuser = array( 'superuser' => 'yes' ); $this->session->set_userdata($superuser); redirect('show'); } $this->load->view('admin/top', $page); } とし、controller側のshow.phpで、 class Show extends MY_Controller { public function __construct() { parent::__construct(); $this->load->library('session'); } public function index() { var_dump($this->session->userdata('superuser')); $this->load->view('admin/show'); } } としてますが、show.phpで、var_dumpがfalseを返してしまい、sessionが引き継がれません。 ご教授下さい。

    • 締切済み
    • PHP
  • CakePHP Authコンポーネントについて

    CakePHPのAuthコンポーネントでユーザ認証機能を実現しようとしているのですが、 ログアウト後の以下の問題を解決できずにいます。 ・ログインアクションがあるコントローラとは別のコントローラにアクセスした場合  ログイン画面に飛ばずそのままページが表示されてしまう。 ・ログインアクションがあるコントローラの別アクションにアクセスした場合  ログイン画面に飛ぶ。   いずれのコントローラも 「$this->Auth->allow(××)」は記載しておりません。 もし原因・対策をご存じであれば是非ご教示下さい。 宜しくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう