Pass params into custom url route - cakephp

I created custom url route like this:
Router::connect('/subjects.details', array(
'plugin' => 'subjects',
'controller' => 'subjects',
'action' => 'details'
));
However that action/view needs a parameter.
So when I go to link like localhost/foo/subjects.details/12 it gives me missing controller error.
Missing Controller
Error: Subjects.detailsController could not be found.
Error: Create the class Subjects.detailsController below in file:
app/Controller/Subjects.detailsController.php
How do I add id param for this url?

You have to define the param in the url and in your action as well:
Router::connect('/subjects.details/:id', array(
'plugin' => 'subjects',
'controller' => 'subjects',
'action' => 'details'
));

Lasers answer returned another error. It basically added new key 'id' => '1' into $this->params array instead into $this->params 's 'passed' key array. By changing it into this it works:
Router::connect('/subjects.details/*', array(
'plugin' => 'subjects',
'controller' => 'subjects',
'action' => 'details'
));

Here is a working solution. You have to passed the params and then it'll start working. Here is the way-
Router::connect('/subjects.details/:id', [
'plugin' => 'subjects',
'controller' => 'subjects',
'action' => 'details'
],
[
'pass' => ['id']
]
);
And your method should look like this-
public function details($id){
//....
}
I hope this can be helpful. Thanks.

Related

Cakephp rerouting

Hi I d'like to be able to rewrite my url. I have this format of url:
localhost/example/urlrewriting/Links/view/1
and I want to change this url to
http://localhost/example/urlrewriting/tt/my-link-1
In my Routes.php I have done this:
Router::connect('tt/:slug-:id',
array('controller' =>'links', 'action' => 'test'),
array('pass' => array('slug', 'id'), 'slug' => '[a-z0-9\-]+', 'id' => '[0-9]+'));
and in my controller I have this
public function test($param1, $param2){
debug($this->request->params);
}
I've always find this answer:
TtController could not be found.
cakephp 2.4.1
Please add / before the connect params like:-
Router::connect('/tt/:slug-:id',
array('controller' =>'links', 'action' => 'test'),
array('pass' => array('slug', 'id'), 'slug' => '[a-z0-9\-]+', 'id' => '[0-9]+'));

How to maintain a variable in the url which is customized in cakephp?

What im trying to do here is maintain the variable 42 all throughout all pagination urls. I want my url to change from this
/exams/take/42/page:2
to this
/exams/take/42/items/2
Again,the number 42 is the variable..and the number 2 is the page number..Thanks.
UPDATE :
routes.php
Router::connect('/examinations/take/:id/page/:page',
array('controller' => 'examinations', 'action' => 'take'),
array(
'pass' => array('id', 'page'),
'id' => '[0-9]+',
'page' => '[0-9]+'
)
);
in the view/take
$this->Paginator->options(array('url' => $this->passedArgs));
AppController.php
public function beforeFilter(){
if (isset($this->request->params['page'])) {
$this->request->params['named']['page'] = $this->request->params['page'];
}
}
ive tried this ..but the generated url is the same,/examinations/take/42/page:2 ,when i click the next and prev links..
You've to define custom routes:
http://book.cakephp.org/2.0/en/development/routing.html
Example as below:
Router::connect(
'/exams/take/:id/items/:number',
array('controller' => 'exams', 'action' => 'take'),
array('pass' => array('id', 'number'))
);
Also you can get more information from below url try this:
http://www.sakic.net/blog/changing-cakephp-pagination-urls
yes you can do it with the use of custom routing. for more undrestanding you can see cakephp manual to manage custom routing in pagination
http://book.cakephp.org/2.0/en/development/routing.html
below will be your
e.g.
And by adding this route:
Router::connect('/:id/page/:page',
array('controller' => 'examinations', 'action' => 'take'),
array(
'pass' => array('id', 'page'),
'id' => '[0-9]+',
'page' => '[0-9]+'
)
);
and i does not work you can refer link

How can I get the connected route from a URL string in CakePHP?

CakePHP appears to have a function to translate a requested URL and determine what controller and action to perform, seeing this must be performed with each http request.
Is there a way I can utilize this process within a controller or elsewhere in the system? The best outcome would be to have a function where I input a URL string, and the response is an array with controller details. eg:
$url_route = RouteFunction('/page/url/here');
// $url_route = array(
// 'controller' => 'page',
// 'action' => 'display',
// 'pass' => array('url', 'here')
// );
For this you can use Router::parse().
For example:
$route = Router::parse('/users/view/21');
debug($route);
will by default output:
array(
'controller' => 'users',
'action' => 'view',
'named' => array(),
'pass' => array(
(int) 0 => '21'
),
'plugin' => null
)

cakephp link without url encoding

CakePHP 2.2.3
I have something like this:
$this->Html->link('here',
array(
'controller' => 'biz',
'action' => 'search',
'range' => '1+3'),
array('escape' => false));
When I click on this link the url will be encoded like this:
/biz/search/range:1%2B3
But I need
/biz/search/range:1+3
Is there any way to switch off url encoding or should I change my controller which parses the named parameter??
Try using:
$this->Html->link('here',
array(
'controller' => 'biz',
'action' => 'search',
'range' => '1\+3'),
array('escape' => '\'));
Simply can you try this
//search.ctp
echo $this->Html->link('here', '/biz/search/range:1+3');
Receive this in controller
//BizController.php
public function search() {
var_dump($this->request->params['named']);
// do something
}

How to set cakephp edit form custom url?

HI,
im accessing my edit_view using the url
/controller/action/group_id/id
but when i check my action it is only using
/controller/action/id
i have already tried using the following.
$params = array('url' => array('controller' => 'controller','action'=> 'action',$group_id,$id))
$this->form(model,$params)
$params = array('url' => '/controller/action/group_id/id')
$this->form(model,$params)
but its still not working.
Thanks
Don't really know what $this->form() is, but try:
echo $this->Form->create('SomeModel', array(
'url' => array(
'controller' => 'controller',
'action' => 'action',
$param_1,
$param_2
)
));

Resources