私はPHPで新しいです& Symfony。私は働く同じ行動を作りました。 ここでは、個々のアクションを別々の機能に分ける方法を知りませんでした。 Symfony 3/PHP 7.1で実行してください。個々のアクションを別々の機能に分ける方法
<?php
// AppBundle/Controller/SuccessMYController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Entity\SuccessMY;
use AppBundle\Form\SuccessMYType;
/**
* @Route("/success")
*
*/
class SuccessMYController extends Controller
{
/**
*
* @Route("/new/{idTask}",
* name = "MY_success_new")
*/
public function newSuccessAction(Request $request, $idTask)
{
if (!$this -> get('security.authorization_checker') -> isGranted('IS_AUTHENTICATED_FULLY')) {
throw $this -> createAccessDeniedException();
}
$user1 = $this -> get('security.token_storage') -> getToken() -> getUser() -> getId();
// (1) load TASK data for a new Success
$em = $this -> getDoctrine() -> getRepository('EinsteMYBundle:TaskMY');
$taskData = $em
-> findOneBy([ 'id' => $idTask ]);
// (2) create fefault data
$newSuccess = new SuccessMY();
$newSuccess
-> setUserID($user1)
-> setEndTask(false);
// (3) display form
$form = $this -> createForm(SuccessMYType::class, $newSuccess);
$form -> handleRequest($request) -> getData($newSuccess);
// **********************************************
// (4) save after submit
if ($form -> isSubmitted() && $form->isValid()) {
// (4.5.1) The content of the confirmation message
$messageFrom = $this -> get('translator') -> trans('success.created');
// Data update newSuccess
// (4.5.2) Date assignment
$successNewDate = new \DateTime();
$newSuccess
-> setDateSuccess($successNewDate);
$successNewDate = $newSuccess -> getDateSuccess() -> format('Y-m-d H:i:s');
// (4.6.1) Increase the number
$taskData
-> setOwnCount($taskData -> getOwnCount() + 1);
// (4.6.3) TASK Setting status
if ($newSuccess -> getEndTask() == true) {
$taskData
-> setStatusTask(8);
$messageTask = $this -> get('translator') -> trans('task.status.succeed');
$messageFrom = $messageFrom . ' ' . $messageTask;
}
// **** (4.8) Activities in the database *****
// (4.8.1) Save newly created database success
$em2 = $this -> getDoctrine() -> getManager();
$em2 -> persist($newSuccess);
$em2 -> flush();
// (4.8.2) Query updating overrides Task with newSuccess
$sql
= "UPDATE task_MY t
INNER JOIN zz_tech_parent e
on t.id = e.idParent
SET
t.success_count = t.success_count + 1
WHERE
e.idTask = :parTaskId";
$params = [
'parTaskId' => $idTask,
];
$em4 = $this -> getDoctrine() -> getManager();
$phrase = $em4 -> getConnection() -> prepare($sql);
$phrase -> execute($params);
// (4.9) Return to task list
// And a message about the success of the operation
$this -> get('session') -> getFlashBag() -> add('msg', $messageFrom);
return
$this -> redirect($this -> generateUrl('MY_tasks_all'));
}
// (5) For bad data return to form
return $this -> render('EinsteMYBundle:SuccessMY:newSuccess.html.twig',
[
'form' => $form -> createView(),
'taskData' => $taskData,
]
);
}
// (...)
}
類似の機能にコードを送信する方法の例はどこにありますか? 新しいアクティビティを追加するときにコーディングができるだけ透明になるように、どのアクティビティを(できれば)分けるべきですか? 誰かが私を助けることができますか?
1のようなものに変数の名前を変更する必要がありますので、それは本当にリポジトリのインスタンスではなく、EntityManagerを作成します。 '$ em'は実際にTaskMYRepositoryです。 2:エンティティ(またはエンティティの設定/注釈を介してdb)にデフォルト値を設定することができます。4.5.1:あなたはtwigで翻訳を行うことができます。 4.5.2:2と同じです。最後の割り当て($ successNewDate = $ newS ...)は決して使用されません。 4.6.1/4.6.3はこれらが何であるか不明である。 $ em2と$ em4は同じですが、emを2回フェッチする必要はありません。 4.8.2:sql(dql)はリポジトリになければなりません。これの一部(現在のユーザーを新しいSuccessMYに追加したり、タスクの状態を変更するなど)は、イベント駆動型の設計に適合しているようです(変化にリスナーを持ち、ロジックを実行しています) – JimL
フォーム処理' - > getData($ newSuccess)'です。私はこれがモジュール化よりも「クリーンアップ」のほうに終わったことを認識しています。それは少なくとも助言のために – JimL
@JimLを開始するためのどこかにあります。どのようにuserIDのデフォルト値を設定しましたか、私は関数を読み込んでいますか? – user23123