phalcon费尔康框架视图和跳转

视图跳转

$this->view->pick(‘index/pick’);选择视图:

关闭视图

$this->view->disable();

在模板中包含局部模板

<?php
$this->partial('shared/login',array(
'var1'=>'val1',
'var2'=>'val2'
));
?>

跳转方式:

//设置一个内部跳转
$this->response->redirect('posts/index');
// 外部跳转url
$this->response->redirect('http://www.netpc.com.cn/',true);
// 设置跳转 http状态
$this->resopnse->redirect('http://www.netpc.com.cn/',true,301);
发表在 开源代码 | 标签为 | 留下评论

yii2数据库配置一主多从和多主多从

yii2配置文件如下:

[
 'class' => 'yii\db\Connection',

 // common configuration for masters
 'masterConfig' => [
 'username' => 'master',
 'password' => '',
 'attributes' => [
 // use a smaller connection timeout
 PDO::ATTR_TIMEOUT => 10,
 ],
 ],

 // list of master configurations
 'masters' => [
 ['dsn' => 'dsn for master server 1'],
 ['dsn' => 'dsn for master server 2'],
 ],

 // common configuration for slaves
 'slaveConfig' => [
 'username' => 'slave',
 'password' => '',
 'attributes' => [
 // use a smaller connection timeout
 PDO::ATTR_TIMEOUT => 10,
 ],
 ],

 // list of slave configurations
 'slaves' => [
 ['dsn' => 'dsn for slave server 1'],
 ['dsn' => 'dsn for slave server 2'],
 ['dsn' => 'dsn for slave server 3'],
 ['dsn' => 'dsn for slave server 4'],
 ],
]

protected function openFromPool(array $pool, array $sharedConfig)
{
if (empty($pool)) {
return null;
}

if (!isset($sharedConfig[‘class’])) {
$sharedConfig[‘class’] = get_class($this);
}

$cache = is_string($this->serverStatusCache) ? Yii::$app->get($this->serverStatusCache, false) : $this->serverStatusCache;

shuffle($pool);//源码这里随机读取配置

foreach ($pool as $config) {
$config = array_merge($sharedConfig, $config);
if (empty($config[‘dsn’])) {
throw new InvalidConfigException(‘The “dsn” option must be specified.’);
}

$key = [__METHOD__, $config[‘dsn’]];
if ($cache instanceof Cache && $cache->get($key)) {
// should not try this dead server now
continue;
}

/* @var $db Connection */
$db = Yii::createObject($config);

try {
$db->open();
return $db;
} catch (\Exception $e) {
Yii::warning(“Connection ({$config[‘dsn’]}) failed: ” . $e->getMessage(), __METHOD__);
if ($cache instanceof Cache) {
// mark this server as dead and only retry it after the specified interval
$cache->set($key, 1, $this->serverRetryInterval);
}
}
}

return null;
}

发表在 开源代码 | 标签为 | 留下评论

innodb错删除表文件后重建提示1050 Table already exists

mysql下误删除innodb数据表的.ibd .frm两个文件后,就无法查看到该表和重新创建同名的新表了。提示1050 – Table ‘xxx’ already exists,关闭mysql服务,找备份的2个文件放上去后,重启后尝试用DROP TABLE 表名;删除,再到目录下查看是否还有表名文件删除,再重启服务,创建表。要不就要尝试导出库,重新建库再导入。无非数据存在ibdata1,而表结构又是另外文件导致的,这点MyISAM方便,怎么复制怎么行。

发表在 数据库 | 标签为 | 留下评论

linux删除文件提示-bash: /bin/rm: Argument list too long

这是linux下文件夹下的文件太多导致的,以下随便执行一个就可以了,我用find挺快的

find . -name “test*” | xargs rm -rf “test*”

模糊查找匹配后删除

ls | xargs -n 10 rm -rf

命令解释为:输出所有的文件名(用空格分割) xargs就是将ls的输出,每10个为一组(以空格为分隔符),作为rm -rf的参数也就是说将所有文件名10个为一组,由rm -rf删除

 

发表在 软件 | 标签为 | 留下评论

vsftpd 530 login incorrect.

除了网上说的pam_service_name=vsftpd 验证方式文件里面的问题外

配置文件也有可能导致
以下userlist_deny和userlist_file不使用的时候都必须注释掉 哪怕user_list文件里面为空也不行,不然也会导致530错误

userlist_enable=YES
#userlist_deny=NO
#userlist_file=/etc/vsftpd/user_list

发表在 软件 | 标签为 | 留下评论

Phalcon模板渲染级别和各级别模板调用

Phalcon 有多种渲染级别,他们的嵌套关系,简单来说就是这张图:

2356393933-56a6050b33630_articlex

我们必须在外层视图文件中调用 <?php echo $this->getContent(); ?>的方法,使他们能够嵌套起来。如果是 volt 引擎的话,可以使用 {{ content() }},它经过 volt 编译后和前面的方法是一样的。

我们可以通过$this->view->setRenderLevel(View::LEVEL_MAIN_LAYOUT);的方法选择渲染级别。

类常量 解释 顺 序
LEVEL_NO_RENDER 表明要避免产生任何形式的显示
LEVEL_ACTION_VIEW 生成显示到视图关联的动作 1
LEVEL_BEFORE_TEMPLATE 生成显示到控制器模板布局之前 2
LEVEL_LAYOUT 生成显示到控制器布局 3
LEVEL_AFTER_TEMPLATE 生成显示到控制器模板布局后 4
LEVEL_MAIN_LAYOUT 生成显示到主布局 5

我们可以在 controller 的 initialize() 方法中,使用下面的方法来指定 Level_After_Template 和 Level_Before_Template 对应的文件。

$this->view->setTemplateBefore('before');
$this->view->setTemplateAfter('after');

也可以在某方法中使用 $this->view->disableLevel(View::LEVEL_AFTER_TEMPLATE);禁用对应的模板调用。

以渲染 testController helloAction 为例,它们的目录结构应该是这样

2866290072-56a6084b9147b_articlex

其中,views 根目录下的 index.phtml 是主布局文件。

layouts 文件夹下的三个文件分别对应,Level_After_Template、Level_Before_Template、Level_Layout。

test 文件夹是对应 testController 下每一个 action 的视图,hello 就是 testController 下 helloAction 对应的视图。

Level_Main_Layout 默认是 index.phtml 或 index.volt,后缀取决去你的模板渲染引擎,而且这个文件必须是视图文件夹的根目录下。我们可以可以通过 setMainView('test/index') 的方法指定为 views 根目录下的其他文件。

下面是有关的部分源码。

protected _mainView = "index";

/**
 * Sets default view name. 
 * Must be a file without extension in the views directory
 *
 * <code>
 *     //Renders as main view views-dir/base.phtml
 *     $this->view->setMainView('base');
 * </code>
 */
public function setMainView(string viewPath) -> <View>
{
    let this->_mainView = viewPath;
    return this;
}

/**
 * Returns the name of the main view
 */
public function getMainView() -> string
{
    return this->_mainView;
}
发表在 开源代码 | 标签为 | 留下评论

rsync排除过滤目录和文件的方法

使用inotifywait排除监控目录的情况下,必须同时使用rsync排除对应的目录,否则只要有触发同步操作,必然会导致不该同步的目录也会同步。与inotifywait类似,rsync的同步也有--exclude--exclude-from两种写法。

个人还是习惯将要排除同步的目录卸载单独的文件列表里,便于管理。使用--include-from=FILE时,排除文件列表用绝对路径,但FILE里面的内容请用相对路径,如:
/etc/rsyncd.d/rsync_exclude.lst

www/2016/
www/201*/201*/201*/.??*
www??*
src/*.html*
src/js/
src/ext3/
src/2016/20160[1-9]/
src/201*/201*/201*/.??*
membermail/
membermail??*
membermail/201*/201*/201*/.??*

排除同步的内容包括,www下的2016目录,类似2016/201601/20160101/下的临时或隐藏文件,等。

发表在 软件 | 标签为 | 留下评论

inotifywait排除目录和文件方法

案例在使用inotifywait触发同步svn源码的时候,需要过滤每个目录的.svn,这时候就需要写个正则了,不然会频繁触发同步软件,假设/tmp/src/www/2016/以及/tmp/src/www/2015/cache/目录下的所有文件不用同步,所以不需要监控,/tmp/src/下的其他文件和目录都同步。(其实对于打开的临时文件,可以不监听modify时间而改成监听close_write

inotifywait排除监控目录有--exclude <pattern>--fromfile <file>两种格式,并且可以同时使用,但主要前者可以用正则,而后者只能是具体的目录或文件。

# vi /etc/inotify_exclude.lst:
/tmp/src/pdf
@/tmp/src/2014

使用fromfile格式只能用绝对路径,不能使用诸如*正则表达式去匹配,@表示排除。

所以每个目录都有相同的东西要过滤排除的时候,并且格式比较复杂,必须使用正则,那只能在inotifywait中加入选项,如--exclude '(.*/*\.log|.*/*\.swp|.svn)$|^/tmp/src/www/(2016|0808.*/cache.*)',表示排除/tmp/src/www/以下的2016目录,和所有0808*目录下的带cache的文件或目录,以及/tmp/src目录下所有的以.log或.swp结尾的文件。

 

发表在 软件 | 标签为 | 留下评论

使用Composer慢 只要改成中国全量镜像即可

修改 Composer 的全局配置文件(推荐方式)

打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

发表在 软件 | 标签为 | 留下评论

nginx查看安装了哪些扩展模块参数

查看nginx安装扩展模块参数命令如下:

/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.8.1
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module –with-http_gzip_static_module –with-ipv6 –with-http_sub_module –with-pcre –with-threads –with-http_realip_module

查看版本就用参数小写v

发表在 服务器 | 标签为 | 留下评论