- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Kohana 框架 3.3 做一个简单的 MVC
界面。
我已将 Bootstrap 修改为:
'controller' => 'Album',
'action' => 'index',
专辑 Controller :
<?php defined('SYSPATH') OR die('No direct access allowed.');
class Controller_Album extends Controller
{
private $album_model;
private $genre_model;
private $list_view;
private $create_view;
private $update_view;
public function __construct(Request $request, Response $response)
{
parent::__construct($request, $response);
$this->album_model = new Model_Album;
$this->genre_model = new Model_Genre;
$this->list_view = new View('List');
$this->update_view = new View('Update');
$this->create_view = new View('Create');
}
public function action_index()
{
$this->show_albums_list();
}
private function show_albums_list()
{
$albums_list = $this->album_model->get_list();
$this->list_view->set('albums_list',$albums_list);
$this->list_view->render(TRUE);
}
public function show_create_editor()
{
$this->create_view->set('genres_list',$this->get_genres_list());
$this->create_view->render(TRUE);
}
public function show_update_editor($id)
{
$album_data = $this->album_model->read($id);
$this->update_view->set('album_id',$album_data[0]->id);
$this->update_view->set('name',$album_data[0]->name);
$this->update_view->set('author',$album_data[0]->author);
$this->update_view->set('genre_id',$album_data[0]->genre_id);
$this->update_view->set('genres_list',$this->get_genres_list());
$this->update_view->render(TRUE);
}
public function create()
{
$album_data=array(
'name' => $this->input->post('name'),
'author' => $this->input->post('author'),
'genre_id' => $this->input->post('genre_id')
);
$this->album_model->create($album_data);
url::redirect('Album');
}
public function update()
{
$album_data = array(
'name' => $this->input->post('name'),
'author' => $this->input->post('author'),
'genre_id' => $this->input->post('genre_id')
);
$this->album_model->update($this->input->post('album_id'),$album_data);
url::redirect('Album');
}
public function delete($id)
{
$this->album_model->delete($id);
url::redirect('Album');
}
private function get_genres_list()
{
$db_genres_list = $this->genre_model->get_list();
$genres_list = array();
if(sizeof($db_genres_list) >= 1)
{
foreach($db_genres_list as $item)
{
$genres_list[$item->id] = $item->name;
}
}
return $genres_list;
}
}
我在去往:http://localhost/kohana/ 时遇到了这个错误
ErrorException [ Notice ]: Undefined property: Model_Album::$db
APPPATH\classes\Model\Album.php [ 39 ]
public function get_list()
{
//error in the next line (39)
$this->db->select('albums.id as id,albums.name as name,albums.author as author, genres.name as genre');
$this->db->from($this->album_table);
$this->db->join($this->genre_table,'genres.id','albums.genre_id');
$query = $this->db->get();
return $query->result_array();
}
自举:
<?php defined('SYSPATH') or die('No direct script access.');
// -- Environment setup --------------------------------------------------------
// Load the core Kohana class
require SYSPATH.'classes/Kohana/Core'.EXT;
if (is_file(APPPATH.'classes/Kohana'.EXT))
{
// Application extends the core
require APPPATH.'classes/Kohana'.EXT;
}
else
{
// Load empty core extension
require SYSPATH.'classes/Kohana'.EXT;
}
date_default_timezone_set('America/Lima');
setlocale(LC_ALL, 'en_US.utf-8');
spl_autoload_register(array('Kohana', 'auto_load'));
//spl_autoload_register(array('Kohana', 'auto_load_lowercase'));
/**
* Enable the Kohana auto-loader for unserialization.
*
* @link http://www.php.net/manual/function.spl-autoload-call
* @link http://www.php.net/manual/var.configuration#unserialize-callback-func
*/
ini_set('unserialize_callback_func', 'spl_autoload_call');
mb_substitute_character('none');
// -- Configuration and initialization -----------------------------------------
I18n::lang('en-us');
if (isset($_SERVER['SERVER_PROTOCOL']))
{
// Replace the default protocol.
HTTP::$protocol = $_SERVER['SERVER_PROTOCOL'];
}
if (isset($_SERVER['KOHANA_ENV']))
{
Kohana::$environment = constant('Kohana::'.strtoupper($_SERVER['KOHANA_ENV']));
}
Kohana::init(array(
'base_url' => '/kohana/',
));
Kohana::$log->attach(new Log_File(APPPATH.'logs'));
Kohana::$config->attach(new Config_File);
Kohana::modules(array(
// 'auth' => MODPATH.'auth', // Basic authentication
// 'cache' => MODPATH.'cache', // Caching with multiple backends
// 'codebench' => MODPATH.'codebench', // Benchmarking tool
'database' => MODPATH.'database', // Database access
// 'image' => MODPATH.'image', // Image manipulation
// 'minion' => MODPATH.'minion', // CLI Tasks
'orm' => MODPATH.'orm', // Object Relationship Mapping
// 'unittest' => MODPATH.'unittest', // Unit testing
// 'userguide' => MODPATH.'userguide', // User guide and API documentation
));
// Cookie::$salt = NULL;
Route::set('default', '(<controller>(/<action>(/<id>)))')
->defaults(array(
'controller' => 'Album',
'action' => 'index',
));
型号:
<?php defined('SYSPATH') OR die('No direct access allowed.');
class Model_Album extends Model_Database
{
private $album_table;
private $genre_table;
public function __construct()
{
//parent::__construct();
$this->album_table = 'albums';
$this->genre_table = 'genres';
}
public function read($id)
{
$this->db->where('id', $id);
$query = $this->db->get($this->album_table);
return $query->result_array();
}
public function delete($id)
{
$this->db->delete($this->album_table, array('id' => $id));
}
public function update($id,$data)
{
$this->db->update($this->album_table, $data, array('id' => $id));
}
public function create($data)
{
$this->db->insert($this->album_table, $data);
}
public function get_list()
{
$this->_db->select('albums.id as id,albums.name as name,albums.author as author, genres.name as genre');
$this->db->from($this->album_table);
$this->db->join($this->genre_table,'genres.id','albums.genre_id');
$query = $this->db->get();
return $query->result_array();
}
}
编辑---
数据库.php
<?php defined('SYSPATH') OR die('No direct access allowed.');
return array
(
'default2' => array
(
'type' => 'MySQL',
'connection' => array(
'hostname' => 'localhost',
'database' => 'cd_collection',
'username' => 'root',
'password' => 'root',
'persistent' => FALSE,
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => FALSE,
),
'alternate' => array(
'type' => 'PDO',
'connection' => array(
'dsn' => 'mysql:host=localhost;dbname=kohana',
'username' => 'root',
'password' => 'r00tdb',
'persistent' => FALSE,
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => FALSE,
),
'default' => array
(
'type' => 'MySQLi',
'connection' => array(
'hostname' => 'localhost',
'database' => 'cd_collection',
'username' => 'root',
'password' => 'root',
'persistent' => FALSE,
'ssl' => NULL,
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => FALSE,
'profiling' => TRUE,
),
);
最佳答案
尝试使用
$this->_db
代替
$this->db
Model_Database 类没有属性 $db。您可以找到更多信息 here
编辑:在您的模型类更改中:
class Model_Album extends Model_Database
到
class Model_Album extends ORM
将database.php 文件放入application/config/ 目录:
return array
(
'default' => array
(
'type' => 'MySQLi',
'connection' => array(
/**
* The following options are available for MySQL:
*
* string hostname server hostname, or socket
* string database database name
* string username database username
* string password database password
* boolean persistent use persistent connections?
*
* Ports and sockets may be appended to the hostname.
*/
'hostname' => 'localhost',
'database' => 'db_name',
'username' => 'db_user_name',
'password' => 'db_user_password',
'persistent' => FALSE,
),
'table_prefix' => '',
'charset' => 'utf8',
'caching' => FALSE,
'profiling' => TRUE,
),
);
关于php - ErrorException [注意]:未定义的属性:Model_Album::$db,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36409197/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!