我使用Symfony Flex进行了新的Symfony安装,新的骨架属于下一个Symfony 4目录结构.
我添加并配置了第一个第三方软件包:HWIOAuthBundle.该捆绑包用于通过Twitter使用两个秘密信息进行连接.
consumer_id我consumer_secret在config/packages/hwi_oauth.yaml文件中声明我和我的.
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
twitter:
type: twitter
client_id: XXXXXMyIdXXXXX
client_secret: XXXXXMyTopSecretKeyXXXXX
Run Code Online (Sandbox Code Playgroud)
我的申请工作正常.但我无法在github上提交我的秘密!
我想要一个hwi_oauth.yaml像这样的文件:
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
twitter:
type: twitter
client_id: '%twitter_consumer_id%'
client_secret: '%twitter_consumer_secret%'
Run Code Online (Sandbox Code Playgroud)
我阅读了有关新DotEnv包的Symfony4最佳实践.
使用环境变量虽然远非完美,但与我们目前的工作相比有很多好处.环境变量是管理依赖于环境的设置的更"标准"方式(例如,不需要管理parameters.yml.dist).
正如最佳实践中所建议的那样,我将这两行附加到.env文件:
TWITTER_CONSUMER_ID=XXXXXMyIdXXXXX
TWITTER_CONSUMER_SECRET=XXXXXMyTopSecretKeyXXXXX
Run Code Online (Sandbox Code Playgroud)
但是我遇到了这个错误:
您已请求不存在的参数"twitter_consumer_id".
我试着用%kernel.twitter_consumer_id%,%env.twitter_consumer_id%,%env(TWITTER_CONSUMER_ID)%没有更多的成功.
最后一个测试是返回此错误消息:
在渲染模板期间抛出了异常("未找到环境变量:"TWITTER_CONSUMER_ID".").
如何在参数文件中检索我的ENV变量hwi_oauth.yaml?
我正在使用gettext进行翻译的网站上工作.该网站正在其他机器的服务器上正常翻译但不在我的服务器上(OS X El Capitan版本10.11.6).我按照以下教程在mac上安装gettext:
链接到我遵循的教程
安装后,gettext仍然无法正常工作.有人可以帮我吗?
我试着搜索,但是我找到的所有例子和答案都无法开始工作.
phpBB有以下几行代码:
<!-- IF topicrow.S_FIRST_ROW or not topicrow.S_TOPIC_TYPE_SWITCH -->
<div class="forumbg<!-- IF topicrow.S_TOPIC_TYPE_SWITCH and (topicrow.S_POST_ANNOUNCE or topicrow.S_POST_GLOBAL) --> announcement<!-- ENDIF -->">
<div class="inner">
<ul class="topiclist">
<li class="header">
<dl class="row-item">
<dt<!-- IF S_DISPLAY_ACTIVE --> id="active_topics"<!-- ENDIF -->><div class="list-inner"><!-- IF S_DISPLAY_ACTIVE -->{L_ACTIVE_TOPICS}<!-- ELSEIF topicrow.S_TOPIC_TYPE_SWITCH and (topicrow.S_POST_ANNOUNCE or topicrow.S_POST_GLOBAL) -->{L_ANNOUNCEMENTS}<!-- ELSE -->{L_TOPICS}<!-- ENDIF --></div></dt>
<dd class="posts">{L_REPLIES}</dd>
<dd class="views">{L_VIEWS}</dd>
<dd class="lastpost"><span>{L_LAST_POST}</span></dd>
</dl>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我试图重新发布这部分(整行)
<dt<!-- IF S_DISPLAY_ACTIVE --> id="active_topics"<!-- ENDIF -->>
<div class="list-inner">
<!-- IF S_DISPLAY_ACTIVE -->{L_ACTIVE_TOPICS}
<!-- ELSEIF topicrow.S_TOPIC_TYPE_SWITCH and (topicrow.S_POST_ANNOUNCE or …Run Code Online (Sandbox Code Playgroud) {!! Form::open(array('route' => 'posts.store', 'data-parsley-validate' => '')) !!}
{{ Form::label('title', 'Title:') }}
{{ Form::text('title',old('title'), array('class' => 'form-control', 'required' => '', 'maxlength' => '255')) }}
{{ Form::label('slug', 'Slug:') }}
{{ Form::text('slug',old('slug'), array('class' => 'form-control', 'required' => '', 'minlength' => '5', 'maxlength' => '255') ) }}
{{ Form::label('category_id', 'Category:') }}
<select class="form-control" name="category_id">
@foreach($categories as $key=>$value)
<option value='{{ $key }}'>{{ $value }}</option>
@endforeach
</select>
{{ Form::label('tags', 'Tags:') }}
<select class="form-control select2-multi" name="tags[]" multiple="multiple">
@foreach($tags as $tag)
<option value='{{ $tag->id }}'>{{ $tag->name }}</option> …Run Code Online (Sandbox Code Playgroud) 我想更改Monolog频道。我的声明适用于某些类,但不适用于控制器。
这是我的新管理频道声明:
#config/packages/dev/monolog.yaml
monolog:
handlers:
admin:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%-admin.log"
level: debug
channels: ["admin"]
Run Code Online (Sandbox Code Playgroud)
通过添加标签,我可以将它与我的身份验证器一起成功使用:
#config/services.yaml
# The form guard authenticator for the admin access
app.security.admin_authenticator:
class: App\Security\AdminAuthenticator
autowire: true
tags:
- { name: monolog.logger, channel: admin}
Run Code Online (Sandbox Code Playgroud)
services.yaml文件的最后一行完成了这项工作,我的身份验证器不再登录应用程序频道,而是登录管理频道。
现在,我想将此通道与Admin子目录下的控制器一起使用,因此我在声明中添加了一个类似的标记:
#config/services.yaml
App\Controller\Admin\:
resource: '../src/Controller/Admin'
tags:
- 'controller.service_arguments'
- { name: monolog.logger, channel: admin}
Run Code Online (Sandbox Code Playgroud)
但是似乎没有影响。我仍在登录应用程序频道。(我做了一些验证,例如刷新缓存)。我找不到我的错误。
https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/cookbook/working-with-datetime.html
我尝试使用此代码来创建 UTC DateTime 类型。但是,代码没有被调用。
让我困惑的是这一部分:
use Doctrine\DBAL\Types\Type;
use DoctrineExtensions\DBAL\Types\UTCDateTimeType;
Type::overrideType('datetime', UTCDateTimeType::class);
Type::overrideType('datetimetz', UTCDateTimeType::class);
Run Code Online (Sandbox Code Playgroud)
没有解释应该在哪里调用此代码。它只说“在引导 ORM 之前”,经过几个小时的谷歌搜索后我仍然没有弄清楚这意味着什么,我现在陷入了死胡同。
我尝试将代码放在与 UTCDateTimeType 类相同的文件中,但这不起作用。
我必须简单实体:日志和用户。Log 与 Entity 有 ManyToOne 关系。
Log:
type: entity
repositoryClass: LogRepository
id:
id:
type: integer
generator:
strategy: AUTO
fields:
message:
type: string
manyToOne:
user:
targetEntity: User
joinColumns:
user_id:
referencedColumnName: id
Run Code Online (Sandbox Code Playgroud)
我的用例是显示日志列表和有关用户的一两个信息(例如他的姓名和他的邮件)
如果我使用该findall方法,Symfony 调试工具栏会显示 Doctrine 执行了大量查询。一个查询为我提供日志,并为每个用户执行一个查询!这当然不好,因为我可以看到一千个日志。我不想让我的数据库服务器过载。这个问题似乎很容易解决。但是我搜索了一段时间,结果似乎是“不良做法”。
所以我开始使用查询构建器在 LogRepository 类中编写一个新方法:
public function getLog(){
$qb = $this->createQueryBuilder('l')
->select('l')
->innerJoin(
'ApplicationSonataUserBundle:User', 'u',
Expr\Join::WITH,'l.user = u.id')
;
return $qb->getQuery()->getResult();
}
Run Code Online (Sandbox Code Playgroud)
我仍然有同样的问题。我已将方法上的选择参数更改为:
public function getLog(){
$qb = $this->createQueryBuilder('l')
->select('l','u')
->innerJoin('ApplicationSonataUserBundle:User','u',
Expr\Join::WITH,'l.user = u.id')
;
return $qb->getQuery()->getResult();
}
Run Code Online (Sandbox Code Playgroud)
尤里卡?好的,我只有一个查询,但我的方法不仅返回 Log,还返回 User...所以我的 Twig 模板崩溃了,因为我的循环包含 User,而不仅仅是 Log。当这是一个用户时,我的视图崩溃了,因为我想写消息字段。(Log.message …
抱歉我的问题很长。
如何在扩展 KernelTestCase 的服务测试中模拟实体管理器?
现在,解释和我的测试......
我使用的是Symfony3.2。我的应用程序是标准的。我有一些控制器,我使用 WebTestCase 来测试它们。
一般来说,我的控制器验证参数,调用服务/管理器,处理一些变量并将它们推送到视图,我的测试在扩展WebTestCase的测试中非常简单。
/**
* Test New Game Action
*/
public function testFooAction(){
//We mock the Service
$fooService = $this
->getMockBuilder(GameService::class)
->disableOriginalConstructor()
->getMock();
$fooService->expects(self::once())
->method('barMethod')
->willReturn($result);
//We create the client
$client = static::createClient();
$container = $client->getContainer();
//I put my mock here
$container->set('app.game-service', $fooService);
//I launch the request
$client->request('GET', '/foo');
//I handle the response
$response = $client->getResponse();
//I do some tests like this one
self::assertEquals(200, $response->getStatusCode());
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我没有调用 EntityManger,因为我使用Services和这些行来放置我的 …
我正在尝试执行并从我的过程中获取数据:
这是我的程序定义方式:
create or replace PROCEDURE SP_GET_MY_DATA(
IN_POP VARCHAR2,
IN_SEG VARCHAR2,
IN_DUR VARCHAR2,
IN_VIEW INTEGER,
IN_PAGE INTEGER,
VIEW_DATA_CUR OUT SYS_REFCURSOR) AS ...
Run Code Online (Sandbox Code Playgroud)
这是我的PHP代码,用于执行和从过程中获取数据:
$db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = JXYX.com)(PORT = 1521)))(CONNECT_DATA=(SID=DHSJKS)))";
$conn = ocilogon("XXXXXX","XXXXXXXX",$db);
$sql = 'BEGIN SP_GET_MY_DATA(:POP, :SEG, :DUR, :VIEW, :PAGE, :OUTPUT_CUR); END;';
$stmt = oci_parse($conn,$sql);
oci_bind_by_name($stmt,':POP',$pop);
oci_bind_by_name($stmt,':SEG',$seg);
oci_bind_by_name($stmt,':DUR',$dur);
oci_bind_by_name($stmt,':VIEW',$view);
oci_bind_by_name($stmt,':PAGE',$page);
$OUTPUT_CUR = oci_new_cursor($conn);
oci_bind_by_name($stmt,":OUTPUT_CUR", $OUTPUT_CUR, -1, OCI_B_CURSOR);
oci_execute($stmt, OCI_DEFAULT);
while ($data = oci_fetch_assoc($OUTPUT_CUR)) {
print_r($data);
}
Run Code Online (Sandbox Code Playgroud)
但是这样做我收到了这个错误:
oci_fetch_assoc():ORA-24374:在获取或执行之前定义未完成并获取".
我无法弄清楚我错过了什么.你能帮我吗?
我有一个使用flex和encore的Symfony4项目.我想补充一下.
所以我添加了tinymce项目:
$ yarn add tinymce
Run Code Online (Sandbox Code Playgroud)
我编辑了我的app.js文件:
require('../css/app.scss');
// Import TinyMCE
import tinymce from 'tinymce/tinymce';
// A theme is also required
import 'tinymce/themes/modern/theme';
// Any plugins you want to use has to be imported
import 'tinymce/plugins/paste';
import 'tinymce/plugins/link';
// Initialize the app
tinymce.init({
selector: 'textarea',
plugins: ['paste', 'link']
});
Run Code Online (Sandbox Code Playgroud)
我编译:
$ yarn run encore dev
Run Code Online (Sandbox Code Playgroud)
编译成功:
Running webpack ...
DONE Compiled successfully in 17600ms
I 8 files written to public\build
Done in …Run Code Online (Sandbox Code Playgroud) php ×6
symfony ×6
doctrine-orm ×2
symfony4 ×2
autowired ×1
gettext ×1
jquery ×1
laravel ×1
laravel-5 ×1
monolog ×1
oracle ×1
phpbb ×1
phpunit ×1
symfony-flex ×1
tinymce ×1
translation ×1
unit-testing ×1
yarnpkg ×1