Mr.Blog


  • 首页

  • 归档

  • 标签

  • 分类

  • 搜索

Symfony3 相关问题

发表于 2018-02-07 | 分类于 Symfony
  1. 访问新Bundle报错

    1
    2
    3
    (1/1) ClassNotFoundException
    Attempted to load class "AppBundle" from namespace "Bundles\AppBundle".
    Did you forget a "use" statement for another namespace?

    打开 composer.json 文件,修改如下:

    1
    2
    3
    4
    5
    6
    "autoload": {
    "psr-4": {
    "": "src/"
    },
    "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
    }

    修改后运行 composer dump-autoload

  2. 生成实体类报错

    1
    2
    [RuntimeException]
    Namespace "Bundles\CommonBundle" does not contain any mapped entities.

    打开 config.yml, 配置 doctrine, 添加 mappings

    orm:    
     mappings:
         CommonBundle: ~
         #CommonBundle:
         #    type: yml
         #    dir: Resources/config/doctrine
    

Symfony3 常用命令

发表于 2018-02-07 | 分类于 Symfony

Bundle

1
2
#生成Bundle,配置格式选择 yml
php bin/console generate:bundle --namespace=Bundles/AppBundle

Doctrine

1
2
3
4
5
6
7
8
#Doctrine 自检数据库并生成相应的元数据文件
php bin/console doctrine:mapping:import CommonBundle yml
#生成单个表对应的元数据文件
php bin/console doctrine:mapping:import CommonBundle --filter=Admin yml
#生成实体类
php bin/console doctrine:generate:entities CommonBundle
#生成单个表的实体类
php bin/console doctrine:generate:entities CommonBundle:Admin --path=src

生成元数据文件后,并未生成 repositoryClass 参数,方法如下(修改后重新生成元数据文件即可):

1
2
3
4
5
6
7
// \vendor\doctrine\orm\lib\Doctrine\ORM\Tools\Export\Driver\YamlExporter.php
// exportClassMetadata 方法,添加 $metadata->customRepositoryClassName 为空的处理
if ($metadata->customRepositoryClassName) {
$array['repositoryClass'] = $metadata->customRepositoryClassName;
} else {
$array['repositoryClass'] = str_replace('\\Entity\\', '\\EntityRepository\\', $metadata->name) . 'Repository';
}

生成不带表前缀的元数据文件 vendor\doctrine\doctrine-bundle\Command\ImportMappingDoctrineCommand.php 第 137 行

Linux Crontab 实现秒级定时任务及普通用户运行crontab

发表于 2018-02-03 | 分类于 Linux

crontab.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
PHP_BIN=/alidata/server/php/bin/php
BASE_PATH=/alidata/www/symfony/bin/

cd ${BASE_PATH}

umask 002

${PHP_BIN} \
-d date.timezone=Asia/Shanghai \
-d mbstring.http_input=UTF-8 \
-d mbstring.http_output=UTF-8 \
-d mbstring.internal_encoding=UTF-8 \
-d default_charset=UTF-8 \
-d magic_quotes_gpc=off \
-d magic_quotes_runtime=off \
crontab.php
阅读全文 »

生成XML的四种方式

发表于 2018-02-03 | 分类于 PHP
  1. 使用纯粹的PHP代码生成字符串,并把这个字符串写入一个以XML为后缀的文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    function create_item($titleData, $titleSize, $contentData, $pubdateData)
    {
    $item = "<item>\n";
    $item .= "<title size=\"" . $titleSize . "\">" . $titleData . "</title>\n";
    $item .= "<content>" . $contentData . "</content>\n";
    $item .= "<pubdate>" . $pubdateData . "</pubdate>\n";
    $item .= "</item>\n";
    return $item;
    }

    $dataArray = [
    [
    'title' => 'title1',
    'content' => 'content1',
    'pubdate' => '2009-10-11'
    ],
    [
    'title' => 'title2',
    'content' => 'content2',
    'pubdate' => '2009-11-11'
    ]
    ];
    $titleSize = 1;
    $xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
    $xml .= "<article>\n";
    foreach ($dataArray as $data) {
    $xml .= create_item($data['title'], $titleSize, $data['content'], $data['pubdate']);
    }
    $xml .= "</article>\n";
    echo $xml;
阅读全文 »

PHP 代码规范

发表于 2018-02-03 | 分类于 PHP

基本要求

  1. 以标准计算机英文为蓝本,杜绝一切拼音、或拼音英文混杂的命名方式
  2. 纯PHP代码源文件只使用 <?php 标签,省略关闭标签 ?>
  3. 源文件中PHP代码的编码格式必须是无BOM的UTF-8格式
  4. 一个源文件只做一种类型的声明,即这个文件专门用来声明Class,那个文件专门用来设置配置信息,别混在一起写
  5. 使用Tab键来缩进,每个Tab键长度设置为4个空格
  6. 一行推荐的是最多写120个字符,多于这个字符就应该换行了
  7. 关键字必须小写,boolean值:true,false,null 也必须小写
  8. 涉及到多个数据表 更新/添加 操作时,最外层要用事务,保证数据库操作的原子性
  9. Model层,只做简单的数据表的查询
  10. 业务逻辑统一封装到 Logic层
  11. 控制器只做URL路由,不要当作 业务方法 调用,不能出现SQL操作语句
阅读全文 »

IP地理位置查询类(纯真IP地址库)

发表于 2018-02-01 | 分类于 PHP

由于使用UTF8编码,如果使用纯真IP地址库的话,需要对返回结果进行编码转换
纯真IP地址库 http://www.cz88.net/ 安装完成后,到安装目录把 qqwry.dat 拷贝出来

阅读全文 »

SESSION 阻塞

发表于 2018-02-01 | 分类于 PHP

问题

使用session过程中,在开启session后,同一浏览器执行同一程序,不同页面会被锁,不同浏览器不会出现这种情况

原因

由于PHP的Session信息是写入文件的,1个客户端占有1个session文件,因此,当 session_start 被调用的时候,该文件是被锁住的,而且是以读写模式锁住的,所以第2次调用 session_start 的时候就被阻塞了

解决

使用 session_write_close 函数(Write session data and end session),也就是写session的数据,同时关闭这个session,因此在用完session之后,调用这个函数关闭 session 文件即可解除锁定

Demo

创建 test1.php 和 test2.php 文件

1
2
3
4
5
6
7
8
// test1.php
<?php
date_default_timezone_set('PRC');
session_start();
$_SESSION['test1'] = date('H:i:s');
//session_write_close();
sleep(5);
echo $_SESSION['test1'];

1
2
3
4
5
6
// test2.php
<?php
date_default_timezone_set('PRC');
session_start();
$_SESSION['test2'] = date('H:i:s');
echo $_SESSION['test2'];

先访问 test1.php 再访问 test2.php, test2.php 必须等 test1.php 执行完毕后才会执行,这时将 test1.php 的 session_write_close() 取消注释,再测试一遍,这时2个脚本就可以同时执行了

1…131415
Mr

Mr

懒........

102 日志
21 分类
56 标签
RSS
Links
  • Novnan
  • 挨踢Blog
  • Eagle
  • Timber
  • 谢炳南
© 2020 — 2021 Mr
0%