`translate_uri_dashes` not working codeigniter route - codeigniter

i already tried this code in route file but it not convert _ to - by default
$route['translate_uri_dashes'] = TRUE;
$route['stock/upload_stock'] = 'stock/upload_stockt';

CodeIgniter 3 provides a nice way for it ,There is a route
$route['translate_uri_dashes'] = false;
which is by default set to false, but if you set it to true, you can name your controllers and controller methods using the underscores (_s) and can call them using dashes (-s).
For example you have a controller named Company, and inside your Controller you have a method called about_us, now you can call it both the ways /company/about_us and company/about-us , when your $route['translate_uri_dashes'] is set to true.
So, try making your route as below
$route['stock/upload-stock'] = 'stock/upload_stock';

Related

Codeigniter 3.1.16 routing issues

I'm having some troubles with routing in codeigniter.
My routing file is as below:
$route['admin/newgallery'] = 'gallery/do_upload';
$route['admin/listgallery'] = 'gallery/list';
$route['admin/create'] = 'posts/create';
$route['admin/listposts'] = 'posts/list';
$route['admin'] = 'admin/index';
$route['posts/(:any)'] = 'posts/view/$1';
$route['posts'] = 'posts/index';
$route['default_controller'] = 'pages/index';
$route['(:any)'] = 'pages/index/$1';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
All routes work just fine except for the first two:
$route['admin/newgallery'] = 'gallery/do_upload';
$route['admin/listgallery'] = 'gallery/list';
When I type mypage/admin/listgallery it calls gallery/list correctly. The problem is when I type the address with the original controller/method (in this case gallery/list) it goes to the list page as well when it should call a 404 error! Every other routing rule I have set does that, except the first two!
Out of the Box, Codeigniter allows you to directly access any Controller/Method from the URL.
It also provides the creation of custom routes so you could have 10 or more urls all pointing at the same controller/method with parameter passing if that was your desire...
So in the case you ONLY want access to any Controller/Method that are defiend in the Routes config.
You need to test if the url is defined in the routes config array.
The main code is something like...
$this->load->helper('url');
if(!isset($this->router->routes[uri_string()])){
show_404(); // Or whatever you want ...
}
And you would put this in your controller's constructor you want to protect.
Of course you could create a common controller and extend those controllers you want to protect in this manner.
( NOT Recommended ) Or if you want to get really "hacky" you could put it in the system/core/controller constructor and make it system wide. SO Everything needs to be defined in a route.
NOTE: This breaks the 'default_controller'.

can we give create function name like my-account in codeigniter

I am working on codeigniter and I want to give function name like edit-profile and controller name like my-account.
I have tried to create like this but it is giving error.
In config/routes.php
$route['translate_uri_dashes'] = FALSE;
Just change to TRUE and you can use either _ or -.
and name functions separated by underscores then when request url use
separate words with dash
I hope my answer would be useful
Yes. You can
In Controller
public function my_account($value='')
{
# code...
}
In Routes
$route['my-account'] = "controller_name/my_account";
Tested. Works fine
In config
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
i hope you are asking about name conventions just through this url if about method name convention class and method naming

Load controller without $route

exmple: this load default controller/class with function page,
www.example.com/page
unless we have controller/class named page AND set $route['page'] = 'page'; it'll load the controller. But if we dont set the $route, it'll still load default_controller.
is that true a controller must have a $route[''] always? is not it possible to load controller page without set $route[''] even there is no default controller function with same name?
Edit:
I access
www.mysite.com/index.php/user
I do have user controller with index function, but my route file only contain:
$route['default_controller'] = 'page';
$route['(:any)'] = 'page/$1';
$route['product'] = 'product';
//$route['user'] = 'user';
$route['404_override'] = '';
returns 404, only works if I uncomment this: $route['user'] = 'user';
why?
Thanks.
No, that's not true. CodeIgniter, by default, directly maps URI segments to:
example.com/index.php/controller/method/param/param/...
Or if you have an .htaccess / similar solution to remove index.php:
example.com/controller/method/param/param/...
Routing is used when you wish to use a URL that does not directly map to this convention.
Edit: You have conflicting routes. CodeIgniter will look at each route in order from top to bottom, and if it find one that matches, it stops looking and processes that route. Because you have an (:any) catch-all route, it will match anything (like it says).
The rule of thumb is to place your most specific routes first, and then get more generic and catch-all later. Your (:any) route should be the very last one in your list. And the default controller and 404 overrides should stay first.
$route['default_controller'] = 'page';
$route['404_override'] = '';
$route['product'] = 'product';
$route['user'] = 'user';
$route['(:any)'] = 'page/$1';
You need to add the product and user routes because you've defined the (:any) route. If you want to avoid writing route rules for every one of your existing controllers, but still take advantage of a catch-all controller, consider using the 404_override controller/method instead. You can do your verifications to check if the URI is valid there. Just make sure to throw a 404 error if not (you can use show_404()), since any non-existant URL will be routed to there.

how to pass parameters to the main action of a controller in codeigniter?

I want to pass parameters to the main action of a controller like so :
http://www.site.com/controller/index/param1/param2
but I DON'T want to have to write the 'index' action. So :
http://www.site.com/controller/param1/param2
How can I do this in codeigniter ? Thanks :)
You will have to modify your routes.php as the route default would be to controller/method
And explicitly define your route of
$route['blogs/(:any)/(:any)'] = "blogs/index/$1/$2";
Word to the wise about routing, once you set down this path of 'prettying up' the controller/method, you will need to define it for all methods in your controller:
$route['blogs/load/(:any)'] = "blogs/load/$1";
$route['blogs/delete/(:any)'] = "blogs/delete/$1";
As you won't be able to just call /blogs/load/4332 it will think 'load' is var 1 and '4332' is var 2.
Reference: http://codeigniter.com/user_guide/general/routing.html

enable the query string in codeigniter

i already make two changes in config file to enable the $_GET array as
$config['uri_protocol'] = "PATH_INFO";
$config['enable_query_strings'] = true;
but whenever i try tow run my code as http://example.com/controller/function/$demo=demo
it redirected towards the default controller
Enabling query strings in CodeIgniter means that you're using the query string to pass in the controller and function instead of them being parsed from the PATH INFO.
If you want to use the default system for determining what controller and function to use, you do not want to set $config['enable_query_strings'] to true.
This previous SO post covers how to enable teh $_GET array in CodeIgniter: Enabling $_GET in codeigniter
I think that's what you're trying to do.
You also have to set controller and function triggers from config:
$config['enable_query_strings'] = TRUE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';
So once query string is enabled, you can access it like this:
http://example.com/index.php?c=controller&m=function&demo=demo

Resources