我是新來的CodeIgniter並試圖發展與它相當簡單的應用程序 - 只是一種形式來處理登記爲員工想一個娛樂中心通行證。我試圖分開一些東西,使它們更清潔。笨定製庫不加載
下面是代碼:
應用/控制器/ reccenter.php
class RecCenter extends CI_Controller {
public function register() {
$data['title'] = "Utah Valley Rec Center Registration";
$this->output->enable_profiler(TRUE); // Put all the debug statements at the bottom of the page
$this->load->helper('html');
$this->load->library('form_validation');
$this->form_validation->set_rules('userRecCenter', 'recreation center selection', 'required');
$userRecCenter = $this->input->post('userRecCenter');
$registerSelf = $this->input->post('registerSelf');
$dependents = $this->input->post('dependents');
if($this->input->post('registerSelf') && !$registerSelf) { // Employee not registering themselves
$this->form_validation->set_rules('dependents', 'self selection or dependents', 'required');
} else if($this->input->post('dependents') && count($dependents) == 1 && $dependents[0] == "") { // Employee only registering themselves
$this->form_validation->set_rules('registerSelf', 'self selection or dependents', 'required');
}
if ($this->form_validation->run() == FALSE) {
$this->load->view('templates/header', $data);
$this->load->view('pages/reccenter/register', $data);
$this->load->view('templates/footer', $data);
} else {
$this->load->library('Reccenterdao');
$numRows = $this->reccenterdao->getRecCenterInfo();
var_dump($numRows);
// Check if already registered
// Redirect to different view to change their registration
// Do the registration
//redirect('reccenter/confirm');
}
}
public function confirm() {
$data['title'] = "Utah Valley Rec Center Registration Confirmation";
$this->load->view('templates/header', $data);
$this->load->view('pages/reccenter/confirm', $data);
$this->load->view('templates/footer', $data);
}
}
應用/庫/ Reccenterdao.php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class Reccenterdao {
private $CI;
public function __construct() {
$this->CI =& get_instance();
}
private function connect() {
$this->CI->load->database();
}
private function disconnect() {
$this->CI->db->close();
}
public function getRecCenterInfo() {
$this->connect();
var_dump("Made it here");
$result = $CI->db->query("SELECT * FROM ucfitness");
var_dump($result->result());
$this->disconnect();
return $result->num_rows();
}
}
這裏有幾個額外的配置項,所以你知道我做了什麼來定製它。
的application/config/autoload.php
$autoload['helper'] = array('form', 'url');
的webroot/index.php文件(對於環境的定義)
if(isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST'] == "my prod server") {
define('ENVIRONMENT', 'prod');
} else if(isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST'] == "my stage server") {
define('ENVIRONMENT', 'stage');
} else {
define('ENVIRONMENT', 'test');
}
if (defined('ENVIRONMENT'))
{
switch (ENVIRONMENT)
{
case 'test':
error_reporting(E_ALL);
break;
case 'stage':
case 'prod':
error_reporting(0);
break;
default:
exit('The application environment is not set correctly.');
}
}
我也複製到application/config/database.php
三個文件夾,application/config/test/database.php
,application/config/stage/database.php
,並application/config/prod/database.php
,配置它們各自的連接參數。每個環境都有不同的數據庫服務器和證書。
問題是,當我提交表單並且在表單驗證後使它進入到其他語句$this->form_validation->run()
我只能看到空白屏幕。沒有我的絕望var_dump
s,沒有。所以,經過我所有的努力和不同的方法來實現這一點,有幾個問題出現了。
- 什麼沒有在圖書館工作的?在經歷了所有我能找到的教程/問題之後,看起來我做得很對。
- 我如何讓這個其實我可以調試代碼?瀏覽器中沒有錯誤,Apache錯誤日誌中沒有錯誤。我還可以做些什麼?
- 將最好的做法是從控制器分離DAO是什麼?從我所知道的情況來看,把這個圖書館變成我想要的圖書館將是最好的主意。它可能只會被這個控制器使用,它將處理註冊和修改註冊。我將編寫幾個其他應用程序,這些應用程序都將位於此CI實例中,但它們將相當分離,並且不需要使用相同的DAO。
- 我可以使用首字母大寫的庫文件名,只要它以大寫字母開頭?
Reccenterdao.php
比RecCenterDAO.php
友善得多。
============================================ ================
編輯:我改變了整個事情的模型,但我得到了相同的功能 - 空白屏幕沒有任何錯誤。它似乎加載模型,因爲它在我嘗試實際使用它時與線條一起死亡$numRows = $this->dao->getRecCenterInfo();
我知道現在整件事毫無意義,因爲我沒有將功能用於數據庫或解析用戶輸入。這就是整個問題。在嘗試投入所有業務邏輯之前,我試圖讓它發揮作用。
應用/模型/ rec_center_dao.php
class Rec_center_dao extends CI_Model {
public function __construct() {
parent::__construct();
}
private function connect() {
$this->load->database();
}
private function disconnect() {
$this->db->close();
}
public function getRecCenterInfo() {
$this->connect();
var_dump("Made it here");
$result = $this->db->query("SELECT * FROM ucfitness");
var_dump($result->result());
$this->disconnect();
return $result->num_rows();
}
}
應用/控制器/ reccenter.php有關章節
if ($this->form_validation->run() == FALSE) {
$this->load->view('templates/header', $data);
$this->load->view('pages/reccenter/register', $data);
$this->load->view('templates/footer', $data);
} else {
$this->load->model('Rec_center_dao', 'dao');
$numRows = $this->dao->getRecCenterInfo(); // This is where it dies
var_dump($numRows);
// Check if already registered
// Redirect to different view to change their registration
// Do the registration
//redirect('reccenter/confirm');
}
=============== =============================================
EDIT2 :感謝評論,我發現這是連接到數據庫的問題。當我撥打$this->load->database();
時,它會出錯。我已經證實,憑藉我擁有的證書,我可以使用phpMyAdmin管理數據庫(我沒有shell訪問權限來測試)。
的application/config /測試/ database.php中
$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = 'my.hostname.com';
$db['default']['username'] = 'db_username';
$db['default']['password'] = 'db_password';
$db['default']['database'] = 'db'
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = TRUE;
隨着webroot/index.php
上述配置和application/config/test/database.php
應該拿起設置爲不同的環境,並相應地照顧它,對嗎?但是,如果我把var_dump
放在application/config/database.php
或application/config/test/database.php
中,它根本不會顯示出來。我確認環境設置正確(至少在我正在進行測試時)。
你需要啓用PHP錯誤報告,否則你會得到一個空白的屏幕,CI默認爲'開發'環境,檢查'webroot/index.php'中的「錯誤報告」部分,並適應你的自定義環境。另外爲什麼不使用模型而不是圖書館?最後,你可以讓CI自動管理你的數據庫連接,當然這是你的選擇,如果你想手動完成 –
我以爲我已經做到了。我在上面添加了代碼,以便您可以看到。看起來像我的環境定義邏輯無法正常工作。我認爲讓CI管理連接,所以也許我會再看一遍......現在你說了,模型似乎更有意義,特別是因爲我沒有重用庫。也許我會看看 –
我把它全部改爲模型,但我仍然得到相同的錯誤。我也嘗試改變錯誤日誌記錄以在所有環境中執行相同的'E_ALL',但是我仍然沒有發現任何可以找到的錯誤。 –