передача параметра из представления в библиотеку и возврат после процесса.

Я собираюсь создать пользовательскую библиотеку. Я хочу передать строку из представления в библиотеку и процесс, а затем вернуться к тому же представлению после. Мой код выглядит так:

применение / библиотеки / MultiImageParser.php

<?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 . Кроме того, он не должен быть библиотекой, он может быть (частный / защищенный, возможно?) Метод одного и того же контроллера. Но также, если вы хотите его использовать в разных местах, вы также ответили вспомогательным вариантом.