[英]Why we use “Action” in Symfony2 controller's methods?
我剛剛開始研究symfony2書。 我想知道為什么我們命名控制器的函數Action
:
public function [something]Action() { // ...
在目前為止的書中的每個例子和我在網上看到的所有代碼Action
都是函數名。 它有什么理由嗎?
這非常有效:
<?php
// src/AppBundle/Controller/LuckyController.php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
class LuckyController extends Controller{
/**
* @Route("/lucky/number/{count}")
*/
public function countTESTING($count){
return new Response(
'<html><body>I DONT HAVE TO CALL THIS somethingACTION</body></html>
');
}
}
?>
我試過googline這個,但我沒有提到或推理為什么。 有人可以解釋為什么我們使用那個后綴?
這只是一個慣例。 您可以使用這些后綴,但也可以不使用它們。
如果你有
public function somethingAction()
在控制器中,您可以通過以下方式在路由配置中引用它:
index:
path: /path_for_something
defaults: { _controller: AppBundle:Index:something }
_controller
參數使用稱為邏輯控制器名稱的簡單字符串模式。 那么, AppBundle:Index:something
意思是:
但是,如果沒有此功能,您也可以這樣做。 Symfony非常靈活,它不會強迫你做任何事情。 這只是你必須做同樣事情的眾多方法之一。
如果你采用這個約定,你就更容易理解你的控制器中有哪些action
,其他開發人員很容易理解你的代碼,symfony2更容易在你的包中找到你的動作/控制器,這樣你就可以也是壓倒一切的控制器 。 這是最佳做法。
但如果您不想要這些好處,您也可以使用其完全限定的類名和方法:
index:
path: /something
defaults: { _controller: AppBundle\Controller\IndexController::indexAction }
但是,正如文件所說:
如果您遵循一些簡單的約定,邏輯名稱更簡潔,並允許更多的靈活性。
不,這不只是一個命名慣例。 它用於在每個控制器'action'方法之前或之后執行一些代碼。 與檢查一樣,用戶已登錄。它基於magic __call函數,該函數針對不存在或非公共方法調用執行。
$controller = new Posts();
$controller->index();
class Posts
{
public function __call($name, $args)
{
//run code before
call_user_func_array()[$this, "$nameAction"], $args);
//run code after
}
public function indexAction()
{
}
}
你必須為自己的行為命名
public function somethingAction(){}
因為您的路線指向控制器,以及您要調用的操作。
你也可以在你的控制器中擁有私人功能,你只能命名
private function something(){}
我說使用yml配置控制器,我不相信它在使用注釋時有所不同,但我的建議是使用yml配置控制器......真的!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.