Laravel学习笔记(二)Laravel 应用程序的体系结构

在一切环境就绪了,当然就要开始了解框架了。 站在巨人的肩膀上,学东西会事半功倍。我在网上找到一篇好文章,正好可以让我轻松了解Laravel应用程序的体系结构。因此借来直接用了。 该章节内容翻译自《Architecture of Laravel Applications》,一切版权为原作者,由于原作者写这篇文章时Laravel版本还没有到4.1,一些地方有稍微差别,我会稍作修改。 原作者:Stable Host, LLC(不知道找对了没有) 翻译作者:Bowen Huang 正文: Laravel被称为“全栈”式框架,因为它处理从网络服务到数据库管理,直到HTML生成的一切事情,一个垂直集成的web开发环境能给开发者提供更好的体验。 一个典型的程序员通过命令行工具与Laravel交互,生成和管理Laravel项目环境。Laravel带有一个名为Artisan的优秀的命令行工具,可以用它来生成框架代码和数据库架构,Artisan能够处理从数据库架构迁移到资源和配置管理的一切事情。 约定优于配置 Laravel 的有趣的特征之一,在如何构建 web 应用程序上它规定了一些相当严重的限制。出人意料的是,这些限制使创建应用更加的容易——轻松了很多。让我们来看看为什么。 Laravel区别于其他垂直集成开发环境在于它强烈的偏好约定优于配置。而一些 Java,Python 或 PHP 框架往往需要大量的 XML 配置,Laravel在开始的时候几乎不需要配置(也许只有几行在PHP中)。这种对配置文件的规避行为使其非常独特,在所有 Laravel 应用程序中可识别的代码结构是相同的。 一个项目结构来统治他们所有 ! 这并不奇怪,所有Laravel项目基本上具有相同的目录结构 ——在其中的每个文件都有其指定的地方。通过这种约定的目录结果,可以确保开发者按照“Laravel way”工作。 图 1.1 显示了 Laravel 项目目录结构是什么样子: 图1.1 Laravel 项目目录结构   就如你看到这样,laravel下面只包含了4个文件夹,这4个文件夹下面有一些子文件夹,这种丰富的子文件夹在第一次看到是不是有压力?我会逐个介绍。我们大部分的开发工作都会在app/文件夹下面进行。 下面是各个文件夹和文件的基本介绍: 顶级文件夹 作用 app 包含了站点的controllers(控制器),models(模型),views(视图)和assets(资源)。这些是网站运行的主要代码,你会将你大部分的时间花在这些上面。 bootstrap 用来存放系统启动时需要的文件,这些文件会被如index.php这样的文件调用。 public 这个文件夹是唯一外界可以看到的,是必须指向你web服务器的目录。它含有laravel框架核心的引导文件index.php,这个目录也可用来存放任何可以公开的静态资源,如css,Javascript,images等。 vendor 用来存放所有的第三方代码,在一个典型的Laravel应用程序,这包括Laravel源代码及其相关,并含有额外的预包装功能的插件。   正如上面提到的,/app是所有的乐趣产生的地方,让我们更深入的看看这个目录的结构。 图 1.2 显示/app文件夹的详细信息:   图1.2 app 文件夹详细信息   下面是详细介绍: 文件的文件夹 作用 /app/config/ 配置应用程序的运行时规则、 数据库、 session等等。包含大量的用来更改框架的各个方面的配置文件。大部分的配置文件中返回的选项关联PHP数组。 /app/config/app.php 各种应用程序级设置,即时区、 区域设置(语言环境)、 调试模式和独特的加密密钥。 /app/config/auth.php 控制在应用程序中如何进行身份验证,即身份验证驱动程序。 /app/config/cache.php 如果应用程序利用缓存来加快响应时间,要在此配置该功能。 /app/config/compile.php 在此处可以指定一些额外类,去包含由‘artisan optimize’命令声称的编译文件。这些应该是被包括在基本上每个请求到应用程序中的类。 /app/config/database.php 包含数据库的相关配置信息,即默认数据库引擎和连接信息。 /app/config/mail.php 为电子邮件发件引擎的配置文件,即 SMTP 服务器,From:标头 /app/config/session.php 控制Laravel怎样管理用户sessions,即session […]

龙生   23 Oct 2015
View Details

Laravel学习笔记(一)安装配置开发环境

摘要 Laravel的目标是给开发者创造一个愉快的开发过程,并且不牺牲应用的功能性。快乐的开发者才能创造最棒的代码!为了这个目的,开发者博取众框架之长处集中到Laravel中,这些框架甚至是基于Ruby on Rails、ASP.NET MVC、和Sinatra等开发语言或工具的。 对Laravel初步认知 刚从事PHP开发没多久,对PHP的一些框架了解甚少,在CSDN上看到一篇文章《PHP开发框架流行度排名:Laravel居首》,才知道还有Laravel这么个框架,正好公司想从事Laravel的开发,就学习一下。然后搜索了大量的资料,了解到了它是什么。 至于它的详细介绍我就不说了,google一下,就有了。 Laravel环境搭建 在有了初步认知后,当然就要开始在自己的电脑上搭建Laravel的开发环境了。 系统环境需求 PHP 5.3.7或者更高版本,如果没有系统没有安装PHP环境的,请到下面地址下载:http://cn2.php.net/downloads.php 电脑上具有web服务器,IIS,apache或者其它web服务器 MCrypt PHP扩展 安装Composer Laravel框架使用Composer(PHP包管理工具,参考 Composer 中文文档)来管理代码依赖性。Windows操作系统中,你可以使用Composer的Windows安装工具。下载后直接安装就可以了,安装之后,可以在控制台输入composer查看是否安装成功。 安装Laravel 在Github下载最新版本(目前4.1):https://github.com/laravel/laravel/archive/master.zip 将文件解压到你想要的任何位置,例如,我解压到我的H盘Laravel_site目录下 控制台进入该目录(Laravel_site),执行命令composer install (温馨提示:laravel的版本要和php的版本对应哦),然后程序会下载必要安装文件,要保证网络畅通 安装完成后如下图: 然后观察文件目录下,多了一个vendor文件夹,composer.lock文件也被修改了。 当然还有一种安装方式,就是直接下载完整安装包,解压即可,下载地址:http://ci.laravel-cn.com/laravel.zip 服务器配置 在上面的操作完成后,就是配置该站点在web服务器上,我相信这些操作,只要有过网站开发经验的人都有,我就不详细介绍了。这里要注意一点的就是,配置网站的时候,根目录是public,为不是最Laravel_site,配置好了,运行如下: 安装顺利完成! from:http://www.cnblogs.com/huangbx/p/Laravel_1.html

龙生   23 Oct 2015
View Details

Win7下IIS7整合Tomcat8

准备工作 环境说明:win7(64位),已安装iis7.5,已安装JDK。 首先下载Tomcat8:http://mirrors.cnnic.cn/apache/tomcat/tomcat-8/v8.0.27/bin/apache-tomcat-8.0.27-windows-x64.zip 下载连接器:http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/tomcat-connectors-1.2.40-windows-x86_64-iis.zip   Tomcat 解压tomcat到D:\Tomcat8027。 以管理员身份运行:D:\Tomcat8027\bin\service.bat,执行成功后启动服务:Apache Tomcat 8.0 Tomcat8。 在浏览器中输入:http://localhost:8080,如果显示tomcat页面,说明安装成功。   连接器 从连接器压缩包解压isapi_redirect.dll到D:\Tomcat8027\conf。 把以下代码保存为tomcat_iis.reg,并双击导入注册表。 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Jakarta Isapi Redirector\1.0] "extension_uri"="/jakarta/isapi_redirect.dll" "log_file"="D://Tomcat8027//logs" "log_level"="debug" "tomcat_start"="D://Tomcat8027//bin//startup.bat" "tomcat_stop"="D://Tomcat8027//bin//shutdown.bat" "worker_file"="D://Tomcat8027//conf//workers.properties" "worker_mount_file"="D://Tomcat8027//conf//uriworkermap.properties" 在D:\Tomcat8027\conf下创建三个文件: workers.properties workers.tomcat_home=D:\Tomcat8027\ workers.java_home=D:\Program Files\Java\jdk1.8.0_51 ps=\ worker.list=worker1 worker.worker1.port=8009 worker.worker1.host=localhost worker.worker1.type=ajp13 worker.worker1.lbfactor=1 uriworkermap.properties /*.jsp=worker1 isapi_redirect.properties extension_uri=/jakarta/isapi_redirect.dll log_file=D:\Tomcat8027\logs\isapi_redirect.log log_level=info worker_file=D:\Tomcat8027\conf\workers.properties worker_mount_file=D:\Tomcat8027\conf\uriworkermap.properties   IIS站点的设置 首先点击IIS管理器根节点,双击“ISAPI和CGI限制”,右键“添加”,ISAPI或CGI路径:D:\Tomcat8027\conf\isapi_redirect.dll,描述:jakarta,勾选“允许执行扩展路径”。 然后创建一个站点:TestJsp,并绑定testjsp主机名,并在hosts文件里绑定,我的物理路径是:F:\TEST\JSP。 在站点下新建虚拟目录jakarta,别名要和注册表里的一致,所以要用:jakarta,物理路径:D:\Tomcat8027\conf。 点击站点下的jakarta,双击“处理程序映射”,点击第三栏的菜单“编辑功能权限”,勾选“执行”。 点击TestJsp站点,双击“ISAPI筛选器”,添加一个筛选器,筛选器名称:jakarta,可执行文件:D:\Tomcat8027\conf\isapi_redirect.dll。 打开D:\Tomcat8027\conf\server.xml,在Engine标签里添加一个Host元素: <Host name="testjsp" appBase="." unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="/" reloadable="true" docBase="F:\TEST\JSP" workDir="F:\TEST\JSP"></Context> </Host> ps:name、iis绑定的主机名、hosts的指向名称一定要一致。 在F:\TEST\JSP下添加测试文件test.jsp: <%@ page language="java"%> <%@ page contentType="text/html; charset=utf-8"%> <%@ page import="java.util.*"%> <%@ page import="java.text.*"%><% […]

龙生   19 Oct 2015
View Details

CSS3的REM设置字体大小

在Web中使用什么单位来定义页面的字体大小,至今天为止都还在激烈的争论着,有人说PX做为单位好,有人说EM优点多,还有人在说百分比方便,以至于出现了CSS Font-Size: em vs. px vs. pt vs. percent这样的PK大局。不幸的是,仍然有不同的利弊,使各种技术都不太理想,但又无法不去用。真是进也难,退也难呀。 最近在学习em的相关知识的时候,无意之间让我拾得一宝,就是使用rem来设置Web页面的字体大小。让我一下子就来劲了,一口气看完并测试了一回,还真是爽歪歪的呀。师傅说好东西不能吃独食,于我就在这里给大家吹吹这个从没见过的REM。 在详细介绍rem之前,我们先一起来回顾一下我们常用的两种记量单位,也是备受争论的两个: PX为单位 EM为单位 PX为单位 在Web页面初期制作中,我们都是使用“px”来设置我们的文本,因为他比较稳定和精确。但是这种方法存在一个问题,当用户在浏览器中浏览我们制作的Web页面时,他改变了浏览器的字体大小,这时会使用我们的Web页面布局被打破。这样对于那些关心自己网站可用性的用户来说,就是一个大问题了。因此,这时就提出了使用“em”来定义Web页面的字体。 em为单位 前面也说了,使用是“px”为单位是比较方便,而又一致,但在浏览器中放大或缩放浏览页面时会存在一个问题,要解决这个问题,我们可以使用“em”单位。Richard Rutter’在《How to size text using ems》一文中有做过详细的介绍,追至早一点,Richard Rutter也在《How to Size Text in CSS》中进行过深入的剖析。 这种技术需要一个参考点,一般都是以<body>的“font-size”为基准。比如说我们使用“1em”等于“10px”来改变默认值“1em=16px”,这样一来,我们设置字体大小相当于“14px”时,只需要将其值设置为“1.4em”。

为什么“li”的“1.4em”是不是“14px”将是一个问号呢?如果你了解过“em”后,你会觉得这个问题是多问的。前面也简单的介绍过一回,在使用“em”作单位时,一定需要知道其父元素的设置,因为“em”就是一个相对值,而且是一个相对于父元素的值,其真正的计算公式是: 1 ÷ 父元素的font-size × 需要转换的像素值 = em值 这样的情况下“1.4em”可以是“14px”,也可以是“20px”,或者说是“24px”,总之是一个不确定值,那么解决这样的问题,要么你知道其父元素的值,要么呢在任何子元素中都使用“1em”。这样一来可能又不是我们所需要的方法。 这里我只是简单的介绍了一个这两个单位的使用,具体一点的大家可以参阅: Best Practices的站长Kyle的《CSS Font-Size: em vs. px vs. pt vs. percent》 Converting px into percentage and em for relative CSS font sizes Em Vs Percent Widths CSS: Units of Measurement Jennifer Kyrnin的Using Points, Pixels, Ems, or Percentages for CSS Fonts Rem为单位 CSS3的出现,他同时引进了一些新的单位,包括我们今天所说的rem。在W3C官网上是这样描述rem的——“font size of the root element” 。下面我们就一起来详细的了解rem。 […]

龙生   11 Oct 2015
View Details

随机物品权重算法设计

1、前言 在游戏开发中很多功能按权重随机给东西,比如:掉落、奖励、抽奖等等….. 2、功能 *)支持多个权重进行随机 *)能屏蔽指定权重,防止再次随机到 3、实现 [java] view plaincopy public int weightRandom(BitSet exclude, int… weights) {         if (weights == null) {             //安全性验证         }         int length = weights.length;         if (length == 0) {             return –1;         }         if (len == 1) {             int w = weights[0];             if (w < 0) {                 //安全性验证             } else if (w == 0) {                 return –1;             } else {                 return 0;             }         }         int total = 0;         for (int i = 0; i < len; i++) {             if (exclude != null && exclude.get(i)) {                 continue;             }             int w = weights[i];             total += w;         }         if (total <= 0) {             return –1;         }         int randomNum = random(1, total), hitIndex = –1, partNum = 0;         for (int i = 0; i < len; i++) {             if (exclude != null && exclude.get(i)) {                 continue;             }             int w = weights[i];             partNum += w;             if (partNum >= randomNum) {                 hitIndex = i;                 break;             }         }         return hitIndex; } from:http://blog.csdn.net/zeus_9i/article/details/11900015

龙生   10 Oct 2015
View Details

Java实现按权重随机数

一、问题定义: 问下有一个数组,这些数组中的值都有自己的权重,怎样设计才能高效的优先取出权重高的数?? 例如: 复制代码代码如下: 权重: 8  2  11  79 权重返回的值: 0  1  2   3 二、分析问题: 思路一:创建一个数组数组大小为权重和的大小,如值0的权重是8,则放入8个0值,值1的权重是2,则放入2个1值,依次类推。 然后用用一个权重和大小的随机数,产生随机数,即可。缺点要占用过多的内存。 思路二: 权重和数组 w[i]存储的是[0,i]元素的所有元素的权重和  时间复杂度O(n) 空间复杂度O(n) 随机[0,W[399]] 看随机数 落在哪个Wi 内就选哪个  时间复杂度 O(longn) 所以总的时间复杂度时间复杂度O(n) 空间复杂度O(n) 伪代码: 轮盘赌 并不是一种特别好的选择算子,但它容易实现。 首先要明白一点,由于交叉、变异等算子,并不能控制进化方向,所以进化的重任落在选择算子上。 如果明白了这一点,就好办了。 轮盘赌,就是积累概率来实现的,通常适应度大的被选择的几率较高。 假如:fit为适应度数组,共m个 复制代码代码如下: for i=1 to m '先求和 sum=sum+fit(i) next i For i = 1 To n ‘n-是要生成多少个个体 temp = temp + fit(i) If rnd <= temp / sum Then 输出 i 就是结果 Exit Function End If Next i 三、解决问题: 复制代码代码如下: package datastruct; import java.util.HashMap; import java.util.Map; /** 权重随机数: 如              权重:8  2  11  […]

龙生   10 Oct 2015
View Details

curl实现站外采集的方法和技巧

curl是专门用来进行网络交互的库,提供了一堆自定义选项,用来应对不同的环境,稳定性自然要大于file_get_contents。 选择curl的理由 关于curl与file_get_contents,摘抄一段通俗易懂的对比: file_get_contents其实是一堆内置的文件操作函数的合并版本,比如file_exists,fopen,fread,fclose,专门提供给懒人用的,而且它主要是用来对付本地文件的,但又是因为懒人的原因,同时加入了对网络文件的支持; curl是专门用来进行网络交互的库,提供了一堆自定义选项,用来应对不同的环境,稳定性自然要大于file_get_contents。 使用方法 1、开启curl支持 由于php环境安装后默认是没有打开curl支持的,需修改php.ini文件,找到;extension=php_curl.dll,把前面的冒号去掉,重启服务即可; 2、使用curl进行数据抓取 复制代码代码如下: // 初始化一个 cURL 对象 $curl = curl_init(); // 设置你需要抓取的URL curl_setopt($curl, CURLOPT_URL, 'http://www.cmx8.cn'); // 设置header curl_setopt($curl, CURLOPT_HEADER, 1); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 运行cURL,请求网页 $data = curl_exec($curl); // 关闭URL请求 curl_close($curl); 3、通过正则匹配找到关键数据 复制代码代码如下: //$data是curl_exec返回的的值,即采集的目标内容 preg_match_all("/<li class=\"item\">(.*?)<\/li>/",$data, $out, PREG_SET_ORDER); foreach($out as $key => $value){ //此处$value是数组,同时记录找到带匹配字符的整句和单独匹配的字符 echo '匹配到的整句:'.$value[0].' '; echo '单独匹配到的:'.$value[1].' '; } 技巧 1、超时的相关设置 通过curl_setopt($ch, opt) 可以设置一些超时的设置,主要包括: CURLOPT_TIMEOUT 设置cURL允许执行的最长秒数。 CURLOPT_TIMEOUT_MS 设置cURL允许执行的最长毫秒数。 (在cURL 7.16.2中被加入。从PHP 5.2.3起可使用。 ) CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。 CURLOPT_CONNECTTIMEOUT_MS 尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。 在cURL 7.16.2中被加入。从PHP 5.2.3开始可用。 CURLOPT_DNS_CACHE_TIMEOUT 设置在内存中保存DNS信息的时间,默认为120秒。 复制代码代码如下: curl_setopt($ch, CURLOPT_TIMEOUT, 60);   //只需要设置一个秒的数量就可以 […]

龙生   09 Oct 2015
View Details

phpstorm配置Xdebug进行调试PHP教程

运行环境: PHPSTORM版本 : 8.0.1 PHP版本 : 5.6.2 xdebug版本:php_xdebug-2.2.5-5.6-vc11-x86_64.dll ps : php版本和xdebug版本一定要相对应,且要看清64位和32位哦~ 1. PHP安装xdebug扩展 php.ini的配置,下面的配置仅供参考,路径要换成自己的! [xdebug] zend_extension=”D:\wamp\php-5.6.2-x64\ext\php_xdebug-2.2.5-5.6-vc11-x86_64.dll” xdebug.remote_enable = On xdebug.remote_handler = dbgp xdebug.remote_host= localhost xdebug.remote_port = 9000 xdebug.idekey = PHPSTORM ps :  remote_handler 、 remote_host、 remote_port 这些都有默认值,但还是建议设置下,至少知道要设置这些参数~ 查看phpinfo~ 2.PHPSTORM设置 楼主以前一直用zendstudio,刚开始用phpstorm非常蛋疼,用了一段时间后发现还挺好用的~ 1.首先检查phpstorm的xdebug配置 这里的debug port要和php.ini里面的 xdebug.remote_port相一致!默认是9000,如果9000端口被占用的话,可以改成其他端口。 2. 设置debug. 添加本地的 web server~ www.51open.pcom 是我本地的 web server~ ~ 3.开始调试 打好第一个断点,shift + F9就可以了 打好 第一个断点 ,选中配置的debug,  按旁边的臭虫 按钮 总结: 根据断点配置,或在打开 Debug URL 的过程中,或在 POST 之后,如果 PhpStorm 监听到了 Debug 连接,就会立即切换到编辑器界面,并跳转到设置的断点处,浏览器端会等待 PhpStorm 的操作。 你可以随时中断 PhpStorm 的调试,或方便的进行 Step Into / Step Over / Run to cursor(这个刁爆了): […]

龙生   09 Oct 2015
View Details

phpstorm 502 bad gateway 最简单解决办法

问题: 解决办法: 1.电脑左下角开始--搜索”php.exe“,记录下路径,如我的是C:\xampp\php\ 2.点击phpstorm里的configured PHP Interpreter(见下图) 3.点击下图里的红框 4.在下图红框输入步骤1里的php的文件夹路径确认即可。   PS:本人是新手在自学PHP,有什么说得不对的,麻烦各位指出。谢谢。   from:http://www.bubuko.com/infodetail-649755.html

龙生   08 Oct 2015
View Details
1 283 284 285 432