- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有多个对象,我希望可以通过人类可读的 URL 访问这些对象,因此我为所有数据库记录生成了别名(例如 blog.com/this-is-an-alias/)。
自动生成这些的最佳做法是什么?
我目前正在 Hook 模型的“values()”方法并在其中生成一个新别名(基于所需的“名称”字段),但我忍不住觉得这可以更优雅地完成,比如说, Kohana 的内置过滤器。
这是精简模型:
class Model_Category extends ORM {
// relevant rules:
public function rules(){
return array(
'alias' => array(
array('max_length', array(':value', 63)),
array(array($this, 'unique'), array(':field', ':value')),
),
'name' => array(
array('max_length', array(':value', 63)),
),
// (...)
);
}
// overrides default method:
public function values(array $values, array $expected = NULL){
if(!$this->_loaded){
if($values['name'] && !$values['alias'])
$values['alias'] = Helper_Form::to_alias($values['name']);
}
return parent::values($values, $expected);
}
}
仅供引用,to_alias 函数看起来像这样:
return strtolower(substr(trim(preg_replace('/[^0-9a-zA-Z]+/','-',$str),'-'),0,63));
所以,我的问题:
最佳答案
我会像您提到的那样使用过滤器自动生成。以下是我的想法。对于过滤器功能,您可以传递一些特定参数,例如 :model
、:value
、:field
,在这种情况下我会使用 :model
以访问当前模型的属性。
class Model_Category extends ORM {
public function filters()
{
return array(
'slug' => array(
array(array($this, 'create_slug'), array(':model')),
),
);
}
public function create_slug($model)
{
$model = ($model instanceof ORM) ? $model : $this;
$number = 1;
$slug = UTF8::transliterate_to_ascii($model->name);
$slug = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $slug);
$slug = UTF8::strtolower(trim($slug, '-'));
$slug = preg_replace("/[\/_|+ -]+/", '-', $slug);
while ( ! $this->unique_slug($slug))
{
if ( ! preg_match('/\d+$/', $slug))
{
$slug .= '-'.$number;
}
$slug = preg_replace('/\d+$/', $number++, $slug);
}
return $slug;
}
public function unique_slug($slug)
{
return (bool) DB::select(array('COUNT("*")', 'total_count'))
->from($this->_table_name)
->where('slug', '=', $slug)
->where($this->_primary_key, '!=', $this->pk())
->execute($this->_db)
->get('total_count');
}
}
以上示例可能功能不全,但我希望您能理解。
关于php - KO3 : Automatically generate unique alias/slug using ORM filters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11855100/
安装 Windows 服务时,有两个选项可用于在 Windows 启动时自动启动 Windows 服务。一种是自动,另一种是自动(延迟启动)。这两者具体有什么区别? 例如,如果您使用 wixtools
使用Xcode 4.2,如何启用/禁用“自动引用计数”? ANSWERED 在“构 build 置”下,根据是否要启用ARC翻转"is"和“否”。 最佳答案 全局范围内: 转到“构 build 置”,
在学习 PHP 中 Cookie 的概念时,我从 w3schools PHP Tutorial 中看到以下语句: The value of the cookie is automatically UR
在学习 PHP 中 Cookie 的概念时,我从 w3schools PHP Tutorial 中看到以下语句: The value of the cookie is automatically UR
我曾经有自动代码签名身份:iPhone Developer 在真实设备上进行测试(它与我的“开发”证书匹配)。 很快在我的目标设置中,我无法选择“iPhone 开发者”,而且我没有看到任何开发者证书,
当我编译这段代码时: class DecoratedString { private: std::string m_String; public: // ... constructs
我在 Kathy Sierra 的书中读到过: “局部变量有时称为堆栈、临时、自动或方法变量,但无论您使用什么,这些变量的规则都是相同的调用他们。” 为什么局部变量叫automatic? 最佳答案 当
复制代码 代码如下: Const OWN_PROCESS = &H10 Const ERR_CONTROL = &H2 Const INTERACTIVE = False
我有以下问题: 我需要在条形图中从最高到最低排序我的值: 我知道我可以使用数据透视表和数据透视图,但将来可能会有点复杂。 最佳答案 我建议通过使用帮助列来根据需要对数据进行排序来实现这一点。 C 列:
我本质上想创建一个每次都会执行的变量。举个最简单的例子: $myvar = `write-host foo`; 然后每次我引用 $myvar 时,它都会输出 foo: dir $myvar Direc
有人知道有一个实用程序可以自动检测并删除 uses 子句中不需要的单元吗? 最好是.. 可以针对一个单元和/或一个项目运行 免费且可与 Delphi 2010 配合使用 提前致谢。 最佳答案 尝试使用
在大多数情况下,当您阅读here时,IBOutlet应该很弱。 现在,您可以在development library中阅读,并非所有类都支持弱引用。 (例如NSTextView)。这意味着您必须使用a
只是一个简单的问题(我想)但是,假设我有以下数据文件: # no x data, it's sampled for instance each second. 23 42 48 49 89 33 39
我在以前工作的应用程序上用 RC 更新了 ASP.NET 5 框架 beta-8 包。在我让它运行后,启动过程中出现下一个错误: InvalidOperationException: No authe
我编写了一个Powershell脚本,该脚本应将服务设置为StatusType ='Automatic'。但是,当我运行脚本时,它实际上设置了StatusType ='Automatic(Delaye
我想知道 WPF 中是否有一种自动控制大小调整的功能。 我的意思是,一种根据用户屏幕分辨率自动调整元素大小的方法,而无需在代码中定义它。 谢谢。 最佳答案 首先,WPF 使用与设备无关的像素,这意味着
我正在从 bat 文件或 Python 文件调用外部程序 (fxTsUtf8.exe)。我浏览了数百个 sos 文件。在某些情况下,exe 文件可能会由于读取 sos 文件中的错误而失败。要继续执行
我想知道正在创建的这个线程(引用代码片段)是否会在完成其工作后在垃圾收集中自动终止。 我正在创建一个基本的聊天程序,以学习如何使用套接字、创建客户端和创建服务器。我很快发现,如果我希望能够从客户端发送
我目前正在修复一个 JSP 项目,它目前在 Tomcat 的 WEB-INF 文件夹中有一个看似随机的 .class 文件集合。作为简化这一点的一种方法,我计划从这些类中直接从 SVN 获取 .jav
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及
我是一名优秀的程序员,十分优秀!