私は CakePHP を使用して請求システムに取り組んでいます。これは、最初はかなり基本的なものです。プロジェクトの基礎としてブログ チュートリアル ( http://book.cakephp.org/2.0/en/getting-started.html ) を使用しました。Twitter の Bootstrap フレームワークもインストールしました。
ナビゲーションにタブを使用しています。したがって、現時点では、ユーザーには次のタブ オプションがあります。
概要 - 請求書 - 経費 - 銀行 - 連絡先 - その他
Apps->View フォルダーには、Contacts フォルダーと Invoices フォルダーがあり、これらのフォルダーには次のファイルがあります。
index.ctp - これはページの一般的なレイアウトです。つまり、請求書と連絡先の場合は、データベースからのすべてのエントリを一覧表示する単なるテーブルです。
view.ctp - ユーザーがテーブル エントリをクリックすると、詳細ビューが表示されます。
add.ctp - 各ビューには追加ボタンがあり、このスクリプトは追加ページのレイアウトです。
Apps->View->Elements フォルダーには、タブ付きナビゲーション (tabs.ctp) のコードがあります。Apps->View->Contacts->index.ctp & Apps->View->Invoices->index.ctp に次のコード行があります。
<? echo $this->element('tabs'); ?>
これにより、各ビューにタブ付きナビゲーションが表示されます。
私の App->Config->routes.php には、次のコードがあります。
Router::connect('/', array('controller' => 'invoices', 'action' => 'index'));
明らかに、これにより Apps->View->Invoices->index.ctp がユーザーが表示する最初のページになります。
しかし、アプリケーションが読み込まれると、請求書ページは問題なく表示されますが、[連絡先] タブをクリックしようとしても何も起こりません。ソース コードを見ると、連絡先ビューのコードが読み込まれていません。
プロジェクトのレイアウトが間違っている可能性があるので、助けていただければ幸いです。
更新: ContactsController.php からのコード:
<?php
class ContactsController extends AppController {
public $helpers = array('Html', 'Form', 'Session');
public $components = array('Session');
public function index() {
$this->set('contacts', $this->Contact->find('all'));
}
public function view($id) {
if (!$id) {
throw new NotFoundException(__('Invalid contact'));
}
$contact = $this->Contact->findById($id);
if (!$contact) {
throw new NotFoundException(__('Invalid contact'));
}
$this->set('contact', $contact);
}
public function add() {
if ($this->request->is('contact')) {
$this->Contact->create();
if ($this->Contact->save($this->request->data)) {
$this->Session->setFlash('Your contact has been saved.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Unable to add your contact.');
}
}
}
}
更新 routes.php のサンプル コード:
/**
* Here, we are connecting '/' (base path) to controller called 'Pages',
* its action called 'display', and we pass a param to select the view file
* to use (in this case, /app/View/Pages/home.ctp)...
*/
//Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/', array('controller' => 'invoices', 'action' => 'index'));
/**
* ...and connect the rest of 'Pages' controller's urls.
*/
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
/**
* Load all plugin routes. See the CakePlugin documentation on
* how to customize the loading of plugin routes.
*/
CakePlugin::routes();
/**
* Load the CakePHP default routes. Only remove this if you do not want to use
* the built-in default routes.
*/
require CAKE . 'Config' . DS . 'routes.php';
よろしく、スティーブン