Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to call codeigniter controller method from view

I know that in CI view if i put the

hostname/projectname/controllername/methodname

it will call the CI controller's method.

but this doesn't work. it says request url isn't existing. however, if i put like,

hostname/projectname/index.php/controllername/methodname

it works. what is the problem?

like image 893
user2293633 Avatar asked Jul 04 '26 11:07

user2293633


2 Answers

You need to configure your .htaccess file to remove the index.php from being required.

If you don't already have an .htaccess file then follow this guide.

In code igniter you will want the .htaccess file to look like:

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteBase /

    ### Code Igniter Updates

    # If your default controller is something other than
    # "welcome" you should probably change this
    RewriteRule ^(welcome(/index)?|index(\.php)?)/?$ / [L,R=301]
    RewriteRule ^(.*)/index/?$ $1 [L,R=301]

    # Removes trailing slashes (prevents SEO duplicate content issues)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ $1 [L,R=301]

    # Enforce www
    # If you have subdomains, you can add them to 
    # the list using the "|" (OR) regex operator
    RewriteCond %{HTTP_HOST} !^(www|subdomain) [NC]
    RewriteRule ^(.*)$ http://www.domain.tld/$1 [L,R=301]

    # Enforce NO www
    #RewriteCond %{HTTP_HOST} ^www [NC]
    #RewriteRule ^(.*)$ http://domain.tld/$1 [L,R=301]

    ###

    # Removes access to the system folder by users.
    # Additionally this will allow you to create a System.php controller,
    # previously this would not have been possible.
    # 'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php/$1 [L]

    # Checks to see if the user is attempting to access a valid file,
    # such as an image or css document, if this isn't true it sends the
    # request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>

<IfModule !mod_rewrite.c>

    # Without mod_rewrite, route 404's to the front controller
    ErrorDocument 404 /index.php

</IfModule>

Replacing: www.domain.tld with your domain, localhost for example during your testing.

like image 67
Ryan McDonough Avatar answered Jul 07 '26 02:07

Ryan McDonough


Add this in your htaccess file

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Refer https://www.codeigniter.com/user_guide/general/urls.html

Update Full Code

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
</IfModule>
like image 23
Rohan Kumar Avatar answered Jul 07 '26 01:07

Rohan Kumar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!