passing variables between functions in same controller using codeigniter - php

How to pass variable between two functions in same controller?
Do I need to use $this->session->set_flashdata is this right way to go ?
function load() {
$this->userhash = $this->uri->segment(3);
}
function save() {
$query_customer = $this->Customers->get_customer($this->userhash);
}
sorry if this is a basic stuff, but I am still learning.
I need to edit my question
In Ivan link, that I also googled out
there is a code which goes something like this
function index() {
$this->msg = 'data';
$this->testme();
}
function testme() {
echo $this->msg;
}
and its works, but I can not call $this->testme() directly in index(), so I can not load save() in load()

Passing data between two functions in my controller class

Related

CodeIgniter can not access global variable in controller

I have already tried lots of ways. add library, add config file, add a controller, just add in same controller.........etc.
This also have same problem:
(this is add in same controller)
<?php
class Test extends CI_Controller{
public $data = array();
public function __construct(){
parent::__construct();
//if call add_data() here, it is work
}
function add_data(){
$arraya = array('a'=>'aa', 'b'=>'bb');
$this->data = $arraya;
}
function index(){
$this->add_data();
}
function want_print(){
print_r($this->data);
}
}
?>
if I call add_data in index, i cannot get any data in want_print()....
if I call add_data in the construct, i can get data in want_print()..
Please anyone help me solve this problem?
I don't want to call it in construct because i will not call it every time...
You can set the data in your want_print() function like this:
function want_print() {
$this->index();
print_r($this->data);
}

pass variables from zf2 helper

I want to pass variables to some.phtml from zf2 view helper.
I want to return some data inside my view/application/some/some.phtml
public function __invoke($request)
{
}
can anyone suggest?
Why not just do:
public function __invoke($request)
{
$myVar = 'these';
$myOtherVar = 'probably';
$anotherVar = 'arent really strings';
return [$myVar, $myOtherVar, $anotherVar];
}
But I would probably try to refactor so this is all done in the controller. But if you state the actual problem you are having and what you are trying to achieve you will probably get a better answer

How to access controller method inside the same controller

i have method "A_method" inside the controller. and inside A_method i would like to call another method in same controller "B_method".how can i call method "B_method" inside "A_method"
function A_mehtod()
{
$rsl = B_method(10);
echo $rsl;
}
function B_method($data)
{
retun ($data+1);
}
please give me a solution in Php MVC. because i'm working on opencart and i'm new to it
$rsl = $this->B_method($data);
That's all. Have a nice day!!
function A_mehtod() {
$rsl = $this->B_method(10);
echo $rsl;
}

PHP Methods that are always called

I'm currently working on an own PHP-MVC-Framework (for experience purposes only).
My question: Is it possible to call a defined function or method, every time a class-method
has been called?
For example:
public function view($id) {
//Code ...
$this->view->render(__FUNCTION__);
}
What I want is:
public function view($id) {
//Code ...
//render-method is called automatically with functionname as parameter
}
I tried different methods ... but without success.
Would be great if someone could help me out with this.
Cheers,
Chris
You can use Magic Methods do achieve this behavior:
public function __call($func, $args) {
if(!method_exists($this, $func)) {
return;
}
// do some coding here
call_user_func_array($func,$args);
// do some coding there
}
private function view($arg1, $arg2) {
// and here
}
Remember: view function must be private/protected.
$obj->view("asdasd", "asdsad");
Should do ::__call(), then ::view() method
You could create a function as a liaison using PHP's ability to use variable values for execution purposes. for example:
function call($func,$param)
{
$this->$func($param);
$this->render($func);
}
$myObj->call('view',$id);
You can use a wrapper method. Call this method and pass everything else as a parameters.

Going from the Controller to the View

I am working on creating my own very simple MVC and I am brainstorming ways to go from the controller to the view. Which involves sending variables from a class to just a plain old PHP page.
I am sure that this has been covered before, but I wanted to see what kind of ideas people could come up with.
//this file would be /controller/my_controller.php
class My_Controller{
function someFunction(){
$var = 'Hello World';
//how do we get var to our view file in the document root?
//cool_view.php
}
}
Some kind of hashtable is a good way to do that. Return your variables as association array which will fill all the gaps in your view.
Store your variables as a property in your controller object, then extract them when rendering
class My_Controller {
protected $locals = array();
function index() {
$this->locals['var'] = 'Hello World';
}
protected function render() {
ob_start();
extract($this->locals);
include 'YOUR_VIEW_FILE.php';
return ob_get_clean();
}
}
You can define those magic __get and __set methods to make it prettier
$this->var = 'test';
I'm also developing my own simple MVC and the most simple way to do it is ...
class My_Controller
{
function someFunction() {
$view_vars['name'] = 'John';
$view = new View('template_filename.php', $view_vars);
}
}
View class
class View
{
public function __construct($template, $vars) {
include($template);
}
}
template_filename.php
Hello, <?php echo $vars['name'];?>
I highly recommend you to take a look at PHP Savant http://phpsavant.com/docs/
I'd checkout Zend_View and how it accomplished view rendering.
You can get the source of View and AbstractView on github - unfortunaly I don't find the current repository (in svn) that easy to browse.
Essentially the view variables are contained in a View object (which your controller would have access to), then the template (plain old php document) is rendered inside that object. That method allows the template access to $this.
It would be something like:
<?php
class View
{
public function render()
{
ob_start();
include($this->_viewTemplate); //the included file can now access $this
return ob_get_clean();
}
}
?>
So in your controller:
<?php
class Controller
{
public function someAction()
{
$this->view->something = 'somevalue';
}
}
?>
And your template:
<p><?php echo $this->something;?></p>
In my opinion this pattern allows you much flexibility with the view.
I created my own MVC for the free PHP course I'm conducting for a handful of people wanting to get better at PHP.
By far the best way to do this is to use the Command + Factory pattern.
E.g.
interface ControllerCommand
{
public function execute($action);
}
In each controller:
class UserController implements ControllerCommand
{
public function execute($action)
{
if ($action == 'login')
{
$data['view_file'] = 'views/home.tpl.php';
}
else if ($action == 'edit_profile')
{
$data['view_file'] = 'views/profile.tpl.php';
$data['registration_status'] = $this->editProfile();
}
return $data;
}
}
From your main front controller:
$data = ControllerCommandFactory::execute($action);
if (!is_null($data)) { extract($data); }
/* We know the view_file is safe, since we explicitly set it above. */
require $view_file;
The point is that every Controllercommand class has an execute function and that returns its view and any data for that view.
For the complete MVC, you can access the open source app by emailing me at theodore[at]phpexperts.pro.

Categories