GVKun编程网logo

如何将URL编码为CakePHP参数(url编码转换对应表)

9

关于如何将URL编码为CakePHP参数和url编码转换对应表的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于CakePHP3:生成缩短的URL(规范)、CakePHPvscodeigni

关于如何将URL编码为CakePHP参数url编码转换对应表的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于CakePHP 3:生成缩短的URL(规范)、CakePHP vs codeigniter – 我在CakePHP的经验、CakePHP – 基于URL的数据库配置、CakePHP – 如何定义到没有与之关联的任何控制器的非cakephp文件的路由?等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

如何将URL编码为CakePHP参数(url编码转换对应表)

如何将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(规范)

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 vs codeigniter – 我在CakePHP的经验

首先我不介意CI的“写更多代码”的态度,所以我不太在乎.现在,我在Cake PHP(我已经有3-4年了)我很好,我认为它有一些缺陷,最大的一个是它的速度,我正在考虑转移到CI,但我需要知道的东西..

我在CakePHP中最简单的应用(管理员和表中的一些数据 – 多语言)大约需要0.2秒的代码处理.我想知道有没有人有时间为某个网站的代码点火器.如果值得学习的时候,我很好奇

我安装了代码点火器,起初看起来非常快,但我只是担心,如果我继续添加组件,模型,帮助器和一切,它会减慢(可能超过蛋糕).所以..我实际上正在寻找CI网站的一个例子及其加载的确切时间(至少2位小数).

This thread将给您一个相当不错的答案,因为该网站不是一个“你好世界”,而是一个完整的网站,数据库访问帮助和库加载等…

我相信有些人会有其有效性的论据(可能是CakePHP的支持者),但是不是每天都有一个站点在框架之间重新开发并进行比较.

UPDATE

再次,对于那些不想遵循线程链接的人员,测试人员实际上将站点升级到CI 2.0,使用模块化扩展,缓存,其他优化和重新测试

CakePHP – 基于URL的数据库配置

CakePHP – 基于URL的数据库配置

Cake PHP的最佳方式是根据环境使用多个数据库配置?

说我有一个分期,生产和开发服务器.

谢谢,
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文件的路由?

我现在在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文件的路由?等相关内容,可以在本站寻找。

本文标签: