Вы забыли запустить запрос:
public static function insert_names($name)
{
$query = DB::query(DATABASE::INSERT, 'INSERT INTO names (name) VALUES (:name)')->parameters(array(':name' => $name))->execute();
}
Однако было бы лучше использовать конструктор запросов Kohana:
public static function insert_names($name)
{
$query = DB::insert('names', array('name'))->values(array($name))->execute();
}
или , исходя из вашего кода, я могу судить, что вы новичок, вы можете использовать ORM и еще больше упростить его, выполнив это непосредственно в контроллере:
if(!empty($_POST['name']))
{
$result = ORM::Factory('index')->set(array('name' => $_POST['name']))->save();
}
Однако проблема все еще будет существовать, потому что ваш метод insert_names ничего не возвращает, поэтому вы установите переменную результата вашего шаблона как FALSE.
Я считаю, что то, что вы хотели бы сделать, выглядит следующим образом:
public static function insert_names($name)
{
if(DB::insert('names', array('name'))->values(array($name))->execute())
{
return $name;
}
}
(с ORM не было бы необходимости создавать этот метод в первую очередь)
Я вижу еще одну ошибку в вашем контроллере - я думаю, вы не привыкли к ошибкам E_NOTICE. Вместо того, чтобы устанавливать $ result как пустую строку, было бы лучше просто немного изменить свой код:
if(!empty($_POST['name']))
{
$this->template->content = View::factory('about/about');
if($name = Model::factory('index')->insert_names($_POST['name']))
{
$this->template->content->set('result', $_POST['name']);
}
else
{
// some kind of error message
}
}
Возможно, было бы неплохо сгруппировать все эти переменные из шаблона в одно замечательное семейство:
class Controller_About extends Controller_Template{
public function action_index()
{
$config = Kohana::$config->load('common');
$this->template->set(array(
'site_name' => $config->get('site_name'),
'site_description' => $config->get('site_description'),
'page_title' => 'About',
'styles' => 'index/index'
));
$this->template->content = View::factory('about/about');
if($name = Model::factory('index')->insert_names($_POST['name']))
{
$this->template->content->set('result', $_POST['name']);
}
else
{
// some kind of error message
}
}
}
Там. Разве это не A LOT чище? :)
Хотя он все еще может использовать Валидацию, но это не относится к вашему первоначальному вопросу, поэтому я просто оставлю это так.