我最近告诉一位朋友,我开始学习Catalyst(Perl),他相当强调,因为Catalyst有很多依赖,所以我应该使用类似Rails的东西.
存在很多依赖关系不是一件好事吗?这不是表明很多代码重用吗?我知道安装框架可能需要付出更多努力,但是还有其他缺点吗?
我会恢复我的Catalyst教程,直到我得到一些多汁的回复.:-)
我想知道dbix中的多个唯一约束是否可能update_or_create
来自Cpan:
my $cd = $schema->resultset('CD')->update_or_create(
{
artist => 'Massive Attack',
title => 'Mezzanine',
year => 1998,
},
{ key => 'cd_artist_title' }
);
Run Code Online (Sandbox Code Playgroud)
我想做什么
my $cd = $schema->resultset('CD')->update_or_create(
{
artist => 'Massive Attack',
title => 'Mezzanine',
year => 1998,
},
{ key => {'cd_artist_title','year' }
);
Run Code Online (Sandbox Code Playgroud) 我不太确定这是关于主题的(如果不是,我会尽快删除它)).
我决定开始自学Perl以及如何将它用于Web开发.大约一年前我用Python做过同样的事情,虽然我不是专家(我在工作时间用Java编写代码,并花一些个人时间尝试其他东西),但我已经能够创建一些网站了.使用Django,我已经使用ProjectEuler问题来了解该语言的基础知识.
从我的第一种方法来看,Perl似乎比Python有更陡峭的学习曲线.
我一直在寻找一些Web开发人员.Perl的框架和偶然发现的Catalyst,看起来非常有趣.
我的问题是:是否值得尝试一下,但仍然在用语言挣扎,或者我会浪费我的时间?我应该首先掌握Perl,然后是CGI,然后再进入可能从开发人员那里抽象出很多概念的框架吗?
感谢您的任何见解!
有没有人成功使用类似DBIx :: Class :: WebForm或CatalystX-CRUD的东西从数据库表自动构建自我验证的webform?
我正在想象一个模块,它读取数据库表模式,读取每列的约束,生成一些webform的抽象表示,带有错误消息的字段等.我正在使用Catalyst和Plack,它有一个很大的现有代码库.
我不想编写HTML webform,也不想编写任何验证逻辑.我的目标是以Ruby on Rails的风格编写尽可能少的代码.哪个Perl模块最适合这个?
更新:我已经用HTML :: FormFu解决了webform方面的问题,但它仍然很笨重地将表单输入映射到数据库,例如date_start和date_end都与'created'列相关,并且注释应该使用'LIKE%foo%匹配'等等'DBICFu'在哪里?
更新:这是一个Web应用程序,webform看起来不应该像数据库表.我不是在寻找数据库管理工具.
我在我正在构建的Catalyst应用程序中使用DBIx :: Class.它工作得很好,但有时我需要使用我自己开发的自己的db函数,这些函数非常符合我的需求.因此,我需要一个dbh.但是,因为我已经在使用,所以我知道它已经有一个正在使用的dbh.为了避免与数据库建立另一个不必要的连接,我想只使用已经创建的dbh .我知道DBIx ::类::存储:: DBI模块有两个方法和,但我真的不知道有什么区别两者之间,如果他们获得访问胸径的最佳途径.谁能告诉我什么是最好的方式来获得胸径会在一个应用程序?我更喜欢一种方法,我可以将其存储在存储区中,如下所示:DBIx::ClassDBIx::Classdbhdbh_doDBIx::ClassCatalyst
sub dbh :Private {
my ($self, $c) = @_;
$c->stash->{dbh} = #get dbh from DBIx::Class here
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
使用催化剂时,有没有办法像在Rails中那样指定开发,测试和生产数据库?我查看了文档,但我没有找到答案.
我开始使用Catalyst编写一些Perl代码,如下所示:
package My::Controller;
extends 'Catalyst::Controller';
sub handler :Path :Args(0) :Location( some/url )
my ($self, $c) = @_;
$self->do_something_with_arguments($c);
$self->make_a_decision($c);
$self->another_method($c);
}
Run Code Online (Sandbox Code Playgroud)
然后我想.o(为什么一直传递$ c?),我改为:
package My::Controller;
extends 'Catalyst::Controller';
has c => (is => "rw", isa => "Catalyst");
sub handler :Path :Args(0) :Location( some/url )
my ($self, $c) = @_;
$self->c($c);
$self->do_something_with_arguments;
$self->make_a_decision;
$self->another_method;
}
Run Code Online (Sandbox Code Playgroud)
处理程序只有一个入口点,因此$ self-> c将始终正确设置.
我的同事说,如果这就是Catalyst的意思,那么,每个人都会这样使用它.他们担心这样做会导致内存泄漏,因为在请求结束后对$ c的引用会持续存在.真的吗?
我希望以下代码
my @array;
for my $rapport ( qw( value1 value2 value3 ) ) {
push @array, { key => $rapport };
}
Run Code Online (Sandbox Code Playgroud)
生产:
$VAR1 = [
{
'key' => 'value1'
},
{
'key' => 'value2'
},
{
'key' => 'value3'
}
];
Run Code Online (Sandbox Code Playgroud)
但是,在Catalyst MVC下运行此代码段我得到:
$VAR1 = [
{
'key' => [ 'value', 'value2', 'value3' ]
},
];
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释原因吗?
编辑:任何有相同问题的人都可以添加一个例子吗?在一些代码更改之后我无法重现,但是由于它被推崇了5次我假设其他一些用户也遇到过这个问题?
我正在开发一个将在运行时生成数据库表的应用程序.我正在使用Catalyst和DBIC,我需要在生成新表时生成新的ResultSet.这个新的ResultSet必须作为Catalyst模型添加,所以我可以,$c->model('DB::NewFoo')但我需要在运行时发生这种情况.
表生成和ResultSet生成不是问题,我需要的是在运行时将那些新生成的ResultSet添加到Model中,以便我可以在进一步的请求中调用它们.
到目前为止,我的想法是创建一个控制DBI::Class::Schema,提供访问器方法的类,并提供一种在运行时更新和重新加载Schema的方法.我想要一个使用Catalyst本身的不同想法.
感谢您提供的所有帮助.
我们正在寻找将CamelCase转换为camel-case和下划线为连字符的选项,并希望有人可以提供一些强有力的例子.(出于SEO原因使用连字符).
特别:
在Catalyst中使用MMORPG并厌倦了写这样的事情:
sub travel_to ( $self, $c, $star ) : Path('travel-to') Args(1) { ... }
Run Code Online (Sandbox Code Playgroud)
或这个:
package Veure::Controller::Area::StorageLocker {
....
sub index ( $self, $c ) : Path('/area/storage-locker') { ... }
}
Run Code Online (Sandbox Code Playgroud)
更新:因为有一些混乱,我的意思是我们更愿意让开发者写这个:
# getting rid of Args() would be nice, but sigs don't have introspection
sub travel_to ( $self, $c, $star ) : Args(1) { ... }
Run Code Online (Sandbox Code Playgroud)
或这个:
package Veure::Controller::Area::StorageLocker {
....
sub index ( $self, $c ) { ... }
}
Run Code Online (Sandbox Code Playgroud)
这很重要,因为对于SEO的立场,下划线而不是连字符可以显着提高您的SEO.由于不得不做额外的粗暴工作以始终强制连字符,开发人员忘记这样做,我们不断浪费钱回去,不得不重写代码,忘记这个警告.这是我们应该能够自动完成的事情.
catalyst ×10
perl ×9
dbix-class ×4
crud ×1
database ×1
dependencies ×1
frameworks ×1
oop ×1
scope ×1
webforms ×1
webserver ×1