Я собираюсь создать пользовательскую библиотеку. Я хочу передать строку из представления в библиотеку и процесс, а затем вернуться к тому же представлению после. Мой код выглядит так:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); //return profile pic of img arrays. class MultiImageParser { function parser($multiImage) { //get $prods->images here as parameter $images = $multiImage; //gets multiple image from controller like 1.jpg,2.jpg,3.jpg $pieces = explode(",", $images); //explode make arrays. $one = $pieces[0]; return $one; } }
<?php $CI =& get_instance(); $CI->load->library('multiImageParser'); //loading library from view $profilepic = $CI->multiImageParser->parser($prods->images); echo $profilepic; ?>
И я получаю этот call to member function parser() on a non-object
ошибки call to member function parser() on a non-object
. Как я могу это решить.
Проблема заключается в способе вызова метода библиотеки. В соответствии с документацией CI – Создание библиотек :
Объектные экземпляры всегда будут иметь более низкий регистр
$this->someclass->some_function(); // Object instances will always be lower case
Поэтому в вашем случае это должно быть:
$profilepic = $this->multiimageparser->parser();
Однако вы всегда должны выполнять всю эту работу в контроллере, а не в представлении, чтобы следовать правильному шаблону MVC
ваш контроллер должен выглядеть следующим образом:
public function controller_method() { $this->load->library('MultiImageParser'); $img = $this->multiimageparser->parser(); $data = array( "profilepic" => $img ); $this->load->view('view_name', $data); }
и ваш вид:
echo $profilepic;
У вас есть строка, которая представляет собой вложенный массив имен изображений, наклеенных запятой. Сделайте свою работу запрошенным разделением этого элемента (и, следовательно, выделите его переменной) в контроллере, который загружает ваше представление. Чтобы объяснить себя немного лучше, этот код должен оставаться в контроллере, который загружает файл просмотра, который вы разместили здесь. Или, другими словами, в том же контроллере, где генерируется $prods->images
. Кроме того, он не должен быть библиотекой, он может быть (частный / защищенный, возможно?) Метод одного и того же контроллера. Но также, если вы хотите его использовать в разных местах, вы также ответили вспомогательным вариантом.