我认为我在TT模板中使用了太多的条件和计算.
我正在显示DBIc中的项目结果集.对于每个项目,我需要使用检索到的值来计算事物,并且模板似乎不是正确的位置.
但在Catalyst中,它是一个来自DBIc的厚对象.
那么如何将逻辑移到模型中呢?我必须为所有项目运行一个完整的循环并以某种方式更改对象吗?
问候:Migue,
我有一个包含三个Catalyst应用程序的suse框.最终我需要通过Apache运行mod_perl和SSL来运行所有三个(这本身不是问题,每个都有不同的端口).我已经成功地启动了一个Catalyst应用程序,然后成功转换到Catalyst服务器.
如果有人需要一步一步如何做到这一点,你可以在这里看到它.http://www.catalystframework.org/calendar/2005/7
我不是Apache专家,但问题是我不知道有一种方法可以在一台服务器上运行多个Catalyst应用程序,并让Apache以某种方式能够提供这三种服务器.
http://www.catalystframework.org/calendar/2005/7上的页面甚至说了.....
缺点
无法运行同一应用程序的多个版本
不可能在同一个Apache实例中运行同一应用程序的两个不同版本,因为命名空间会发生冲突.
话虽如此,这可能是通过多个Apache实例实现的吗?不知何故?通过虚拟主机指令可能吗?我知道通过将Catalyst应用程序预先加载到Apache中,每次我执行此操作时都会占用大量内存.
使用 DBIx::Class,我尝试创建一个跨越两个链接表的多对多访问器(甚至只是一个多对关系)。
所讨论的三个数据表是Users、Roles和Pages,以及两个链接表UserRoles和RolePages。这些表是相关的:
Catalyst 帮助程序脚本为我创建了这些关系和访问器:
package MyApp::Schema::Result::User;
__PACKAGE__->has_many(
"user_roles",
"MyApp::Schema::Result::UserRole",
{ "foreign.username" => "self.username" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->many_to_many("roles", "user_roles", "role");
package MyApp::Schema::Result::Role;
__PACKAGE__->has_many(
"role_pages",
"MyApp::Schema::Result::RolePage",
{ "foreign.role" => "self.role" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->has_many(
"user_roles",
"MyApp::Schema::Result::UserRole",
{ "foreign.role" => "self.role" }, …Run Code Online (Sandbox Code Playgroud) 在Catalyst中,我试图转向私人行动来做一些工作.这是函数定义:
sub get_form :Private :Args(1) {
my ($self, $c, $type_id) = @_;
#do stuff
}
Run Code Online (Sandbox Code Playgroud)
我试着像这样前进:
$c->forward('get_form',[$type_id]);
Run Code Online (Sandbox Code Playgroud)
但它只是给了我这个错误:
Couldn't forward to command "get_form": Invalid action or component.
Run Code Online (Sandbox Code Playgroud)
但是,如果我将操作更改:Private为:Local,则可以正常工作.有谁知道这是为什么以及如何解决它?谢谢!
我正在使用 Perl,并且我可以使用此代码连接到本地 PostgreSQL 9.3 服务器
#!/usr/bin/perl
use DBI;
use strict;
my $dbh = DBI->connect("dbi:Pg:dbname=postgres;host=127.0.0.1;port=5432", "postgres", "postgres", { RaiseError => 1 }) or die $DBI::errstr;
$dbh->disconnect();
print "Done\n";
Run Code Online (Sandbox Code Playgroud)
现在,按照有关 PostgreSQL 的 Catalyst 文档,我尝试生成 Catalyst 模型。
我使用这个 shell 命令
script/myapp_create.pl model DB DBIC::Schema MyApp::Schema \
create=static components=TimeStamp,EncodedColumn \
'dbi:Pg:dbname=postgres,host=127.0.0.1,port=5432' 'postgres' 'postgres' '{ AutoCommit => 1 }'
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
DBIx::Class::Storage::DBI::catch {...} ():
DBI Connection failed:
DBI connect('dbname=postgres,host=127.0.0.1,port=5432','postgres',...) failed:
FATAL: database "postgres,host=127.0.0.1,port=5432" does not exist at
/usr/local/share/perl/5.18.2/DBIx/Class/Storage/DBI.pm line 1487. at
/usr/local/share/perl/5.18.2/Catalyst/Helper/Model/DBIC/Schema.pm line 637
Run Code Online (Sandbox Code Playgroud) 拥有一个生成 JSON 的 Perl Catalyst 应用程序,我需要在由 Apache 服务器提供服务的 HTML 页面中使用 jQuery 读取该 JSON 内容。Catalyst 和 Apache 两个应用程序都在同一台主机上运行。
当我从 Apache 访问 Catalyst URL 时出现错误
Access to XMLHttpRequest at 'http://localhost:3000/abc/json_list' from origin 'http://localhost:8888' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)
正如我在许多主题中所说的那样,必须设置一个标题(或更多)。在这种情况下,必须设置催化剂,但我不知道如何设置。
任何提示?
我试图在每个请求使用Catalyst完成后调用一些代码.基本上,我想运行一些代码作为一部分finalize.据说Catalyst :: Plugin :: Observe会这样做,但它看起来完全坏了(只是加载插件中断Catalyst).
我正在尝试修复Observe插件,但这证明是固执的.
那么,是否有更好的方法可以在每个请求结束时调用一些清理代码?
(注意:这是在模型中,而不是控制器,所以我不能只使用sub end { ... })
我真的很喜欢Template Toolkit,就像它如何与Catalyst一起工作,但我想要更多'web advanced'工具包.
对于像这样的Web对象,它可能只是一个*.tt文件包:Selector,Selector_DateTime,Menu,Data_Table ......
网络上有什么类似的东西吗?如果没有,为什么不呢?
在PHP中,我会这样做以将"点"作为多维数组.
<input type"text" name="points[0][1]" />
<input type"text" name="points[0][2]" />
<input type"text" name="points[1][1]" />
<input type"text" name="points[2][2]" />
Run Code Online (Sandbox Code Playgroud)
或者,如果我想将'point'作为关联数组:
<input type"text" name="point[x_axis]" />
<input type"text" name="point[y_axis]" />
Run Code Online (Sandbox Code Playgroud)
什么是Catalyst/Perl相当于这类东西?我如何通过$ c-> req-> params获取这些?
我希望能够在我的Catalyst应用程序中定义一个应用程序范围的(全局)变量,以便我可以在我所在的任何控制器中访问它.这样做的目的是我不会重复我的应用程序周围的值大部分都没有改变.目前我正在定义变量,my_app.pm如下所示:
our $GLOBAL_VAR = 'value';
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器中,我尝试访问变量就像我将子程序一样:
my_app::$GLOBAL_VAR
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.有谁知道这样做的最佳方法,或者在Catalyst中实现这一目标的更好方法?谢谢!