Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: CodeIgniter: название функций в контроллерах
Форумы портала PHP.SU » » CMS и фреймворки » CodeIgniter: название функций в контроллерах

Страниц (1): [1]
 

1. Leviatan - 09 Сентября, 2013 - 13:00:47 - перейти к сообщению
Здравствуйте! Подскажите пожалуйста! Можно ли в контролере, в название функции подставить значение из БД. Спасибо!
2. caballero - 09 Сентября, 2013 - 13:24:20 - перейти к сообщению
а какое дело компилятору куда эта функция относится к контроллеру или куда то еще
3. Leviatan - 09 Сентября, 2013 - 13:28:18 - перейти к сообщению
caballero пишет:
а какое дело компилятору куда эта функция относится к контроллеру или куда то еще

Даже не знаю что ответить.
Я наверное из тех случаев когда только вникаю в самые азы PHP и CodeIgniter.
Пока все мои попытки как то это сделать ничем не увенчались. Мне хоть малейший пример. Спасибо!
4. LIME - 09 Сентября, 2013 - 13:32:36 - перейти к сообщению
ну ты покажи попытку...проще будет на ошибки указать
5. Ch_chov - 09 Сентября, 2013 - 13:33:48 - перейти к сообщению
Leviatan пишет:
Пока все мои попытки как то это сделать ничем не увенчались.

Если не можете объяснить что вам нужно на словах. То покажите хотя бы свой код. Может быть кто нибудь вас поймет.
6. Leviatan - 09 Сентября, 2013 - 14:01:27 - перейти к сообщению
LIME пишет:
ну ты покажи попытку...проще будет на ошибки указать

к примеру есть контроллер test. Во второй функции мне надо поставить значение из БД. Вот один из примеров как я пытаюсь это делать:


PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.     $this->db->where('url','test');
  3.     $query = $this->db->get('category');
  4.     return $query->result_array();
  5.     foreach($category as $item){
  6.  
  7.    
  8.    
  9.  
  10.    
  11. class Test extends CI_Controller {
  12.  
  13.         function index()
  14.         {
  15.             echo 'test';
  16.         }
  17.         function $item['url']()
  18.         {
  19.             echo 'Тестроване';
  20.         }
  21.  
  22. }
  23.     }
  24. ?>

Прошу не судить строго. PHP учу 2 недели а в CodeIgniter вникаю только пару дней. Буду благодарен за любую помощь
7. LIME - 09 Сентября, 2013 - 14:08:25 - перейти к сообщению
о м г
8. Bio man - 09 Сентября, 2013 - 14:10:10 - перейти к сообщению
Так не получится. Либо создавай параметризованый общий метод, где будешь принимать $item['url'] (в настройках маршрутов нужно будет прописать соответствующее правило), либо пользуйся волшебным методом __call.
(Добавление)
либо для каждого uri создавай отдельное действие
9. Leviatan - 09 Сентября, 2013 - 14:13:04 - перейти к сообщению
Bio man пишет:
Либо создавай параметризованый общий метод

Не понял ??? Непонял!
Bio man пишет:
либо пользуйся волшебным методом __call

А есть примеры использования?
10. Bio man - 09 Сентября, 2013 - 14:18:54 - перейти к сообщению
Leviatan пишет:
А есть примеры использования?
http://www.php.net/manual/ru/lan....php#object.call
Leviatan пишет:
Не понял ??? Непонял!

не помню как в там в CI, но точно можно создать один метод (действие) и настроить маршрут так, что бы этому действию передавался параметр из адресной строки.
11. Leviatan - 09 Сентября, 2013 - 14:33:34 - перейти к сообщению
Bio man пишет:
Leviatan пишет:
А есть примеры использования?
http://www.php.net/manual/ru/lan....php#object.call
Leviatan пишет:
Не понял ??? Непонял!

не помню как в там в CI, но точно можно создать один метод (действие) и настроить маршрут так, что бы этому действию передавался параметр из адресной строки.


Может я не правильно копаю. Вообще мне нужно сделать возможность из админки сайта генерировать новые страницы сайта по шаблону. И т.к. название функции в контролере это же и ее УРЛ адрес в браузере, то возникла мысль чтобы это название было динамическим а не статическим. То есть справа у меня было просто
PHP:
скопировать код в буфер обмена
  1.  function tester()
  2.         {
  3.             echo 'Тестирование';
  4.         }

и страница по адресу site.ru/test/tester работала. А теперь надо сделать чтобы вместо tester подтягивалось каждый раз свое название которое предопределено в БД.
12. Bio man - 09 Сентября, 2013 - 14:38:11 - перейти к сообщению
сделай tester параметром и в действии test применяй его.
(Добавление)
http://code-igniter[dot]ru/user_guid[dot][dot][dot][dot]html#passinguri
13. Мелкий - 09 Сентября, 2013 - 14:41:17 - перейти к сообщению
Leviatan пишет:
А теперь надо сделать чтобы вместо tester подтягивалось каждый раз свое название которое предопределено в БД.

Решение задачи лежит в обратной постановке задачи:
Нужно чтобы запросы передавались одному определённому экшену, а тот уже будет лезть в базу и проверять, существует ли такое.

С CI дел не имел, но скорей всего вопрос к правилам роутинга.
По ссылке выше раздел "Переадресация вызова функции", как вариант.

Bio man пишет:
либо пользуйся волшебным методом __call.

Маленький нюанс. method_exists не проверяет __call. А в вызов метода без проверки существования оного в CI - я как-то не поверю.
14. Leviatan - 09 Сентября, 2013 - 14:53:29 - перейти к сообщению
Bio man пишет:
сделай tester параметром и в действии test применяй его.
(Добавление)
http://code-igniter.ru/user_guide/general/controllers.html#passinguri


Обана. Вот это попробую применить. Спасибо! Круто
(Добавление)
Мелкий пишет:
Маленький нюанс. method_exists не проверяет __call. А в вызов метода без проверки существования оного в CI - я как-то не поверю.

Я правда мало что понял. Но спасибо! Возможно со временем буду более развит в этой теме)

 

Powered by ExBB FM 1.0 RC1