Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 27

0
votes
answers
16 views
+10

Symfony上的Minio

0

所以我的一位同事推薦我使用Minio作爲我的文件存儲。Symfony上的Minio

我在研究它,但網絡上沒有足夠的資源讓我繼續前行。我找到了具有Amazon S3適配器的KNPGaufretteBundle。 Minio與Amazon S3兼容,我可以使用它嗎?

謝謝!

+0

Flysystem是PHP的主要文件系統抽象,它們的S3驅動也適用於數字海洋的空間,它與API兼容,因此我會考慮這一點。 Flysystem已經集成了大多數框架。 –

+0

我使用docker運行minio,現在當我嘗試上傳時,它說我的bucket dosent存在,事實上,我在minio瀏覽器上創建它。有沒有一種方法可以指定主機? – iamjc015

沙发
0
0

aws-sdk-php適用於minio,所以你應該可以使用minio的KNPGaufretteBundle。

您也可以查看laralvel支持。

0
votes
answers
40 views
+10

bootstrap_3_layout.html.twig在Symfony3

-1

如何安裝「bootstrap_3_layout.html.twig,...爲我的項目在3個版本的Symfonybootstrap_3_layout.html.twig在Symfony3

當我將這些文件複製到項目中,我得到錯誤:

'Unexpected character "&"' (Twig_Error_Syntax).

沙发
0
0

不要複製或過去的這些文件,而是配置TwigBundle使用它們作爲表單模板,使這種配置在config.yml文件

twig: 
    form_themes: 
     - bootstrap_3_layout.html.twig 

確保bootst說唱應用程序中使用

使用此

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" /> 

或者下載它,當我創建新的項目Symfony3用它在你的應用程序

+0

當這些文件安裝在我的項目?附:我嘗試了這些步驟。我加載這些文件,但得到錯誤... –

+0

它們默認包含在項目中,在這裏檢查'vendor/symfony/symfony/src/Symfony/Bridge/Twig/Resources/views/Form/bootstrap_3_layout.html.twig'和告訴我,如果你發現他們 –

+0

沒關係。謝謝 –

0
votes
answers
21 views
+10

Symfony 2 SQLSTATE連接被拒絕

1

我在連接數據庫時遇到問題。 我的網站託管在一臺服務器上,並連接到另一臺服務器上的遠程數據庫。 但它向我發送了以下錯誤:Symfony 2 SQLSTATE連接被拒絕

SQLSTATE [HY000] [2002] Connection refused Error

我沒有,但是,把準確的連接信息。我不明白爲什麼連接被拒絕..

parameters.yml:

parameters: 
database_host: **.**.**.** 
database_port: 3306 
database_name: zip 
database_driver: pdo_mysql 
database_user: root 
database_password: null 
mailer_transport: smtp 
mailer_host: 
mailer_user: 
mailer_password: 
secret: d87fdb6ecf4089df33360b187388e33c34e12f85 

我要提前致謝

沙发
0
0

確保用戶/密碼是正確的。您可以使用mysql命令行cli嘗試連接。

+0

我設法用putty連接到數據庫,密碼和我在parameters.yml中輸入的標識符。並且我在一個java程序中建立了一個連接,並且它可以工作。我不明白symfony有什麼問題 – Dax

11
votes
answers
33 views
+10

Symfony2 passing data between bundles & controllers

this is more of a 'best practice' question than an actual problem:

I'm working on a project in Symfony 2 and I've built a bundle to handle all of my webservices. Basically one controller takes some JSON data, sends it off to another controller to check it matches a described format, then off to another controller to handle the database calls and eventually back to the initial controller to return a JSON response.

I'm sending data between controllers by doing something like this:

$controller = new AcmemyBundleControllerDefaultController;
$response = $controller->function();

This works correctly, but I keep coming across one problem. In the controller I pass data to I need to instantiate AppKernel and call the boot function for any Symfony function to work. This to me seems a little bit silly which leads me to believe I may be doing this all wrong.

Any suggestions or tips appreciated!

EDIT/UPDATE Thank you all for the comments. I have set up my controllers as services, the services are working but I am still needing to manually boot/instantiate the kernel when I call a service from inside a service.

#config.yml
# API Services
services:
service.handler:
    class: AcmeAPIBundleControllerServicesController
    arguments:
        container: "@service_container"

service.definitions:
    class: AcmeAPIBundleControllerDefinitionController
    arguments:
        container: "@service_container"

From another bundles controller I can then call a function from either of those services without problem:

 $test = $this->get("service.handler")->testFunction();
 $test2 = $this->get("service.definitions")->anotherTestFunction();

Where I DO have a problem is if I call a function inside of one service, then try to call another service from inside that service I get the following PHP error

Fatal error: Call to a member function get() on a non-object in /vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php on line 188

I can avoid that error by using this function and calling it rather than using $this

    public function bootKernel(){
//boot kernel
    $controller = new AcmemyBundleControllerDefaultController; 
    $kernel = new AppKernel('dev', true);$kernel->loadClassCache(); 
    $kernel->boot(); 
    $controller->setContainer($kernel->getContainer());
    return($controller);    
}

I guess my solution 'works' but it certainly doesn't seem an efficient way to do things.

EDIT 2: If I stick this at the top of the class then modify the service call it seems to work... Still not sure if this is the best way to do things.

    protected $container;

public function __construct($container) {
    $this->container= $container;
}
up vote 10 down vote accepted favorite
沙发
+100
+50

I'd go down the controller-as-a-service route with the above. Say you have to call 3 methods as part of your processing. Let's call them foo(), bar() and something(). Each of these methods are in separate controllers:

namespace AcmeDemoBundleController;

class FooController
{
    public function __construct($container, ...)
    {
        $this->container = $container;
        // ... deal with any more arguments etc here
    }

    public function foo($params)
    {
        // ...
        return $x;
    }

    protected function get($service)
    {
        return $this->container->get($service);
    }
}

Ditto for the bar() and something() methods, each in their own controller. Then, add them to your application as a service. Eg in your config.yml (other methods available):

services:
    my.foo.service:
        class: AcmeFooBundleControllerFooController
        arguments:
            container: "@service_container"

See the Symfony docs for more details about how you can construct this entry, including injecting any dependencies such as an entity manager or similar. Now, you can get an instance of this from the container:

public function yourMainAction()
{
    // ...

    $newData = $this->get("my.foo.service")->fooAction($someData);

    // ...

    return new Response(json_encode($newData), ...);
}

Likewise again for BarController and SomethingController. The advantage now is that this service can be made available at any point in your application (whether via the container as above, or as an injected service), across bundles, without needing to instantiate the class manually yourself and provide any dependencies.

For more information about the container etc, the Symfony docs have a good section on it (referenced in the link above).

Edit: Adjusted the code example to include details of passing in arguments into the service. Also added a convenience get() method to retrieve services from the container.

謝謝你的回應,Rich。我實際上嘗試使用控制器作為服務,但遇到了完全相同的問題。如果我將一個控制器稱為服務,那麼從該控制器內部調用另一個控制器作為服務,我仍然需要每次啟動內核。我已經閱讀了文檔並且我不完全確定我需要設置哪些“依賴項”以避免每次都運行我的啟動函數。 - 格雷格3月5日在19:11

沒有實例化內核我得到這個錯誤:致命錯誤:在/ Users / greg / Repos / Acme / vendor / symfony / src / Symfony / Bundle / FrameworkBundle / Controller /中的非對像上調用成員函數get()第188行的Controller.php - 格雷格於12年3月5日19:12

您的捆綁包是否正確添加到您的內核?在AppKernel.php裡面?如果您已將它們添加到此處,它們應自動啟動。 - 富豪在12年5月5日20:18

是的,我已經將包含每個控制器的一個包添加到AppKernel。我已經設置了每個服務並試圖直接從控制器調用它們,然後它們工作。IE:服務指向foo控制器:$ testvar = $ this-> get(“service.foo”) - > testFunc(); 在foo控制器裡面我調用bar控制器$ testvar = $ this-> get(“service.bar”) - > testFunc(); 兩個都叫做直接工作,但是只要我把一個放在另一個里面,他們就不會在沒有啟動內核的情況下工作。希望這是有道理的... - 格雷格3月5日在21:24

@whistlergreg你可以調整你的問題或發表你正在做的事情的要點嗎? - 富豪在12年3月5日21:27

+10

I suggest to use controller as a service.

0
votes
answers
24 views
+10

如何檢查類別是否不存在?

0

我有一個博客帖子的網址如下:如何檢查類別是否不存在?

/blog/testing-url

這是鏈接到一個類別&該類別已被刪除!我現在想要的是顯示帖子。這篇文章的類別已被刪除,但我如何檢查類別是否不存在?我嘗試了以下方法

if(isset($ category))但這不起作用。

錯誤:

Fatal error: Call to a member function getCategory() on a non-object in /httpdocs/apps/mainv2/modules/blog/actions/actions.class.php on line 168

這是一段代碼,其中的錯誤發生:

public function executeEdit(sfWebRequest $request) { #edit video 
    ... 

    $this->nrpag = $request->getParameter('nrpag', 1); 
    $cats = array(); #video_cat 
    $c = new Criteria(); 
    $c->addAscendingOrderByColumn(VideoCatPeer::CATEGORY); 
    $vcats = VideoCatPeer::doSelect($c); 
    foreach ($vcats as $vcat) { 
     if($vcat != NULL){ 
      $cats[$vcat->getId()] = $vcat->getCategory(); 
     }else{ 
      continue; 
     } 
    } 
    $this->cats = $cats; 

    ... 
    } 
+0

*「if(isset($ category)),但這是行不通的。」* - 我看不到'$ category'的定義。 –

+0

@FunkFortyNiner添加代碼 –

+1

是的,您提供的代碼片段不會顯示$ category變量,也不會顯示調用的getCategory方法。你確定你從actions.class.php中取出了代碼嗎? –

沙发
0
1

可以檢查對象$vcat是否具有Category實體的實例,並做一些這種情況。例如:

foreach ($vcats as $vcat) { 
    if($vcat != NULL && $vcat->getCategory() instanceof Category){ 
     $cats[$vcat->getId()] = $vcat->getCategory(); 
    } 
} 

我還沒試過只是一個雖然。讓我知道如果工作

0
votes
answers
63 views
+10

FOSUserBundle窗體看起來很奇怪

0

我剛剛在我的Symfony項目上配置並準備了FOSUserBundle。但是,當我試圖表明寄存器觀點看起來像這樣:FOSUserBundle窗體看起來很奇怪

enter image description here

登記申請表(默認)應該是這樣的:

Blockquote

所有我配置的是Documentation,我不知道發生了什麼。

這是RegistrationFormType.html.twig從FOSUserBundle:

class RegistrationFormType extends AbstractType 
    { 
     ... 

     /** 
     * {@inheritdoc} 
     */ 
     public function buildForm(FormBuilderInterface $builder, array $options) 
     { 
      $builder 
       ->add('email', LegacyFormHelper::getType('SymfonyComponentFormExtensionCoreTypeEmailType'), array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle')) 
       ->add('username', null, array('label' => 'form.username', 'translation_domain' => 'FOSUserBundle')) 
       ->add('plainPassword', LegacyFormHelper::getType('SymfonyComponentFormExtensionCoreTypeRepeatedType'), array(
        'type' => LegacyFormHelper::getType('SymfonyComponentFormExtensionCoreTypePasswordType'), 
        'options' => array('translation_domain' => 'FOSUserBundle'), 
        'first_options' => array('label' => 'form.password'), 
        'second_options' => array('label' => 'form.password_confirmation'), 
        'invalid_message' => 'fos_user.password.mismatch', 
       )) 
      ; 
     } 
     ... 
    } 
+0

你需要看看https://symfony.com/doc/current/templating/overriding.html – zizoujab

+0

感謝您的回答,正如@ michal-g所說,我必須取消註釋該行。我之前做了壓倒一切的部分來找到這個問題。 – Mich

沙发
0
0

首先,你應該在config.yml 取消註釋行運行轉換組件


translator: { fallbacks: ["en"] }

和(就像在評論中說的)讀了關於壓倒性的意見

+0

就是這樣!它解決了我的問題。我沒有注意到該行,它的工作。謝謝Michal。 – Mich

+0

否 - 問題,但請 - 如果這anwser幫助你,標記anwser爲接受:) –

+0

當然,我剛剛接受它作爲解決方案,檢查它! ;-) – Mich

0
votes
answers
23 views
+10

從控制器獲取值以形成symfony 3

0

我不知道爲什麼我無法從控制器的變量獲取窗體上的值。從控制器獲取值以形成symfony 3

我的控制器:

public function indexAction(Request $request,$id){ 
    $ac = new Usersacademi(); 
    $form = $this->createForm(UsersacademiType::class,$ac,array('id'=>$id)); 
    $form->handleRequest($request); 

    if($form->isValid()){ 
     $ac->setIdacademicprogram($form->get("idacademicprogram")->getData()); 
     $ac->setIduser($form->get("iduser")->getData()); 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($ac); 
     $flush = $em->flush(); 
    } 
    else{ 
    } 


    return $this->render("AppBundle:admin:apteacher.html.twig", array(
     "form" => $form->createView() 
    )); 
} 

我的形式:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('idacademicprogram', EntityType::class, array(
      "required"=>"required", 
      'class' => 'AppBundle:Academicprogram', 
      'choice_label' => 'name' 
     )) 
     ->add('iduser', NumberType::class, array("required"=>"required", 
      "data" =>$options["id"], 
      "attr"=>array(
      "class" => "form-iduser form-control" 
     ))); 
} 

而且我得到這個錯誤:

The option "id" does not exist. Defined options are: "action", "allow_extra_fields", "attr", "auto_initialize", "block_name", "by_reference", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_token_id", "csrf_token_manager", "data", "data_class", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "inherit_data", "invalid_message", "invalid_message_parameters", "label", "label_attr", "label_format", "mapped", "method", "post_max_size_message", "property_path", "required", "translation_domain", "trim", "upload_max_size_message", "validation_groups".

+1

你的UsersacademiType :: configureOptions()是什麼樣的? http://symfony.com/doc/3.3/form/create_custom_field_type.html#defining-the-field-type – Cerad

沙发
0
1

申報setDefaultOptions空數組。

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'YourEntity', 
     'id' => array(), 
    )); 
} 
0
votes
answers
42 views
+10

Symfony2 DBAL更新方法返回0

0

我收到一個奇怪的結果,其中更新方法(http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#update)調用激活/停用mySQL數據庫中的站點用戶帳戶有時不更新並返回0.這裏是代碼:Symfony2 DBAL更新方法返回0

$user_id = '198'; 
$sqlSetStmnt= [ 'activation_code' => NULL, 'active' => 0 ]; 
$conn = $this->get('database_connection'); 

try { 

    $result = $conn->update('users', $sqlSetStmnt,[ 'id' => (int)$user_id ]); 

} 
catch(Exception $e) { 

    $error = $e->getMessage(); 
    throw new Exception('update user account data function -- ' . 
         'error: ' . $error . ' - ' . 
         'unable to update your account!'); 

} // End of catch(Exception) block. 

if(($result === FALSE) || ($result !== 1)) { 

    throw new Exception('update user account data function -- ' . 
         'update return value: ' . $result . ' - ' . 
         'unable to update your account!'); 

} // if(($result === FALSE) || ($result !== 1)) ... 

用戶表具有ID INT(11)柱,其是主密鑰,活性 TINYINT(1)柱,和activation_code VARCHAR(40)NULL列。

請注意$ USER_ID變量包含的「198」的字符串值,但在創建$ sqlSetStmnt值時,它被轉換爲int。

檢查的用戶表證實,有一個在用戶表中的一行與198在更新呼叫的時間ID列值。

帳戶運行更新呼叫時使用具有足夠的權限更改行活躍activation_code列值。

系統中沒有其他用戶或訪問數據庫,因此行上沒有任何鎖。

我使用X-調試檢查代碼,和的$ USER_ID$ sqlSetStmnt變量的值已正確設置爲我的預期值,即$結果設置爲0更新方法,並且更新方法調用不拋出異常。

順便說一句,有沒有必要使用變量綁定,因爲在$ USER_ID$ sqlSetStmnt變量的值不輸入由用戶,所以沒有可能性SQL注入的,或緩衝區溢出。

是否有某種方式從DBAL獲取有關爲什麼update方法返回0的信息?

謝謝。

+0

update返回實際更新的記錄數。你是說它實際上正在改變記錄並返回0嗎? – Cerad

+0

不,記錄似乎沒有更新。但是,由於有一行具有匹配的id列值,並且id列是該表的主鍵,所以我預計應該更新一行並將結果設置爲1而不是零。 –

+0

只有當activation_code不爲空和/或活動值不爲零時,該行纔會更新。基本的SQL數據庫東西。 – Cerad

沙发
0
0

解決這個問題之前,我切換來自:

$result = $conn->update('users', $sqlSetStmnt, [ 'id' => (int)$user_id ]); 

到:

$sqlUpdateStmnt = 'UPDATE `users` SET field = value ' . 
        'WHERE `id` = ' . $user_id; 
$result = $conn->executeUpdate($sqlUpdateStmnt); 

,並得到完全相同的結果,其中一些更新將返回0行時有絕對是排在用戶表的id與$ user_id的值匹配。

我通過獲取現有行,然後只在set-clause中的字段與表中的同一列不同時更新行來解決此問題。

這告訴我,0返回值不是沒有匹配的行,而是更新沒有任何行的影響。

所以這個問題不是一個錯誤,就像誤解結果一樣。但是,如果使用update()方法來確定何時由於沒有匹配的行以及何時不做更改而導致更新失敗,那麼問題仍然存在。

我最終解決的方案是以預取爲代價來解決此問題,以驗證更新是否會影響行。就我而言,對於多用戶數據庫應用程序,預取實際上不成問題,因爲在更新嘗試進行更改之前,要更新的行可能已被其他用戶刪除。但是,如果兩個更新方法都更清楚地解釋了這一點,並且返回不同的值:0表示沒有受到影響的行,而FALSE表示沒有找到行。

0
votes
answers
58 views
+10

Symfony 4 AuthenticationUtils

2

我想創建一個基於symfony.com教程的symfony 4用戶登錄。Symfony 4 AuthenticationUtils

我用下面的代碼使用了基本的services.yaml文件。

https://symfony.com/doc/current/security/form_login_setup.html

public function loginAction(Request $request, Twig_Environment $twigRenderer,AuthenticationUtils $authUtils) 
{ 

    // get the login error if there is one 
    $error = $authUtils->getLastAuthenticationError(); 

    // last username entered by the user 
    $lastUsername = $authUtils->getLastUsername(); 


    return new response($twigRenderer->render('security/login.html.twig', array(
     'last_username' => $lastUsername, 
     'error'   => $error, 
     ) 
    )); 
} 

Errror:

控制器 「應用程序控制器 SecurityController ::在loginAction()」 要求您提供的 「$ authUtils」 參數的值。參數是可爲空的,並且沒有提供空值,沒有提供默認值,或者因爲在這之後有一個非可選參數。

我不知道如何解決這個問題。有人有建議嗎?

+0

我在4.0上遇到了同樣的問題,下面的兩條建議無效。我也嘗試注入構造函數(應該不重要),但結果相同。很奇怪,因爲我在測試3.4時遇到了同樣的問題,但最終得到了它的工作。這些修補程序是否適用於您@Erik –

沙发
0
2

我是同樣的問題..嘗試運行命令:

composer require security 
板凳
0
0

這些添加到您的services.yml解決這個錯誤:

AppBundleController: 
    resource: '../../src/AppBundle/Controller' 
    public: true 
    tags: ['controller.service_arguments'] 

退房這個問題: simple login form using symfony

希望得到這個幫助。

+0

這只是將控制器添加到依賴項注入中。這裏的問題是,'AuthenticationUtils'沒有被注入。可能是因爲安全組件(如@Guhh)建議缺失。 – wawa

地板
0
0

我有點晚了,但仍然在這裏添加其他引用。

請將autowire: true添加到您的控制器服務聲明中。 Symfony會自動爲你注入方法參數。

0
votes
answers
41 views
+10

實體類型的默認值

0

我在我的表單中有一個EntityType,我想設置一個默認的選定值,這可能嗎?實體類型的默認值

這是我在我的FormType代碼:

->add('pays', EntityType::class, [ 
      'class' => Pays::class, 
      'choice_label' => function (Pays $pays) { 
       return $pays->getNomFrFr(); 
      }, 
     ]) 

在HTML比賽中選擇的每個選項在我的數據庫中的ID值:

<label for="boutique_pays" class="required">Pays</label><select id="boutique_pays" name="boutique[pays]"> 
    <option value="1">Afghanistan</option> 
    <option value="2">Albanie</option> 
    <option value="3">Antarctique</option> 
    <option value="4">Algérie</option> 
    ... 
    <option value="237">Wallis et Futuna</option> 
    <option value="238">Samoa</option> 
    <option value="239">Yémen</option> 
    <option value="240">Serbie-et-Monténégro</option> 
    <option value="241">Zambie</option> 
</select> 

我想設置的選擇值'75'(法國),這可能嗎?

在此先感謝

+0

[文件](HTTPS添加your_default_value空數組: //symfony.com/doc/current/reference/forms/types/entity.html#data)和[可能的解決方案](https://stackoverflow.com/questions/19577982/set-default-value-for-entity- type-in??-symfony2) – maches

沙发
0
0

您可以設置在控制器指定的操作選擇框的值。你不能直接設置形式。

$form->setEntityType($entity); 
+0

我得放函數setEntityType的參數中的值'75'? –

+0

您可以從數據庫中找到75條記錄的實體。然後在setEntityType()中設置它的實體。 –

板凳
0
0

當創建表單類型時,通過EntityManager和默認選擇objectID。

$repository = $this->getDoctrine()->getRepository(YourClass)->find($id); 
$yourDefaultValue = $repository->getId(); 


$form = $this->createForm(new YourTypeType($entityManager), $yourEntity, array(
      'action' => $this->generateUrl('route_create'), 
      'method' => 'POST', 
      'your_default_value' => $yourDefaultValue, 
     )); 

在表單中添加構造type.then更換你的代碼...

private $em; 

    public function __construct($em) { 
     $this->em = $em; 
    } 

    ->add('pays', EntityType::class, [ 
     'class' => Pays::class, 
     'choice_label' => function (Pays $pays) { 
      return $pays->getNomFrFr(); 
     }, 
     'data'=>$this->em->getReference("YourEntity",$options['your_default_value']) 

    ]) 

最後,在你的setDefaultOptions

public function setDefaultOptions(OptionsResolverInterface 
$resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'YourEntity', 
      'your_default_value' => array() 
     )); 
    }