[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Kohana
Stasonix
Извиняюсь что на каждый чих создаю новую тему, но все же это и другим может быть полезно, так что вот в чем вопрос:

У меня из модели возвращаются данные в базовый контроллер и присваиваются парочку переменным таким образом:

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 у меня такой ( я не в виде хочу использовать, а именно в контроллере ):


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, или в конструкторе вызывай свои модели
например так

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();


всего-навсего.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.