new controller is not working in Codeigniter - php

I'm using CodeIgniter. I set my default controller is 'cart'. And i add one more file in Controller folder that name is admin.php. admin.php having following code,
<?php
class Admin extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function index()
{
echo 'Hello World!';
}
}
?>
If i give the url like http://lo...host/codeigniter/admin means, It shows 404 Not Found. If i give http://lo...host/codeigniter/, It shows cart page as good.
And if i change default controller in routes.php as 'admin', http://lo...host/codeigniter/ shows 'Hello World!'

Seem like your are not removing index.php from your URLs. Try to access to this URL:
http://lo...host/codeigniter/index.php/admin
If it works, then add this to your .htaccess file:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
More info:
http://ellislab.com/codeigniter/user-guide/general/urls.html

Related

404 error in new page created in codeigniter

I've created one test.php file in location applications\views\test\test.php with controller in application\controller\Test.php & model in applications\models\Test_model.php.
In my routes.php file, I have added $route['test']='test/view'.
Please note there are some files present already which are working quite fine, one of which is login.php & it has value in routes.php as $route['login']='login/view'. Plus this file does have same model & controller files in likewise location.
When I try to access localhost\test, it gives me 404 error whereas for localhost\login works quite fine.
Can anybody help in routing? I'm new to codeigniter & I could not resolve this issue.
EDIT
htaccess works fine as localhost\login is loading properly along with other few files.
EDIT 2
Test_model.php
<?php
class Test_model extends CI_Model{
public function __construct()
{
$this->load->database();
}
}
?>
test.php
<div>Testing</div>
Test.php
<?php
class Test extends MY_Controller{
public function __construct()
{
parent::__construct();
$this->load->model('test_model');
}
public function view()
{
$this->loadHeader();
$this->load->view('test/test');
$this->loadFooter();
}
}
?>
routes.php
$route['test'] = 'test/view';
EDIT 3
When I try to access localhost\application\controllers\Test.php, it gives me an error that says Class My_Controller not found. However, when I attempt to do it with any other file let's login with with the same location, it gives me the same error.
So I guess, it's able to find the controller because it's giving an error obviously but not able to load anything else.
Is there some sort of config file in which I have to mention every new page I create or something? There has to be something. This is pretty basic & I'm not able to get to the root of it.
EDIT 4
So this is what a problem is. When I copied my test view file to pages folder, it worked. Of course in controller I edited path of the file.
Now the real question is why didn't new folder named test under views work?
Finally, the culprit was this line in routes.php file:
$route['(:any)'] = 'pages/view/$1';
I was adding other route below this so it was getting default behaviour. I put them above this line & it worked like a charm. I never thought this could be the issue.
Line number matters, now.
Create a .htaccess file and paste this code below
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]

Codeigniter: 404 on existing controller

When I set $route['default_controller'] to 'blog', CI opens my controller without problems. When I want to access it via URL, CI returns a 404.
My controller:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Blog extends CI_Controller {
public function index()
{
echo 'Hello World!';
}
}
Saved at
application/controllers/Blog.php
Some other config things:
$route['default_controller'] = 'blog';
$route['404_override'] = '';
$config['base_url'] = '';
URL I try to use:
http://localhost:63342/project/public_html/blog/
.htaccess to hide index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
How can I fix this issue? I tried a lot of solutions from similar questions without success
If your project is in project folder in main directory of the local server, change your address to:
http://localhost:63342/project/blog
You configured that page as your default controller, so it should work even by:
http://localhost:63342/project

Codeigniter subdomain routing

I'm trying to setup a blog script on a website running on the CodeIgniter framework. I want do this without making any major code changes to my existing website's code. I figured that creating a sub domain pointing to another Controller would be the cleanest method of doing this.
The steps that I took to setup my new Blog controller involved:
Creating an A record pointing to my server's ip address.
Adding new rules to CodeIgniter's routes.php file.
Here is what I came up with:
switch ($_SERVER['HTTP_HOST']) {
case 'blog.notedu.mp':
$route['default_controller'] = "blog";
$route['latest'] = "blog/latest";
break;
default:
$route['default_controller'] = "main";
break;
}
This should point blog.notedu.mp and blog.notedu.mp/latest to my blog controller.
Now here is the problem...
Accessing blog.notedu.mp or blog.notedu.mp/index.php/blog/latest works fine, however accessing blog.notedu.mp/latest takes me to a 404 page for some reason...
My .htaccess file looks like this (the default for removing index.php from the url):
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
And my Blog controller contains the following code:
class Blog extends CI_Controller {
public function _remap($method){
echo "_remap function called.\n";
echo "The method called was: ".$method;
}
public function index()
{
$this->load->helper('url');
$this->load->helper('../../global/helpers/base');
$this->load->view('blog');
}
public function latest(){
echo "latest working";
}
}
What am I missing out on or doing wrong here? I've been searching for a solution to this problem for days :(
After 4 days of trial and error, I've finally fixed this issue!
Turns out it was a .htaccess problem and the following rules fixed it:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
Thanks to everyone that read or answered this question.
Does blog.domain.co/blog/latest also show a 404?
maybe you could also take a look at the _remap() function for your default controller.
http://ellislab.com/codeigniter/user-guide/general/controllers.html#default
Basically, CodeIgniter uses the second segment of the URI to determine which function in the controller gets called. You to override this behavior through the use of the _remap() function.
Straight from the user guide,
If your controller contains a function named _remap(), it will always
get called regardless of what your URI contains. It overrides the
normal behavior in which the URI determines which function is called,
allowing you to define your own function routing rules.
public function _remap($method)
{
if ($method == 'some_method')
{
$this->$method();
}
else
{
$this->default_method();
}
}
Hope this helps.
have a "AllowOverride All" in the configuration file of the subdomain in apache?
without it "blog.notedu.mp/index.php/blog/latest" work perfectly, but "blog.notedu.mp/latest" no
$route['latest'] = "index";
means that the URL http://blog.example.com/latest will look for an index() method in an index controller.
You want
$route['latest'] = "blog/latest";
Codeigniter user guide has a clear explanation about routes here

codeigniter redirect from a view

I am building a site entirely on codeigniter .I have set my default controller as cuff.
so whenever users type the domain name it takes the control to that controller.
class Cuff extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->helper('url');
}
public function index()
{
$this->load->view('index');
}
public function navigate()
{
echo "test";
exit;
}
}
In my index view I want an anchor to navigate to a function in my default controller .
so when I write
our collection , it says page not found .
I have even set the base url like this
$config['base_url'] = "http://".$_SERVER['HTTP_HOST'];
$config['base_url'] .= preg_replace('#/+$#','',dirname($_SERVER['SCRIPT_NAME'])).'/';
Cant seem to figure out the issue.
You missed the controller name
our collection
Set $config['base_url'] ='';
In your .htaccess file:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|js|css|favicon|robots\.txt)
RewriteRule ^(.*)$ /index.php?/$1 [L]
Make sure your controller is in controller's folder (not any subfolder) and is properly named cuff.php
Try navigating to http://yoursite/cuff/navigate
If you still see errors try rewriting the last line in .htaccess to:
RewriteRule ^(.*)$ /index.php/$1 [L]
(without question mark).
Please tell if that helps!
EDIT: and your links better all be in this form:
Link
The problem is in your routing.
Edit your routes.php (located in the folder ../application/config/) and add the code below:
$route['navigate'] = "Cuff/navigate";
For more information regarding Codeingiter URI Routing:
http://codeigniter.com/user_guide/general/routing.html
Hope this helped you.
Simply you use
"<?php echo site_url();?>/cuff/navigate">our collection</a>

CodeIgniter Views

Ok I have adopted a CodeIgniter Setup,
My route.php in config looks like this:
$route['default_controller'] = "development";
My development.php controller looks like this:
class Development extends Controller
{
function Development() {
parent::Controller();
}
public function Index() {
$this->load->view('index');
}
function show() {
$this->load->view('show');
}
}
When I go to the root folder, in my browser, it does load the index.php view, I want to make a link to show.php which is also in my Views dir. the URL I'm using is eg: my.server/test/codeigniter/ but when I go to my.server/test/codeigniter/show my show.php doesn't load. Am I doing this correctly?
I should mention I've tried public function show() also and it doesn't work, also I have no .htaccess file in the directory
Any advice would help!
Two rules are enough in your .htaccess file:
# check if the requested resource is not an existing file
RewriteCond %{REQUEST_FILENAME} !-f
# rewrite internally to index.php
RewriteRule ^(.*)$ index.php [QSA,L]
Mod_rewrite and AllowOverride All assumed enabled.
Ken Struys comment on your question is correct. The default controller status you give a controller means that controller and the index function will load if you go to
my.server/test.
Other than that, you need to include index.php/controller_name/function_name to get to your controller functions.
Unless that is, you implement some fancy .htaccess url rewriting, which I can't help you with.
You can set it in routes.php as below:
$route['show']='development/show';

Categories