У меня из модели возвращаются данные в базовый контроллер и присваиваются парочку переменным таким образом:
class Controller_Base extends Controller_Template {
public $template = 'main';
public function before()
{
parent::before();
$webs = array();
$apps = array();
$app = new Model_Application();
$apps = $app->get_all();
$web = new Model_Web();
$webs = $web->get_all();
$this->template->content = '';
$this->template->styles = array('style');
$this->template->scripts = '';
$this->template->webs = $webs;
$this->template->apps = $apps;
}
}
в виде они уже идут как массив, а вот в контроллере я пока не пойму как задействовать функцию in_array, если сделаю так:
if (in_array("test",$this->template->webs)) {
echo "web";
}
elseif (in_array("test",$this->template->apps)) {
echo "apps";
}
то Kohana выдаст ошибку:
ErrorException [ Warning ]: in_array() [<a href='function.in-array'>function.in-array</a>]: Wrong datatype for second argument
Как же все-таки проверить прямо в контроллере есть ли допустим значение "test" в массиве webs?
Спустя 2 часа, 42 секунды (2.09.2012 - 17:43) Stasonix написал(а):
по сути в контроллер это передается как объект, чего я хочу добиться, так это чтобы это все-таки был массив.
Спустя 4 минуты, 38 секунд (2.09.2012 - 17:48) johniek_comp написал(а):
если модель возвращает as_array() то так:
if (in_array("test",$webs)) {
echo "web";
}
elseif (in_array("test",$apps)) {
echo "apps";
}
Спустя 4 минуты, 45 секунд (2.09.2012 - 17:53) Stasonix написал(а):
модель возвращает как я понимаю как какой-то объект, а контроллер Subject у меня такой ( я не в виде хочу использовать, а именно в контроллере ):
Если я просто $webs сделаю то такой переменной не существует в контроллере понимаешь?
Похоже на то что мне опять прийдется создавать классы Моделей в методе action_all контроллера Subject, но смысл когда они уже там есть?
class Controller_Subject extends Controller_Base {
public function action_all()
{
$url = $this->request->param('url');
$this->template->caption = $url;
if (in_array($url,$this->template->webs)) {
echo "web";
}
elseif (in_array($url,$this->template->apps)) {
echo "apps";
}
$links = array("a"=>"1","b"=>"2");
$view = View::factory('subject')
->set('links',$links);
$this->template->content = $view;
}
}
Если я просто $webs сделаю то такой переменной не существует в контроллере понимаешь?
Похоже на то что мне опять прийдется создавать классы Моделей в методе action_all контроллера Subject, но смысл когда они уже там есть?
Спустя 13 минут, 1 секунда (2.09.2012 - 18:06) johniek_comp написал(а):
class Controller_Base extends Controller_Template {
public $template = 'main';
public $webs = null;
public $apps = null;
public function before()
{
parent::before();
$app = new Model_Application();
$this->apps = $app->get_all();
$web = new Model_Web();
$this->webs = $web->get_all();
$this->template->content = '';
$this->template->styles = array('style');
$this->template->scripts = '';
$this->template->webs = $webs;
$this->template->apps = $apps;
}
}
class Controller_Subject extends Controller_Base {
public function action_all()
{
$url = $this->request->param('url');
$this->template->caption = $url;
if (in_array($url,parent::webs)) {
echo "web";
}
elseif (in_array($url,parent::apps)) {
echo "apps";
}
$links = array("a"=>"1","b"=>"2");
$view = View::factory('subject')
->set('links',$links);
$this->template->content = $view;
}
}
попробуй так
Спустя 18 минут, 50 секунд (2.09.2012 - 18:25) Stasonix написал(а):
johniek_comp, Нельзя так, ошибка:
Цитата |
ErrorException [ Fatal Error ]: Undefined class constant 'webs' |
Спустя 12 минут (2.09.2012 - 18:37) johniek_comp написал(а):
Stasonix
так сделай static, или в конструкторе вызывай свои модели
например так
так сделай static, или в конструкторе вызывай свои модели
например так
class Controller_Base extends Controller_Template {
public $template = 'main';
public $apps = array();
public $webs = array();
function __construct() {
$app = new Model_Application();
$this->apps = $app->get_all();
$web = new Model_Web();
$this->webs = $web->get_all();
}
public function before() {
$this->template->content = '';
$this->template->styles = array('style');
$this->template->scripts = '';
$this->template->webs = $this->webs;
$this->template->apps = $this->apps;
}
}
class Controller_Subject extends Controller_Base {
function __construct(){
parent::__construct();
}
public function action_all()
{
$url = $this->request->param('url');
$this->template->caption = $url;
if (in_array($url,$this->webs)) {
echo "web";
}
elseif (in_array($url,$this->apps)) {
echo "apps";
}
$links = array("a"=>"1","b"=>"2");
$view = View::factory('subject')
->set('links',$links);
$this->template->content = $view;
}
}
Спустя 45 минут, 41 секунда (2.09.2012 - 19:22) Stasonix написал(а):
johniek_comp, все сделал как ты говоришь, вызываю в конструкторе модели и т.д., в итоге ничего не изменилось, та же самая ошибка:
Цитата |
ErrorException [ Warning ]: in_array() [<a href='function.in-array'>function.in-array</a>]: Wrong datatype for second argument |
Это говорит о том что как ни крути, а из модели оно как объект приходит, я в ступоре.
На всякий случай, вот модель (у меня их две, практически одинаковые):
class Model_Application extends Model
{
protected $_tableApplications = 'applications';
/**
* Get all articles
* @return array
*/
public function get_all()
{
$sql = "SELECT * FROM ". $this->_tableApplications;
return DB::query(Database::SELECT, $sql)
->execute();
}
}
и вторая:
class Model_Web extends Model
{
protected $_tableWebs = 'webs';
/**
* Get all articles
* @return array
*/
public function get_all()
{
$sql = "SELECT * FROM ". $this->_tableWebs;
return DB::query(Database::SELECT, $sql)
->execute();
}
}
Может это было глупо создавать две модели, но тем не менее это вполне допустимо и я тут ничего коварного и плохого не вижу, а вот как быть использованием этого в контроллере тут уж БВ (большой вопрос).
Спустя 11 часов, 26 минут, 15 секунд (3.09.2012 - 06:48) Stasonix написал(а):
В общем тема решена:
всего-навсего.
$webs = web->get_all()->as_array();
$apps = app->get_all()->as_array();
всего-навсего.