I am new in cake php
I made an application in cake php i want to use query string (no exactly query string )some what like this
http://example.net/meditations/index/mins/2
How i can get number 2 (at the end of this above url )
I want this number from url to inside "meditation" controller "index" function.
How I can get that value ?
Thanks
Try this code:
<?php echo $this->Html->link('Link Name', array('controller' => 'meditations', 'action' => 'index', 'mins', 2));?>
You could also do it like below:
http://example.net/meditations/index/?mins=2
Then in your meditations controller index action fetch the value of mins like this:
$_REQUEST['mins']
Related
I have a url that loads fonts as such:
/templatename/fonts/helvetica?weights=regular,bold,light
in php it will dynamically generate a CSS file with the appropriate font referencing.
We just recently moved over to to Phalcon and it broke. I'm trying to figure out how to tell the router to use the the font name as a named param but also use the standard param style. with the question marks.
this is what my router looks like right now:
...
"fonts"=>[
"pattern" => "/fonts/{file:[\w\W]}",
"route" => [
"controller" => "asset",
"action" => "fonts"
]
]
...
When I use the dispatcher loop, like this:
$params = $this->dispatcher->getParams()
The array does not show the weights param:
Array
(
[template] => templatename
[file] => helvetica
)
How can I get it to look like this without changing the URL structure?
Array
(
[template] => templatename
[file] => helvetica
[weights] => regular,bold,light
)
If you have the following URL:
/templatename/fonts/helvetica?weights=regular,bold,light
Then weights=regular,bold,light are the GET parameters.
You can request these inside Phalcon by using:
$weights = $this->request->getQuery('weights')
You do not have to declare this inside your routes, Phalcon automatically appends these GET parameters to the end of your routes.
Check the Phalcon HTTP Request docs for more info
I'm trying to remove the action in the cakephp url and add a slug inflector, to be more clear this is my expected output:
from this: example.com/posts/view/81/This is a test post
to this: example.com/posts/This-is-a-test-post
This is my current code:
That gives me this output: example.com/posts/view/This is a test post
Controller:
public function view($title = null) {
if (!$title) {
throw new NotFoundException(__('Invalid post'));
}
$post = $this->Post->findByTitle($title);
if (!$post) {
throw new NotFoundException(__('Invalid post'));
}
$this->set('post', $post);
}
view.ctp:
$this->Html->link($post['Post']['title'], array('action' => 'view', $post['Post']['title']));
I also tried this one,this link being my reference CakePHP: Use post title as the slug for view method :
Output: example.com/posts/view/21/This-is-a-test-post
Controller:
function view($id) {
$this->Post->id = $id;
$this->set('post', $this->Post->read());
}
view.ctp
$this->Html->link($post['Post']['title'], array('action' => 'view', $post['Post']['id'], Inflector::slug($post['Post']['title'],'-')));
below are the other links that I tried but failed, I also tried the modifying the routes.php but can't make the proper code to make it work
want to remove action name from url CakePHP
How to remove action name from url in cakephp?
Remove action name from Url in cakephp?
any help/suggestions is appreciated thanks.
Use Id and Named parameter...
On routes.php
define new routes as-
Router::connect('/posts/:id-:title',
array('controller' => 'posts',
'action' => 'view')
);
This new defined routes will match and parse all url containing id and title named parameter..
Important Note:: Do not define new routes after the end of routes.php. Try to define on the middle of the file..
On view
echo $this->Html->link('Hi',array(
'controller' => 'posts',
'action' => 'view',
'id' => 4,
'title' => Inflector::slug('the quick brown fox')
));
Well the solution provided above will fulfill your needs, but still after reading your question one thing comes into my mind... in your controller you are trying to read posts using title I mean this will slow down your system not recommended in programming so use id and increase one more column in your db table for slug(SEO title) which will be used for creating your post urls.
For example:
Post title: This is a test post
Create seo title for this as: this-is-a-test-post-123
Stor seo title in DB as <this-is-a-test-post>
See 123 is your posts ID now change your controller function to get data based on id ie.123, I hope you cn extract 123 from the sting easily...
Note: remember you have to think about this-is-a-123 string also because
they also land in post having id 123.
Use below route for the above solution:
Router::connect('/posts/*', array('controller' => 'posts', 'action' => 'view'),array('pass' => array('title')));
Now in your controller:
You will get string "this-is-a-test-post-123" in $post_title
function view($post_title=null){
$temp = explode('-',$post_title);
$posts_id= end($temp);
$lastKey = end(array_keys($temp));
unset($temp[$lastKey]);
$seoTitle = implode("-",$temp);
//Now compare the above seoTitle with DB seo title for unique urls
}
In a view, I want to create a link (generate the url) to a route. I believe this is called “reverse routing.” I want to add a query string to the generated url.
The target routes need to take a query string parameter to specify what kind of view to return, e.g. partial, basic, full. I will also be adding other query string params for search terms and fields. I will need to pass these on to my api that is called with my dispatcher (consuming my own api).
Route::get('thing/{id}', [
'uses' => 'path\to\namespace\ThingController#show',
'as' => 'thng.show']);
Route::get('thing/form/{id?}', [
'uses' => 'path\to\namespace\ThingController#form',
'as' => 'thng.form']);
In a view:
<td>{{ link_to_route('thng.show?filter="partial"', $row->title,
['id' => $row->id]) }}</td>
I tried simply appending ?string to the route name within link_to_route, but that doesn't work (Error = Route [lstg.show?filter="partial"] not defined). I'm not sure how to hard-code it either since it's a named route and does take a named route parameter.
In your case I guess you should try something like this:
<td>{{ link_to_route('thng.show', $row->title, ['filter' => 'partial', 'id' => $row->id]) }}</td>
Note: Using link_to_route function you should distinguish URL parameters (query string) which is third argument and HTML attributes of anchor tag itself, which is last argument.
How to hide/encrypt everything(id) in the URL in the browser except the site name and controller name?
I think UrlManager can do it, but I don't know how ? need url mapping similar in ROR
my url manager code
'urlManager'=>array(
//'urlFormat'=>'path',
'showScriptName'=> false,
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
),
),
I like to add a random number between every action(for secure my urls)
ROR eg:
map.connect 'by/:develop_name',
:controller => 'developer',
:action => 'builder_projects'
Please explain step by step.
couple if links I found relate to this
LINK1
LINk2
You just need to specify your application routes appropriately. Before continuing, you should read the URL management chapter of the Yii guide.
What you want to do is use named parameters in your rules, which means that the rule definition would look like this:
'by/<id:\w+>' => 'developer/builder_projects'
This rule takes a URL of the form http://site.com/index.php/by/42 and routes it to the controller developer, action builder_projects with the parameter id equal to whatever 42 (this is what the regular expression \w+ matches).
Routes are specified in your application configuration file as parameters to the urlManager component:
'urlManager' => array(
'urlFormat' => 'path',
'rules' => array(
'by/<id:\w+>' => 'developer/builder_projects'
// more rules
),
),
What you could do is define a helper function which symmetrically encrypts/decrypts:
class Helper {
public static function myCrypt($data, $decrypt = false){
//Logic to encrypt/decrypt
return $result;
}
}
and then when you create urls you can do:
$this->createUrl("myRoute", array("secret_id" => Helper::myCrypt($secret_id)));
and then in the controller action this resolves to you can do this:
public function actionMyRoute($secret_id){
$secret_id = Helper::myCrypt($secret_id, true);
//Do what you need to do with the decrypted id
}
Just make sure your encryption method returns a url safe string.
By default, when displaying pagination numbers, the url looks like /controller/action/page:number. In my application I have defined a route:
Router::connect('/:categ', array('controller' => 'posts', 'action' => 'index'), array('categ' => '[a-zA-Z]+'));
I want the number link to be something like /:categ/:page.
I've tried with
Router::connectNamed(array('page'));
but has no effect.
Am I missing something?
You must using pagination options with url params:<?php $this->Paginator->options(array('url' => 'some params')); ?>