关于symfony,需要知道的一些知识:
自己遇到的问题:
===========================================================================================================
1.首先,front_dev下的config文件里面的每一个配置文件是做什么的?
----------------------------------------------------------------
#项目的配置
myproject/config/
config.php:---------------------------初始化的全局配置文件,是框架执行的文件路径
databases.yml:--------------------链接数据库的信息文件
properties.ini:--------------------------包换命令行所需的参数的文件,以及项目名和远程设置信息
rsync_exclude.txt:---------------------------同步文件
schema.yml and propel.ini:--------------------数据库连接文件,以propel的方式来运行sumfony的class以及项目所需的数据。
----------------------------------------------------------------
#front_dev下的config文件的配置:
myproject/apps/myapp/config/:
app.yml:--------------------------应用程序的详细设置文件,不许要存进数据库的,税率、email地址等信息。
config.php:-------------------------应用程序的初始化配置文件
factories.yml:-----------------------自定义的class的详细配置文件
filters.yml:----------------------- 执行每个请求时的过滤器,可以过滤每个modlue.
logging.yml:-------------------------可以定义所需计入日志的信息内容,可用来debug程序
routing.yml:------------------------路由文件
settings.yml:--------------------------sumfony主要的应用程序的设置,例如打开缓存之类的
view.yml: -----------------------默认的视图结构的配置文件,还可以定义meta和标题等。
---------------------------------------------------------------
=================================================================================================================
2.根据每一个表生成的module和app里的每一个module有什么区别?
分别都是起什么作用的?这两个module之间是通过什么方式来彼此调用的?
#根据每一张表生成的class是基础类,在symfony中叫对象类,主要是做数据库中单个记录的操作。
主要提供每条记录以及相关记录的操作。
#另外生成的带有Peer的类是Peer类,其中包含管理数据表的所有静态方法。Peer类可以从操作表中返回一个对象,或者相关表的对象类。所以Peer中会调用到对象类的方法。
====================================================================================================================
3.关于模板的应用:总的模板和每一个app里面的module的模板是什么关系?
ajax生成的模板的过程是怎么样的?
#总的模板包含每一个app的module里面的模板。但不一定所有的app的module里面的模板都要包括在总模板当中,很多时候app的module里面的模板可以在自己的module里面被调用,直接作界面的模板。
#view部分需要注意的四个概念:Partials,Components,Slots,Components Slots。
Partials-----------------------------是模板代码可重复利用的一块。
Components-------------------组件是指从表现层分离出来逻辑层的一种组合,像一个action,
也用execute来执行,并传递参数到模板或者Partials。
Slots---------------------------需要根据action的结果来设置的动态的模块
Components Slots--------------------------根据components的结果来设置动态的模块
#ajax生成的步骤:
------Ajax Link with the link_to_remote() Helper
<div id="feedback"></div>
<?php echo link_to_remote('Delete this post', array(
'update' => 'feedback',--------------------所需要替换的div的名字
'url' => 'post/delete?id='.$post->getId(),--------------------其中所要执行的方法
)) ?>
-----Ajax Form with the form_remote_tag() Helper
<div id="item_list"></div>
<?php echo form_remote_tag(array(
'update' => 'item_list',--------------------所需要替换的div的名字
'url' => 'item/add',--------------------其中所要执行的方法
)) ?>
<label for="item">Item:</label>
<?php echo input_tag('item') ?>
<?php echo submit_tag('Add') ?>
</form>
====================================================================================================================
4.关于数据库调用的方法:需要用到相关的哪些helper,另外就是单独写的
话,怎么写?还有就是写在哪里合适?
#首先,要对表的对象类初始化,然后根据set或者get来存取该对象的所有的属性。
其次,根据set其他相关对象类和get其他相关对象类来获得相关对象的所有属性。
再次,可以根据Peer类的doSelect函数来实现根据主键进行的搜索,可以得到一个对象信息。
最后,根据sql来查询数据库的方法如下:
$connection = Propel::getConnection();
$query = 'SELECT MAX(%s) AS max FROM %s';
$query = sprintf($query, ArticlePeer::CREATED_AT, ArticlePeer::TABLE_NAME);
$statement = $connnection->prepareStatement($query);
$resultset = $statement->executeQuery();
====================================================================================================================
5.基本的文件目录的介绍:
apps/-------------------------项目的每一个应用程序的总目录
frontend/----------------------项目的前台
backend/----------------------项目的后台
batch/--------------------------包含一些需要用命令行来执行的php的脚本
cache/------------------------------缓存目录
config/----------------------------------项目的总的配置文件夹目录
data/----------------------------------数据库的文件目录
sql/------------------------------------数据库脚本
doc/-------------------------------------------文档目录
lib/----------------------------------每个应用模块都可用的目录,其中有根据数据表生成的modules.
model/----------------------------------------根据数据表生成的modules.
log/--------------------------------------日志
plugins/-----------------------------------------插件
test/--------------------------------------测试
unit/
functional/
web/----------------------------------------站点所需的相关修饰文件
css/
images/
js/
uploads/
====================================================================================================================
6.怎么样在页面中调用js和css文件?还有包含其他的文件时,目录是怎么写的?
#调用js和css文件
Listing 7-24 - File Inclusion in view.yml--------------------在view.yml里面配置
indexSuccess:
stylesheets: [mystyle1, mystyle2]
javascripts: [myscript]
Listing 7-25 - File Inclusion in the Action--------------------在action里面调用
$this->getResponse()->addStylesheet('mystyle1');
$this->getResponse()->addStylesheet('mystyle2');
$this->getResponse()->addJavascript('myscript');
Listing 7-26 - File Inclusion Result--No Need for a Helper Call in the Layout-------------最后在页面上的效果
<head>
...
<link rel="stylesheet" type="text/css" media="screen" href="/css/mystyle1.css" />
<link rel="stylesheet" type="text/css" media="screen" href="/css/mystyle2.css" />
<script language="javascript" type="text/javascript" src="/js/myscript.js">
</script>
</head>
#调用单个的js函数
-----Inserting JavaScript with the javascript_tag() Helper--------方法一:用javascript_tag()
<?php echo javascript_tag("
function foobar()
{
...
}
") ?>
=> <script type="text/javascript">
//<![CDATA[
function foobar()
{
...
}
//]]>
</script>
-----<?php echo link_to_function('Click me!', "alert('foobar')") ?>----------方法二:在link_to_function用js
=> <a href="#" onClick="alert('foobar'); return none;">Click me!</a>
====================================================================================================================
自己遇到的问题:
===========================================================================================================
1.首先,front_dev下的config文件里面的每一个配置文件是做什么的?
----------------------------------------------------------------
#项目的配置
myproject/config/
config.php:---------------------------初始化的全局配置文件,是框架执行的文件路径
databases.yml:--------------------链接数据库的信息文件
properties.ini:--------------------------包换命令行所需的参数的文件,以及项目名和远程设置信息
rsync_exclude.txt:---------------------------同步文件
schema.yml and propel.ini:--------------------数据库连接文件,以propel的方式来运行sumfony的class以及项目所需的数据。
----------------------------------------------------------------
#front_dev下的config文件的配置:
myproject/apps/myapp/config/:
app.yml:--------------------------应用程序的详细设置文件,不许要存进数据库的,税率、email地址等信息。
config.php:-------------------------应用程序的初始化配置文件
factories.yml:-----------------------自定义的class的详细配置文件
filters.yml:----------------------- 执行每个请求时的过滤器,可以过滤每个modlue.
logging.yml:-------------------------可以定义所需计入日志的信息内容,可用来debug程序
routing.yml:------------------------路由文件
settings.yml:--------------------------sumfony主要的应用程序的设置,例如打开缓存之类的
view.yml: -----------------------默认的视图结构的配置文件,还可以定义meta和标题等。
---------------------------------------------------------------
=================================================================================================================
2.根据每一个表生成的module和app里的每一个module有什么区别?
分别都是起什么作用的?这两个module之间是通过什么方式来彼此调用的?
#根据每一张表生成的class是基础类,在symfony中叫对象类,主要是做数据库中单个记录的操作。
主要提供每条记录以及相关记录的操作。
#另外生成的带有Peer的类是Peer类,其中包含管理数据表的所有静态方法。Peer类可以从操作表中返回一个对象,或者相关表的对象类。所以Peer中会调用到对象类的方法。
====================================================================================================================
3.关于模板的应用:总的模板和每一个app里面的module的模板是什么关系?
ajax生成的模板的过程是怎么样的?
#总的模板包含每一个app的module里面的模板。但不一定所有的app的module里面的模板都要包括在总模板当中,很多时候app的module里面的模板可以在自己的module里面被调用,直接作界面的模板。
#view部分需要注意的四个概念:Partials,Components,Slots,Components Slots。
Partials-----------------------------是模板代码可重复利用的一块。
Components-------------------组件是指从表现层分离出来逻辑层的一种组合,像一个action,
也用execute来执行,并传递参数到模板或者Partials。
Slots---------------------------需要根据action的结果来设置的动态的模块
Components Slots--------------------------根据components的结果来设置动态的模块
#ajax生成的步骤:
------Ajax Link with the link_to_remote() Helper
<div id="feedback"></div>
<?php echo link_to_remote('Delete this post', array(
'update' => 'feedback',--------------------所需要替换的div的名字
'url' => 'post/delete?id='.$post->getId(),--------------------其中所要执行的方法
)) ?>
-----Ajax Form with the form_remote_tag() Helper
<div id="item_list"></div>
<?php echo form_remote_tag(array(
'update' => 'item_list',--------------------所需要替换的div的名字
'url' => 'item/add',--------------------其中所要执行的方法
)) ?>
<label for="item">Item:</label>
<?php echo input_tag('item') ?>
<?php echo submit_tag('Add') ?>
</form>
====================================================================================================================
4.关于数据库调用的方法:需要用到相关的哪些helper,另外就是单独写的
话,怎么写?还有就是写在哪里合适?
#首先,要对表的对象类初始化,然后根据set或者get来存取该对象的所有的属性。
其次,根据set其他相关对象类和get其他相关对象类来获得相关对象的所有属性。
再次,可以根据Peer类的doSelect函数来实现根据主键进行的搜索,可以得到一个对象信息。
最后,根据sql来查询数据库的方法如下:
$connection = Propel::getConnection();
$query = 'SELECT MAX(%s) AS max FROM %s';
$query = sprintf($query, ArticlePeer::CREATED_AT, ArticlePeer::TABLE_NAME);
$statement = $connnection->prepareStatement($query);
$resultset = $statement->executeQuery();
====================================================================================================================
5.基本的文件目录的介绍:
apps/-------------------------项目的每一个应用程序的总目录
frontend/----------------------项目的前台
backend/----------------------项目的后台
batch/--------------------------包含一些需要用命令行来执行的php的脚本
cache/------------------------------缓存目录
config/----------------------------------项目的总的配置文件夹目录
data/----------------------------------数据库的文件目录
sql/------------------------------------数据库脚本
doc/-------------------------------------------文档目录
lib/----------------------------------每个应用模块都可用的目录,其中有根据数据表生成的modules.
model/----------------------------------------根据数据表生成的modules.
log/--------------------------------------日志
plugins/-----------------------------------------插件
test/--------------------------------------测试
unit/
functional/
web/----------------------------------------站点所需的相关修饰文件
css/
images/
js/
uploads/
====================================================================================================================
6.怎么样在页面中调用js和css文件?还有包含其他的文件时,目录是怎么写的?
#调用js和css文件
Listing 7-24 - File Inclusion in view.yml--------------------在view.yml里面配置
indexSuccess:
stylesheets: [mystyle1, mystyle2]
javascripts: [myscript]
Listing 7-25 - File Inclusion in the Action--------------------在action里面调用
$this->getResponse()->addStylesheet('mystyle1');
$this->getResponse()->addStylesheet('mystyle2');
$this->getResponse()->addJavascript('myscript');
Listing 7-26 - File Inclusion Result--No Need for a Helper Call in the Layout-------------最后在页面上的效果
<head>
...
<link rel="stylesheet" type="text/css" media="screen" href="/css/mystyle1.css" />
<link rel="stylesheet" type="text/css" media="screen" href="/css/mystyle2.css" />
<script language="javascript" type="text/javascript" src="/js/myscript.js">
</script>
</head>
#调用单个的js函数
-----Inserting JavaScript with the javascript_tag() Helper--------方法一:用javascript_tag()
<?php echo javascript_tag("
function foobar()
{
...
}
") ?>
=> <script type="text/javascript">
//<![CDATA[
function foobar()
{
...
}
//]]>
</script>
-----<?php echo link_to_function('Click me!', "alert('foobar')") ?>----------方法二:在link_to_function用js
=> <a href="#" onClick="alert('foobar'); return none;">Click me!</a>
====================================================================================================================