关于如何将URL编码为CakePHP参数和url编码转换对应表的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于CakePHP3:生成缩短的URL(规范)、CakePHPvscodeigni
关于如何将URL编码为CakePHP参数和url编码转换对应表的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于CakePHP 3:生成缩短的URL(规范)、CakePHP vs codeigniter – 我在CakePHP的经验、CakePHP – 基于URL的数据库配置、CakePHP – 如何定义到没有与之关联的任何控制器的非cakephp文件的路由?等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 如何将URL编码为CakePHP参数(url编码转换对应表)
- CakePHP 3:生成缩短的URL(规范)
- CakePHP vs codeigniter – 我在CakePHP的经验
- CakePHP – 基于URL的数据库配置
- CakePHP – 如何定义到没有与之关联的任何控制器的非cakephp文件的路由?
如何将URL编码为CakePHP参数(url编码转换对应表)
我想创建一个用于添加书签的书签.因此,您只需点击书签中的此页面JavaScript代码段,即可将您重定向到该页面.
这是我目前的书签:
"javascript: location.href='http://…/bookmarks/add/'+encodeURIComponent(document.URL);"
当我在Bookmarklet页面上点击它时,这会给我一个这样的URL:
http://localhost/~mu/cakemarks/bookmarks/add/http%3A%2F%2Flocalhost%2F~mu%2Fcakemarks%2Fpages%2Fbookmarklet
服务器不喜欢这样:
The requested URL /~mu/cakemarks/bookmarks/add/http://localhost/~mu/cakemarks/pages/bookmarklet was not found on this server.
这给出了期望的结果,但对我的用例来说是无用的:
http://localhost/~mu/cakemarks/bookmarks/add/test-string
正在进行CakePHP典型的mod_rewrite,它应该将最后一部分转换为我的BookmarksController :: add($url = null)动作的参数.
我究竟做错了什么?
解决方法:
我有类似的问题,并尝试了不同的解决方案,只是被CakePHP和我的Apache-config之间的合作搞糊涂了.
我的解决方案是在将请求发送到服务器之前,使用浏览器中的JavaScript对Base64中的URL进行编码.
您的书签可能如下所示:
javascript:(function(){function myb64enc(s){s=window.btoa(s);s=s.replace(/=/g, '');s=s.replace(/\+/g, '-');s=s.replace(/\//g, '_');return s;} window.open('http://…/bookmarks/add/'+myb64enc(window.location));})()
我在这里做了两个替换,以使Base64编码URL安全.现在只能在服务器端反转这两个替换和Base64解码.这样你就不会把你的URL控制器与斜杠混淆了……
CakePHP 3:生成缩短的URL(规范)
我正在尝试防止重复的内容.
我的帖子原始网址是这样的:
domain.com/post/52-quick-brown-fox-jumps-over-lazy-dog
我想生成一个缩短的网址,并使用它们共享,例如twitter
domain.com/p/52 —-> redirects to —> original url
怎么办呢?通过htaccess 301重定向?通过CakePHP路由?
谢谢!
解决方法:
重定向本身应该是301(永久移动),因此所有指向短网址的链接都映射到了Google索引中的长网址.
Router类具有自己的重定向方法.您基本上可以复制您的实际路线,用重定向替换connect并更改url模式以匹配您的短url:
$routes->redirect('/p/:id', ['controller' => 'Posts', 'action' => 'display'], [
'pass' => ['id'],
'status' => 301,
'persist' => true
]);
$routes->connect('/post/:id-:slug', ['controller' => 'Posts', 'action' => 'display'], [
'pass' => ['id', 'slug']
]);
唯一的缺点:据我所知,您将无法从Router类生成短网址,因为它将始终根据传递的参数生成长网址.您将必须根据ID手动生成它们.
确保Controller检查是否存在正确的子段,如果没有,则执行重定向到正确的URL.您可以使用Controllers redirect()
method.
public function display($id, $slug = null) {
$post = $this->Posts->findById($id);
if($post) {
if($post->slug !== $slug) {
return $this->redirect('/post/' . urlencode($id . '-' . $slug), 301);
}
//Other stuff
} else {
$this->Flash->error('The post was not found.');
return $this->redirect('/posts');
}
}
如果要避免双重重定向,则可能要使用connect而不是redirect(感谢该注释的ndm):
$routes->connect('/p/:id', ['controller' => 'Posts', 'action' => 'display'], [
'pass' => ['id'],
'status' => 301
]);
$routes->connect('/post/:id-:slug', ['controller' => 'Posts', 'action' => 'display'], [
'pass' => ['id', 'slug']
]);
如果该段错误或不存在,则Controller仍应重定向到正确的URL.
CakePHP vs codeigniter – 我在CakePHP的经验
我在CakePHP中最简单的应用(管理员和表中的一些数据 – 多语言)大约需要0.2秒的代码处理.我想知道有没有人有时间为某个网站的代码点火器.如果值得学习的时候,我很好奇
我安装了代码点火器,起初看起来非常快,但我只是担心,如果我继续添加组件,模型,帮助器和一切,它会减慢(可能超过蛋糕).所以..我实际上正在寻找CI网站的一个例子及其加载的确切时间(至少2位小数).
我相信有些人会有其有效性的论据(可能是CakePHP的支持者),但是不是每天都有一个站点在框架之间重新开发并进行比较.
UPDATE
再次,对于那些不想遵循线程链接的人员,测试人员实际上将站点升级到CI 2.0,使用模块化扩展,缓存,其他优化和重新测试
CakePHP – 基于URL的数据库配置
说我有一个分期,生产和开发服务器.
谢谢,
T恤
class DATABASE_CONfig { var $live = array( 'driver' => 'MysqL','persistent' => false,'host' => 'MysqL.live.com','login' => 'root','password' => '','database' => '','prefix' => '',); var $default = array( 'driver' => 'MysqL','host' => 'localhost',); public function __construct() { if (isset($_SERVER) && isset($_SERVER['SERVER_NAME'])) { if (strpos($_SERVER['SERVER_NAME'],'localhost') === false) { $this->default = $this->live; } } } }
这将基本上根据您的位置切换您的配置.
CakePHP – 如何定义到没有与之关联的任何控制器的非cakephp文件的路由?
我现在在CakePHP工作.我想知道如何定义一个非cakePHP文件的路由,该文件没有任何与之关联的控制器?
为方便起见,我已将此文件(sitemap.PHP)放在webroot文件夹中.现在我需要以某种方式路由它!
解决方法:
听起来您希望能够在cakePHP应用程序中使用sitemap.PHP中的功能.将其包含在cakePHP中的赌注方式是将其设置为供应商.跟着这些步骤:
1-将文件放在app / vendor文件夹中.
2-要在控制器(或其他任何地方)中使用该文件,请添加:
App::import('vendor','sitemap');
如果它只是一个包含函数列表的文件,您现在可以像在任何其他PHP文件中一样调用函数.因此,如果您有一个名为show_links()的函数,则在导入供应商/站点地图的控制器中,您只需输入:
show_links();
如果它是一个类,那么你将需要实例化该类并像使用其他任何地方一样使用它:
App::import('vendor','sitemap');
$sitemap = new Sitemap;
$sitemap->show_links();
因此,现在您已准备好设置路由以在config / routes.PHP文件中包含站点地图功能:
Router::connect('/sitemap.xml', array('controller' => 'YOUR_CONTROLLER', 'action' => 'YOUR_ACTION'));
这将处理操作中包含的代码序列,然后播放sitemap.PHP文件.
简而言之,你会看到类似这样的东西:
<?PHP
class SiteMapController extends AppController
{
var $name = 'Tests';
function show_map()
{
App::import('vendor','sitemap');
$sitemap = new Sitemap;
$sitemap->show_links();
}
}
?>
在config / routes.PHP中你会添加:
Router::connect('/sitemap.xml', array('controller' => 'site_maps', 'action' => 'show_map'));
然后,当您访问网址时:
http://mysite/sitemap.xml
它将路由到:
http://mysite/site_maps/show_map
有关路由的更多信息,请访问:http://book.cakephp.org/view/542/Defining-Routes
祝你好运,快乐编码!
更新!
关于如何将URL编码为CakePHP参数和url编码转换对应表的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于CakePHP 3:生成缩短的URL(规范)、CakePHP vs codeigniter – 我在CakePHP的经验、CakePHP – 基于URL的数据库配置、CakePHP – 如何定义到没有与之关联的任何控制器的非cakephp文件的路由?等相关内容,可以在本站寻找。
本文标签: