calling a different action in the same controller - php

I'm developing a small app. using php and Zend Framework. I have a form, and I use it's controller to view the form. Now I need to manipulate the form data and redirect the user accordingly.
here is my controller
<?php
class NewuserController extends Zend_Controller_Action {
public function init()
{
/* Initialize action controller here */
}
public function newuserAction()
{
$this->view->newuser;
}
public function adduserAction(){
$data = $this->getRequest()->getParams();
$u = new User();
$u->setUserName($data['uName']);
$u->setPrepwd($data['pwd']);
$u->setPrepwd($data['pwd']);
if($u->isEqual()){
$val = $u->addUsers();
if($val)
$this->_helper->redirector('main','main');
}
else
$this->_helper->redirector('newuser','newuser');
}
}
?>
my view is newuser.phtml. In the action attributr of the <form> I have specified Newuser/adduser . But when I submit the form it again displays the newuser.phtml.
Why is this?
Thanks in advance
Charu

You can forward the request instead of redirecting:
$this->_forward('newuser');

I would suggest that you use the redirector helper instead of the foward because if you want the user to be redirected to the main page with foward it will redirect but it won't change the url so if they were to bookmark the page for example it wont work. If you use the redirector it will redirect and change the url to show just your main phtml page. Also if you are in the same controller its not necessary to include the second param which is the controller. Check this out for more help
http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.redirector

Related

url redirect in mvc . i want to redirect localhost/windshield-replacement.html to localhost/greenvalleyaz

My applications is now in phalcon php framework. I want to redirect a url which contain .html at the end. To redirect, I wrote the controller name as WindshieldReplacementHtmlController.php but because of the dot in between I could not redirect. How can I solve this?
Redirect from:
localhost/windshield-replacement.html
to
localhost/greenvalleyaz
When I type localhost/windshield-replacement-html its redirecting to the target but when i use localhost/windshield-replacement.html its not detecting the controller.
is it the correct way to do that ?
In MVC you should not show the View Directly
you have to access a controller action --> in action you have to render view
In the Example I want to show user/order.phtml
I will access this page from Browser localhost/appname/user/orders
UserController.php
use Phalcon\Mvc\View;
class UserController {
function ProfileAction(){ //access localhost/appname/controller/profile
}
function loginAction(){ //access localhost/appname/controller/profile
}
function ordersAction(){ //access localhost/appname/controller/orders
$view = new View();
// Setting views directory
$view->setViewsDir('app/views/');
$view->start();
// Shows recent posts view (app/views/user/orders.phtml)
$view->render('user', 'orders');
$view->finish();
// Printing views output
echo $view->getContent();
}
}
Refer : Phalcon_Mvc_View

CodeIgniter controller method not responding

I have a codeigniter application that is effectively just a one-page form that takes in info and sends an e-mail. I created a method that is intended to handle form submission and send the e-mail called "submit", but for some reason this method appears not to do anything at all.
Here's my controller code:
class Main extends CI_Controller {
public function __construct() {
parent::__construct();
}
public function index($page = "home") {
// Loading the form view.
$this->load->view($page);
}
// This is the method that doesn't do anything.
public function submit() {
// I would be processing post data from the form here,
// but right now I'm just trying to load
// a view in this method to see if it's working
$this->load->view("form_submit");
}
My view is using the CodeIgniter form_open function to create the form, and looks as follows:
echo form_open("main/submit/");
This, to my understanding, is how one is supposed to use the form_open function to provide an action to the form.
The form opening tag looks like this when the view is accesssed.
<form action="http://localhost:81/project1/main/submit" method="post" accept-charset="utf-8">
The action and method in the form tag appears to be correctly set, but when clicking on submit on the form the home view just refreshes. Additionally, if I try to directly navigate to "home/submit/" it just loads the home view again. I'm starting to go a little crazy on this and I'm sure I'm missing something really simple.

"Action" in indexController not rendering in view

I have an existing Zend 1.12 project with modules et al that I am trying to simply add a view to create another web page. So there is a controller called "Management" that has an index action, the default of course, and the correct view page called index.phtml. That is all fine and works inside the entire project/website.
class Management_IndexController extends Default_Controller_Action {
function indexAction() {
$this->view->headStyle()->appendFile('contact.css', 'contact')
->appendFile('message.css')
;
$this->setLayout('management');
$this->view->headTitle()->set('Management');
$message = new Com_Ui_Message();
$request = $this->_request;
$settings=new Com_Data();
$content=new Com_Data();
$data = new Com_Data($request->getPost());
$this->setFocus('#name');
}
function chatAction() {
$this->view->headStyle()->appendFile('contact.css', 'contact')
->appendFile('message.css')
;
$this->view->testMessage = "test";
}
}
So if I browse to http://www.bmcmusicgroup.com/management I see the default action public function, and that is all good. If I try to add another public function called chatAction inside of the management controller, and create a view page called chat.phtml in the appropriate folder where the index.phtml file is (the management index.phtml file), and then point my browser to http://www.bmcmusicgroup.com/management/chat I get nothing.
This is an existing site that I am trying decipher. Any pointers would be greatly appreciated.
Try changing your url to the following and you should see the page: http://www.bmcmusicgroup.com/management/index/chat. The URL you entered (http://www.bmcmusicgroup.com/management/chat) decomposes like so:
Module: management;
Controller: chat;
Action: index

How to redirect controller from same module

I have one module that is OfficeModule. In OfficeModule I have two
controller BranchController and BranchTypeController. And two model
BranchModel and BranchTypeModel. And also two view file. Files path
are like that:
protected\modules\office\controllers\branchController.php
protected\modules\office\controllers\branchtypeController.php
protected\modules\office\models\Branch.php
protected\modules\office\models\BranchType.php
I have one Module file: protected\modules\office\OfficeModule.php
When I call from url
projectname.test.com/office/branch I want to redirect like that:
projectname.test.com/office/branchtype. Now I am writing redirect() in
OfficeModule.php within
public function beforeControllerAction($controller, $action){
$controller->redirect(array('../branchtype'));
}
But it doesn't work and can't redirect. Anyone please help me. Thanks a lot!
That's ok like that: :)
public function beforeControllerAction($controller, $action)
{
$getcontroller = Yii::app()->controller->id;
if($getcontroller == 'branch'){
$controller->redirect(array('/office/branchtype'));
}
}
Try:
$controller->redirect(array('branchtype/index'));
it's redirects to your module's controller branchtype and action index. And
$controller->redirect(array('/branchtype/index'));
redirects to the app controller branchtype and action index (outside the module)

How can I redirect a 404 Error in a custom 404 page using Codeigniter?

Kind sirs,
I'm using Codeigniter to build a blog. I might need a way to redirect a 404 error into a custom 404 page. Just like what Abduzeedo.com's 404 page. Is it possible to control this by using routes? Or should i use controllers to direct it to another view? Thanks very much!
there is another way which I use: by overriding Exception core class of Codeigniter. Firstly make sure your config file(system/application/config/config.php) subclass prefix is as following
$config['subclass_prefix'] = 'MY_';
Then make a file named MY_Exceptions.php in system/application/libraries. Then override the function show_404() function here as follows.
class MY_Exceptions extends CI_Exceptions{
function MY_Exceptions(){
parent::CI_Exceptions();
}
function show_404($page=''){
$this->config =& get_config();
$base_url = $this->config['base_url'];
$_SESSION['error_message'] = 'Error message';
header("location: ".$base_url.'error.html');
exit;
}
}
Now Error controller will be your error page, where the page will be redirected for 404 error.
Custom 404 page is create by using the following 3 steps,
Step 1: First open routes.php in application/config and set a custom controller name,
$route['404_override'] = 'my404'; //my404 is class name.
Step 2: Create a new controller and write the following code in it. The code is very easy to understand. So I am not going to explain it here,
<?php
class my404 extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$this->output->set_status_header('404');
$data['content'] = 'error_404'; // View name
$this->load->view('index',$data);//loading in my template
}
}
?>
Step 3: Create a view file with name 'error_404.php' with your custom message.
You don't need to create any controller or modify the code, rather than modify one view file. Just placed your 404 page HTML into the application/views/errors/html/error_404.php file.
If you want to use base_url() or any other CodeIgniter functions, initialize CI_Controller class like the below code.
<?php
$ci = new CI_Controller();
$ci =& get_instance();
$ci->load->helper('url');
?>
For a simple solution, go to your "error_404.php" file in "application/errors/" directory and put this code at the beginning of the file:
header("Location:".base_url());
It'll redirect your 404 page to home page.
Simple Solution.
Create your custom error or Page not found page within view.
Create a controller for error page. Within index function load the view of error page that you already created in previous step.
Now, Go to your application/config/routes.php
you should find $route['404_override'] = '';
Its the '' mean its calling the default error page.
Now place your controller name for error page .
It will work.
Suppose my Controller for error page is 'error'. and view page is 'notfound' .
So, code for Error.php controller will be:
<?php
class Error extends CI_Controller
{
function index()
{
$this->load->view('notfound');
}
}
Now, I replaced $route['404_override'] = ''; to $route['404_override'] = 'error'; in
application/config/routes.php.
Well you want to show your custom 404page when page not found in your website you just replace your custom file on core file which is located in application/error/error_404.php just replace your file here and you are good to go else where you can follow other method by using routes and custom controller for you custom 404 page. But the shortest and easiest way is replacing the core file with custom 404error page file
First open routes.php in the application/config folder and set a custom controller name.
$route['404_override'] = 'custom404'; //custom404 is class name.
Create a new controller and write the following code in it. The code is very easy to understand. So I am not going to explain it here.
<?php
class custom404 extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$this->output->set_status_header('404');
$data['content'] = 'error_404'; // View name
$this->load->view('index',$data);//loading in my template
}
}
?>
Create a view file with name 'error_404.php' with your custom message.
That is all you need to do and will be having your custom 404 page now.
No need to define any complexity.
The process is very simple.
First, go to your application->config->routes.php file and change this with your controller's function, where you simply load the header, footer, and 404.php page.
$route['404_override'] = 'welcome/_404';
Then come to your controller's page
function _404(){
$this->load->view("header");
$this->load->view("404");
$this->load->view("footer");
}
The same question is also available here
Display a view for 404 error in CodeIgniter
A more simple solution:
Just edit /application/views/error_404.php with your custom 404 page :)

Categories