我可以使用它在CLI上执行SQL
php app/console doctrine:query:sql "SELECT * FROM table"
Run Code Online (Sandbox Code Playgroud)
但是如何使用相同的命令从文件中执行SQL?例如
php app/console doctrine:query:sql filename.sql
Run Code Online (Sandbox Code Playgroud)
我曾尝试>
和<
以各种方式cat
,但没有甚至接近做我想要的.
我意识到我可以直接使用mysql
它,但我希望通过学说来做到这一点.
我想使用导航助手使用Acl构建我的导航菜单.Acl部分我工作得很好.
我现在希望能够显示几种不同类型的导航.例如admin-nav,side-nav,new-nav等.我在文档中找不到任何相关内容.仅限如何设置导航,然后在布局或视图中重复使用该导航对象.
我尝试了类似的东西 - 有两个不同的容器,具有不同的页面数组,然后在注册表中设置这些容器.然后从我的视图和/或布局中调用导航并将其传递给容器:
<?php echo $this->navigation(Zend_Registry::get("news-nav")) ?>
Run Code Online (Sandbox Code Playgroud)
在我的新闻视图中调用上面的内容,在我的布局中调用以下内容
<?php echo $this->navigation(Zend_Registry::get("admin-nav")) ?>
Run Code Online (Sandbox Code Playgroud)
除了新闻页面之外,这适用于我的所有页面.在我的新闻页面上,新闻导航显示两次,一次在布局中,一次在新闻视图中.管理员导航从不显示,似乎被新闻导航覆盖.
我可能会以完全错误的方式解决这个问题,如果是这样,请让我知道一个更好的方法.如果这种方法看起来不错,有人可以帮我理清新闻导航在布局和新闻视图中显示的原因.
谢谢你的时间
可靠的人
我正在尝试为JMS Serializer Bundle使用自定义处理程序
class CustomHandler implements SubscribingHandlerInterface
{
public static function getSubscribingMethods()
{
return array(
array(
'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
'format' => 'json',
'type' => 'integer',
'method' => 'serializeIntToJson',
),
);
}
public function serializeIntToJson(JsonSerializationVisitor $visitor, $int, array $type, Context $context)
{
die("GIVE ME SOMETHING");
}
}
Run Code Online (Sandbox Code Playgroud)
这什么都不做,也不会死.这就是我注册处理程序的方式
$serializer = SerializerBuilder::create()
->configureHandlers(function(HandlerRegistry $registry) {
$registry->registerSubscribingHandler(new MyHandler());
})
->addDefaultHandlers()
->build();
$json = $serializer->serialize($obj, 'json');
Run Code Online (Sandbox Code Playgroud)
我的处理程序从未被调用过,我无法操纵序列化数据.
我正在以这种方式测试控制器:
$crawler = $client->request('GET', 'lang/120');
Run Code Online (Sandbox Code Playgroud)
在print_r'ing $ crawler对象后,我可以看到目标URL是http:// localhost/lang/120.但是,我的目标主机是在我的机器上设置的虚拟主机,让我们说http://www.somehost.tld,我想使用它.我应该使用什么干净的手段进行单元测试来定位虚拟主机?
我已经尝试在我的phpunit.xml.dist文件中放入一个php变量并使用它:
<php>
<server name="HOSTNAME" value="http://www.somehost.tld/app.php/" />
</php>
Run Code Online (Sandbox Code Playgroud)
然后 :
$crawler = $client->request('GET', $_SERVER['HOSTNAME'] . 'lang/120');
Run Code Online (Sandbox Code Playgroud)
但这看起来很尴尬......是否有任何配置文件(config_test文件?)我应该放置该虚拟主机名?
感谢大家的帮助!
我之前用过这个;
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/gif "now plus 2 weeks"
// Lots omitted here
</IfModule>
Run Code Online (Sandbox Code Playgroud)
还有这个;
<IfModule mod_headers.c>
<filesMatch "\\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|JPG)$">
Header set Cache-Control "max-age=1209600"
</filesMatch>
// Lots omitted here
</IfModule>
Run Code Online (Sandbox Code Playgroud)
我可以按内容类型设置过期,我可以通过文件扩展名设置任何标题.
但这些似乎都不允许你按内容类型设置任何你想要的标题.
我想根据响应的内容类型设置缓存控制头 - 请注意,这与文件扩展名不同.我有"友好的URL",所以没有文件扩展名被捕获,filesMatch
因此没有文件扩展名,但内容类型是text/html
.
如何为特定内容类型设置缓存控制标头?
我的配置是
jms_serializer:
metadata:
auto_detection: true
directories:
NameOfBundle:
namespace_prefix: ""
path: "@VendorNameOfBundle/Resources/config/serializer"
Run Code Online (Sandbox Code Playgroud)
我的YML文件名为Entity.Project.yml
contains
Vendor\NameOfBundle\Entity\Project:
exclusion_policy: ALL
properties:
id:
expose: true
Run Code Online (Sandbox Code Playgroud)
我正在从Controller中加载序列化器
$serializer = SerializerBuilder::create()
->configureListeners(function(EventDispatcher $dispatcher) {
$dispatcher->addSubscriber(new ProjectSubscriber($this->container));
})
->addDefaultListeners()
->build();
Run Code Online (Sandbox Code Playgroud)
这完全忽略了我的YML文件并公开了Project中的所有字段.我已经清除了缓存.
但是如果我在没有自定义订阅者的情况下使用它,那么排除工作就可以了
$serializer = $this->get("jms_serializer");
Run Code Online (Sandbox Code Playgroud)
即使明确添加目录也不起作用
$serializer = SerializerBuilder::create()
->configureListeners(function(EventDispatcher $dispatcher) {
$dispatcher->addSubscriber(new ProjectSubscriber($this->container));
})
->addDefaultListeners()
->addMetadataDir(realpath($this->get('kernel')->getRootDir()."/../") . '/src/Vendor/NameOfBundle/Resources/config/serializer')
->build();
Run Code Online (Sandbox Code Playgroud)
关于如何定义这条路径的文档并不清楚.上面的方法没有错误,但没有拉入YML文件.以下方法错误并说该目录不存在;
$serializer = SerializerBuilder::create()
->configureListeners(function(EventDispatcher $dispatcher) {
$dispatcher->addSubscriber(new ProjectSubscriber($this->container));
})
->addDefaultListeners()
->addMetadataDir('@VendorNameOfBundle/Resources/config/serializer')
->build();
Run Code Online (Sandbox Code Playgroud)
如何让JMS Serializer查看我的YML文件以排除字段并使用订阅服务器?
我想在 Twig 中使用substr_count,是否已经存在任何东西?我想做这样的事情;
<?php
$text = 'This is a test';
echo strlen($text); // 14
echo substr_count($text, 'is'); // 2
Run Code Online (Sandbox Code Playgroud)
我可以进行扩展,但似乎这可能是我已经错过的内置功能。
我有一个扩展的Acl插件Zend_Controller_Plugin_Abstract
,这个插件处理我所有的Acl代码.
我想在这个插件中抛出一个Exception,例如Exception_Unauthorised
,然后在我的处理中ErrorController
,这样我就可以为不同的应用程序使用相同的Acl插件,并使用它ErrorController
来处理每个应用程序中的每个情况 - 如果需要的话.
问题是在插件中抛出异常并不会阻止原始Action执行.所以我最终得到了原始的Action输出和ErrorController
输出.
如何在插件中抛出异常以阻止原始Action发生?
情况1
// This throws the `Exception_NoPermissions`, but it does not get caught by
// `ErrorController`
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
parent::preDispatch($request);
throw new Exception_NoPermissions("incorrect permissions");
}
Run Code Online (Sandbox Code Playgroud)
案例2
// This behaves as expected and allows me to catch my Exception
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
parent::preDispatch($request);
try
{
throw new Exception_NoPermissions("incorrect permissions");
}
catch(Exception_NoPermissions $e)
{
}
}
Run Code Online (Sandbox Code Playgroud)
案例3
我认为这是问题所在,通过更改控制器.
public function preDispatch(Zend_Controller_Request_Abstract $request)
{ …
Run Code Online (Sandbox Code Playgroud) 我一直在谷歌和其他各种网站上寻找这个问题的答案几个小时没有运气.我使用PHPUnit为Zend Framework项目创建了一些单元测试.一切顺利,直到PHPUnit代码覆盖率报告的测试为止.此时我收到以下错误:
生成代码覆盖率报告,这可能需要一些时间.致命错误:在第32行的C:\ htdocs\ZendFWTutorials\ZendStorefront\library\SF\Plugin\Action.php中的非对象上调用成员函数pushStack()
此错误引用以下代码块:
public function
dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{
$stack = $this->getStack();
// category menu
$categoryRequest = new Zend_Controller_Request_Simple();
$categoryRequest->setControllerName('category')
->setActionName('index')
->setParam('responseSegment', 'categoryMain');
// push requests into the stack
$stack->pushStack($categoryRequest);
}
public function getStack()
{
if (null === $this->_stack) {
$front = Zend_Controller_Front::getInstance();
if (!$front->hasPlugin('Zend_Controller_Plugin_ActionStack'))
{
$stack = new Zend_Controller_Plugin_ActionStack();
$front->registerPlugin($stack);
} else {
$stack = $front->getPlugin('ActionStack');
}
$this->_stack = $stack;
}
return $this->_stack;
}
Run Code Online (Sandbox Code Playgroud)
这段代码来自我没有编写的库,因此可能会增加我的问题的复杂性,因为我不太可能理解发生了什么.我还不知道PHPUnit逻辑在创建代码覆盖率报告时正在做什么,所以我不知道如何解决问题.这个问题只发生在我运行PHPUnit并运行xdebug以在正常操作条件下跟踪此函数中的代码时.我有一种感觉,PHPUnit进入一个变量为null但在正常操作中$ stack和$ categoryRequest不为空的情况.
我的目录结构如下:
application
-----> bootstrap
-----> config
-----> layouts
-----> modules
--------> …
我想将一个(超过100个).sql文件导入到一个数据库中.我可以为一个人做这个
mysql -u root -p db_name < /tmp/export/data.sql
Run Code Online (Sandbox Code Playgroud)
但我有很多,所以我尝试了这个,但它没有说明"模糊的重定向"
mysql -u root -p db_name < /tmp/export/*
Run Code Online (Sandbox Code Playgroud)
我可以从命令行使用另一种方法来执行此操作吗?
php ×3
symfony ×3
import ×2
mysql ×2
phpunit ×2
apache ×1
apache2 ×1
content-type ×1
count ×1
doctrine-orm ×1
handler ×1
header ×1
navigation ×1
plugins ×1
substring ×1
twig ×1
unit-testing ×1
yaml ×1