第一天:开始你的Jobeet项目
*这一系列文章来源于Fabien Potencier,基于Symfony1.4编写的Jobeet Tutirual。
Jobeet是一个开源的发布求职信息和招聘信息的网站。在这一些列的教程中我们将学会教你怎么样实现它。通过这Jobeet项目实例教程,你将学会使用最新的Web技术—Symfony3.4进行网站开发(你还不知道Symfony是什么?Symfony是一个PHP框架)。
对于每一天(每一章),从第一天开始一直到项目完成的那一天,我们会一步一步地编写代码来实现一个真实的网站。
在这一系列教程期间,我们每天(每章)都会给Jobeet添加一些新的功能,同时我们也会在编写代码的过程中向你介绍Symfony2的新功能和在Web开发中的最佳实践。
今天是我们的第一天,我们暂时先不写任何的代码。但是我们需要先搭建好开发环境。
首先,我们需要确保操作系统能够友好地支持Web开发环境。我们将会在VMware虚拟机上使用Ubuntu 12.04 LTS Server进行开发。接下来我们的系统上需要有Web服务器(例如Apache)、数据库(Mysql)和PHP(版本不低于5.3.3),这些软件都是最基本的要求。
sudo apt-get install apache2
启动Apache的重写模块mod-rewrite:
sudo a2enmod rewrite
sudo apt-get install mysql-server mysql-client
sudo apt-get install php5 libapache2-mod-php5 php5-mysql
sudo apt-get install php5-intl
sudo service apache2 restart
我们现在需要做的事情是在服务器下准备一个目录来存放Jobeet项目。我们就把那个目录命名为jobeet:/var/www/jobeet。
mkdir /var/www/jobeet
现在目录已经准备好了,那么我们要在目录里面放些什么呢?点击 http://symfony.com/download 到Symfony官网进行下载,选择 Symfony Standard 2.3.2 without vendors(2.3.2标准版)并进行下载。现在,把下载到的文件解压到刚才准备好的/var/www/jobeet目录中。
在这一步中,我们将会更新Symfony的依赖库,我们会使用它们来开发Jobeet。一个Symfony项目通常需要依赖很多的扩展库,这些扩展库可以通过一个叫Composer的库来下载,并把下载的扩展库存放在*vendor/*目录下。
在Symfony3.4标准版中,我们可以通过Composer来管理依赖库。我们先把Composer安装到jobeet目录下:
curl -s https://getcomposer.org/installer | php
如果你还没有安装curl扩展,那么你可以使用如下的命令进行安装:
sudo apt-get install curl
接下来,输入下面的命令开始下载所有必须的依赖库:
php composer.phar install
一个良好的Web实践是,我们只把浏览器需要访问到的资源文件放在网站的根目录下,比如css文件,js文件和图片文件。在Symfony项目中,我们通常推荐把这些文件放在项目中的*web/*子目录中。现在来配置我们的项目,在此之前我们需要创建一个虚拟主机(virtual host),打开终端,输入下面的命令:
sudo nano /etc/apache2/sites-available/jobeet.local
好了,我们创建了一个jobeet.local文件。接下来,把下面的代码复制到jobeet.local.config文件中,然后按下Control-O,回车进行保存,然后Control-X退出编辑器。
ServerName jobeet.local
DocumentRoot /var/www/jobeet/web
DirectoryIndex app.php
ErrorLog /var/log/apache2/jobeet-error.log
CustomLog /var/log/apache2/jobeet-access.log combined
AllowOverride All
Allow from All
我们在Apache服务器中使用的jobeet.local本地域名需要声明后才能使用。如果你使用的是Linux系统,那么你需要找到*/etc/hosts文件。如果你使用的是Windows系统,你需要找到c:\Windows\System32\drivers\etc\hosts文件。把下面这行代码加入到hosts*文件的末尾:
127.0.0.1 jobeet.local
如果你是在非本地服务器上进行这些操作,你可以把127.0.0.1替换成远程服务器的ip地址。
为了使以上的配置操作能够生效,我们需要重启Apache服务器后才能使新配置的虚拟机生效。打开终端,输入下面的命令:
sudo a2ensite jobeet.local
sudo service apache2 restart
Symfony2有一个自带的测试工具来帮助我们检查当前的开发环境配置是否适合使用Symfony。我们可以通过下面的URL来检查配置:
http://jobeet.local/config.php
如果你不是在本地主机上运行confoig.php而是在远程服务器上运行的话,那么你应该修改web/config.php文件,把下面那些限制外部访问的代码给注释掉:
//web/config.phpif(!isset($_SERVER['HTTP_HOST'])) {exit('This script cannot be run from the CLI. Run it from a browser.');}/*if (!in_array(@$_SERVER['REMOTE_ADDR'], array( '127.0.0.1', '::1',))) { header('HTTP/1.0 403 Forbidden'); exit('This script is only accessible from localhost.');}*///...
在web/app_dev.php中做和上面相同的修改:
//web/app_dev.phpuseSymfony\Component\HttpFoundation\Request;useSymfony\Component\Debug\Debug;//If you don't want to setup permissions the proper way, just uncomment the following PHP line//read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information//umask(0000);//This check prevents access to debug front controllers that are deployed by accident to production servers.//Feel free to remove this, extend it, or make something more sophisticated./*if (isset($_SERVER['HTTP_CLIENT_IP']) || isset($_SERVER['HTTP_X_FORWARDED_FOR']) || !in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1'))) { header('HTTP/1.0 403 Forbidden'); exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');}*/$loader=require_once__DIR__.'/../app/bootstrap.php.cache';Debug::enable();require_once__DIR__.'/../app/AppKernel.php';//...
当你运行config.php后,Symfony可能会要求你去修改开发环境配置以满足要求。完成下面这些配置能够帮助你消除*”warnings“*。
sudo chmod -R 777 app/cache
sudo chmod -R 777 app/logs
sudo setfacl -dR -m u::rwX app/cache app/logs
如果你还没有ACL,请先安装:
sudo apt-get install acl
date.timezone = Europe/Bucharest # date.timezone = Asia/Shanghai
sudo nano /etc/php5/apache2/php.ini
在php.ini文件中的*[data]部分找到date.timezone配置项,然后删除前面的;*。
3、设置php.ini中的short_open_tag为false
short_open_tag
Default Value: Off
sudo apt-get install php-apc
sudo service apache2 restart
重启Apache,在浏览器中输入http://jobeet.local/app_dev.php,你将会看到下面这个页面:
Symfony3自带了一个命令行工具,我们可以使用它来完成不同的任务。
我们可以输入下面的命令查看Symfony2控制台能为我们做些什么:
php app/console list
包十分类似于其它应用程序中的插件(plugin),但包比它们更加好用。在Symfony3.4中,所有的一切都是Bundle,包括核心的框架功能,还有我们应用中的代码。
一个包就是实现了一个功能的接口,它由许多文件组成,这些文件有组织地被放在一起,这就组成了一个包。
Tips:一个Bundle能够在任何地方使用,只要它能够被自动加载(app/autoload.php)。 在这里你可以了解更多关于bundle系统的知识:http://symfony.com/doc/current/book/page_creation.html#the-bundle-system
执行下面的命令启动Symfony的bundle生成器:
php bin/console generate:bundle --namespace=Ibw/JobeetBundle
执行以上的命令后,生成器会询问我们几个问题。下面是这些问题和其答案(除了有一个不是默认的,其他全部都是默认的)
Bundle name [IbwJobeetBundle]: IbwJobeetBundle
Target directory [/var/www/jobeet/src]: /var/www/jobeet/src
Configuration format (yml, xml, php, or annotation) [yml]: yml
Do you want to generate the whole directory structure [no]? yes
Do you confirm generation [yes]? yes
Confirm automatic update of your Kernel [yes]? yes
Confirm automatic update of the Routing [yes]? yes
如果出现错误,修改composer.json文件
添加 "autoload": {
"psr-4": {
……
"Ibw\\JobeetBundle\\": "src/Ibw/JobeetBundle"
},
生成bundle之后,我们需要清除cache:
php bin/console cache:clear --env=prod
php bin/console cache:clear --env=dev
新生成的bundle可以在src/目录下找到:src/Ibw/JobeetBundle。Bundle生成器会生成一个DefaultController,在这个控制器中有一个*indexAction()*方法。
在之前的版本我们可以通过其他路径访问,3.4中新建bundle以后,默认为我们的主路径,我们可以通过下面的URL访问到它:http://jobeet.local/或者http://jobeet.local/app_dev.php/
如果需要修改路径,需要修改routing.yml文件。
如果访问报错,我们需要修改src/Ibw/JobeetBundle/Controller/DefaultController.php
return $this->render('IbwJobeetBundle:Default:index.html.twig'); 修改为return $this->render('@IbwJobeet/Default/index.html.twig');
Symfony3.4拥有不同类型的环境。如果你去查看web/目录,你会发现有两个PHP文件:app_dev.php和app.php。这两个文件被叫做前端控制器,所有的请求都需要通过它们。app.php文件被用在Production环境,而app_dev.php则被用在Development环境。在Development环境下是十分方便的,因为它能够把所有程序中出现的的errors和warnings显示在调试栏(Debug Toolbar)上。哈哈,调试栏是开发者的最好的小伙伴。
好了,我们今天就先到这啦。在明天的内容中,我们将会给详细讲解Jobeet需要实现的功能有哪些。
网友评论