ホームページ バックエンド開発 PHPチュートリアル Symfony2学习笔记之控制器用法详解_php实例

Symfony2学习笔记之控制器用法详解_php实例

Jun 07, 2016 pm 05:08 PM
コントローラ

本文实例讲述了Symfony2控制器用法。分享给大家供大家参考,具体如下:

一个controller是你创建的一个PHP函数,它接收HTTP请求(request)并创建和返回一个HTTP回复(Response)。回复对象(Response)可以是一个HTML页面,一个XML文档,一个序列化的JSON数组,一个图片,一个重定向,一个404错误或者任何你想要的内容。controller中可以包含任何渲染你页面内容的所需要的逻辑。

下面是一个controller最简单的例子,仅仅打印一个Hello world!

use Symfony\Component\HttpFoundation\Response;
public function helloAction()
{
 return new Response('Hello world!');
}

ログイン後にコピー

Controller的终极目标都是相同的那就是创建并返回一个Response对象。按照这个思路,你可以从request对象读取信息,加载数据库资源,发送email,或者在用户的Session中写入信息。但是所有情况下,Controller将最终都会返回一个Response对象并被分发会客户端。

比如如下情况:

Controller A 准备一个Response对象来表现网站homepage内容。
Controller B 从Request中读取slug参数从数据库中加载一个blog内容并创建一个Response对象来显示这个blog。如果slug在数据库中不存在,它将创建并返回一个带有404状态码的Response对象.

Controller C 处理一个从联系表单,它从Request对象中读取表单信息,保存联系信息到数据库并发邮件给管理员。最后,它创建一个Response对象重定向客户端浏览器到联系表单感谢页面。

Requests,Controller, Response的生命周期

Symfony2项目中处理的每一个Request都是经过了相同的简单生命周期。框架负责重复的任务,最终执行一个controller,该controller会包含你的应用程序代码:

1.每个Request都会被一个统一的前端控制器文件(比如,app.php,或者app_dev.php)处理,它会启动应用程序。
2.Router从Request中读取URI信息,并找到匹配它的Route,从该Route中读取_controller参数。
3.匹配成功的route的controller被执行,controller中的代码创建并返回一个Response对象。
4.HTTP头和生成的Response对象内容将会被发回客户端。

创建一个页面跟创建一个controller一样容易,创建一个路由来映射一个URL到该controller。

注意:尽管从名字上来看,前端控制器和controller差不多,其实它们是不同的。
一个前端控制器是一个存放于web目录下的PHP文件,多有的Request都会通过它被重定向。每一个应用程序都会有一个产品前端控制器app.php和一个开发用的前端控制器app_dev.php。你不需要编辑,查看或者担心它们。

看一个简单的Controller: 任何的PHP可调用内容(比如函数,对象方法或者一个Closure)都可以成为一个controller。Symfongy2中,一个controller通常为controller对象中一个单一的方法。Controllers通常也被称为actions。

// src/Acme/HelloBundle/Controller/HelloController.php
namespace Acme\HelloBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
class HelloController
{
 public function indexAction($name)
 {
  return new Response('<html><body>Hello '.$name.'!</body></html>');
 }
}

ログイン後にコピー

注意在这个例子中controller是indexAction方法,它存在于controller类(HelloController)中。不要混淆,之所以定义一个controller类(HelloController)只是为了方便组织多个controllers/actions在一起。一般情况下,一个controller类会有多个controllers/actions。

上面例子中的controller相当简单:

Namespace行是symfony2使用了PHP5.3的命名空间功能来为整个controller类指定命名空间。
use关键字导入了Response类,这是我们的controller必须返回的内容。

Controller类名字都是由其名字后面加Controller来定义,但是只有前面的部分才是其真正名字,为了统一起见,在后面统一添加Controller。 在路由配置时只会取前面部分。

Controller类中每个被用于真正controller的方法都会被添加一个统一的后缀Action,同样我们在配置其路由时也只会取前面部分而忽略掉Action。把它映射到某个URL。

每个controller方法的最后必然会创建一个Response对象并返回它。

映射一个URL到一个Controller方法:

上面例子中的controller方法返回一个简单的HTML页面。如果要在浏览器中访问到该页面,那么你需要为它创建一个route,把它映射到一个特定模式的URL上。

# app/config/routing.yml
hello:
 pattern:  /hello/{name}
 defaults:  { _controller: AcmeHelloBundle:Hello:index }

ログイン後にコピー

XML格式:

<!-- app/config/routing.xml -->
<route id="hello" pattern="/hello/{name}">
 <default key="_controller">AcmeHelloBundle:Hello:index</default>
</route>

ログイン後にコピー

PHP代码格式:

// app/config/routing.php
$collection->add('hello', new Route('/hello/{name}', array(
 '_controller' => 'AcmeHelloBundle:Hello:index',
)));

ログイン後にコピー

现在想URL /hello/ryan 将被映射到HelloController::indexAction() controller并将ryan传递给$name变量。

创建一个所谓的页面,其实就是创建一个controller方法和一个相关的route。

注意我们使用的指向controller方法的表示语法:AcmeHelloBundle:Hello:index

Symfony2使用了一个非常灵活的字符串声明来指向不同的controller。它告诉Symfony2在一个名叫AcmeHelloBundle的bundle中去查找一个叫HelloController的类,并执行它的indexAction()方法。在这个例子中,我们的路由配置直接写在了app/config/ 目录下,一个更好的组织方式是把你的路由放到各自的bundle中。

路由参数作为Controller方法参变量

你已经了_controller参数 AcmeHelloBundle:Hello:index指向一个位于AcmeHelloBundle中名叫HelloController::indexAction()的方法。有趣的是路由中参数都会被传递给该方法。

<&#63;php
// src/Acme/HelloBundle/Controller/HelloController.php
namespace Acme\HelloBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class HelloController extends Controller
{
 public function indexAction($name)
 {
  // ...
 }
}

ログイン後にコピー

上例中controller方法有一个唯一参数,$name, 它对应着route中定义的{name}占位符名称。事实上,等你执行你的controller时,Symfony2会匹配controller和route中每一个参数。

如果我修改一下Hello的路由定义:

YAML格式:

# app/config/routing.yml
hello:
 pattern:  /hello/{first_name}/{last_name}
 defaults:  { _controller: AcmeHelloBundle:Hello:index, color: green }

ログイン後にコピー

XML格式:

<!-- app/config/routing.xml -->
<route id="hello" pattern="/hello/{first_name}/{last_name}">
 <default key="_controller">AcmeHelloBundle:Hello:index</default>
 <default key="color">green</default>
</route>

ログイン後にコピー

PHP代码格式:

// app/config/routing.php
$collection->add('hello', new Route('/hello/{first_name}/{last_name}', array(
 '_controller' => 'AcmeHelloBundle:Hello:index',
 'color'  => 'green',
)));

ログイン後にコピー

这时候controller中可以获取这些参变量了:

public function indexAction($first_name, $last_name, $color)
{
 // ...
}

ログイン後にコピー

注意route定义中无论是占位符变量还是默认值变量都会被转化为controller方法的输入变量。当一个route匹配成功时,它会合并占位符和defaults到一个数组传递给controller。映射route参数到controller参数非常简单和灵活。它们从route到controller不匹配顺序。Symfony能够把route中参变量的名字映射到controller方法签名中的变量名字。比如{last_name} => $last_name,跟排列顺序无关。

Controller方法中的参数必须匹配route中定义的参数下面为hello route定义的controller方法将会抛出异常:

public function indexAction($last_name, $color, $first_name)
{
 // ..
}

ログイン後にコピー

如果我们把$foo变量变为可选变量,那么就不会抛异常了。

public function indexAction($first_name, $last_name, $color, $foo)
{
 // ..
}

ログイン後にコピー

并不是每一个在route中定义的参数都需要在controller中有与之对应的签名参变量的,比如hello route中定义的{$last_name} 如果对你没什么意义的话可以在controller中省略掉它。

public function indexAction($first_name, $color)
{
 // ..
}

ログイン後にコピー

反之,如果你在Controller签名中定义了变量,并且不是可选变量,那么必须在route中有与之对应的参数被定义。

在route定义中有一个特殊参数 _route, 它匹配route的名称(如上例中的hello)。虽然不常用,但是它也可以作为controller方法的一个参变量使用。

Request作为一个Controller方法签名变量

为了方便,你可能会让symfony传递你的Request对象作为参数到你的controller方法。这在你处理表单时尤为方便。

use Symfony\Component\HttpFoundation\Request;
public function updateAction(Request $request)
{
 $form = $this->createForm(...);
 $form->bindRequest($request);
 // ...
}

ログイン後にコピー

Controller基类

为了方便,Symfony2定义了一个Controller基类,包含了一些常用的controller任务并给了你的controller类访问任何你需要的资源的途径。通过继承该类,你可以获得许多帮助方法。

// src/Acme/HelloBundle/Controller/HelloController.php
namespace Acme\HelloBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class HelloController extends Controller
{
 public function indexAction($name)
 {
  return new Response('<html><body>Hello '.$name.'!</body></html>');
 }
}

ログイン後にコピー

在Symfony中controller并不一定非得继承Controller基类,因为它内部的帮助方法等都不是必须的。你也可以继承 Symfony\Component\DependencyInjection\ContainerAware 服务容器对象可以通过container属性来访问。同时你也可以把controller定义成service。

通用的Controller任务:

尽管Controller可以干任何事情,但是大部分的controller还是要重复的干一些基础的任务。比如 重定向,跳转,渲染模板和访问核心服务等。

重定向(redirecting)

如果你想重定向你的用户到另一个页面,可以使用redirect()方法。

public function indexAction()
{
 return $this->redirect($this->generateUrl('homepage'));
}

ログイン後にコピー

这里generateUrl()方法是一个帮助函数,用于根据给定的route生成相应的URL。默认情况下,redirect()方法执行一个302重定向。如果要执行301重定向,那么需要修改第二个参数如下:

public function indexAction()
{
 return $this->redirect($this->generateUrl('homepage'), 301);
}

ログイン後にコピー

redirect()方法其实是一个简化写法,真正的代码如下:

use Symfony\Component\HttpFoundation\RedirectResponse;
return new RedirectResponse($this->generateUrl('homepage'));

ログイン後にコピー

跳转(Forwarding)

你可以使用forward()方法很容易从一个controller到另一个controller内部。它执行的是一个内部子请求,来调用指定的controller,所以不会产生用户客户端浏览器的重定向。forward()方法返回的Response对象还将从原controller返回。

public function indexAction($name)
{
 $response = $this->forward('AcmeHelloBundle:Hello:fancy', array(
  'name' => $name,
  'color' => 'green'
 ));
 // further modify the response or return it directly
 return $response;
}

ログイン後にコピー

这里forward()方法使用了跟route配置中相同的字符串参数。这里传入数组参数会作为目标调用controller的参数。当将controller嵌入到模板时,也会使用同样的接口。目标调用的controller方法应该是如下定义:

public function fancyAction($name, $color)
{
 // ... create and return a Response object
}

ログイン後にコピー

就像为一个route创建一个controller一样,跟参数的顺序没关系。symfony2 会匹配索引键名称name到方法参数名称$name,即使顺序打乱也没关系。跟其它Controller基类方法一样,forward方法也仅仅是一个symfony2核心函数的快捷写法。一个跳转可以直接通过http_kernel服务来完成,返回一个Response对象。

$httpKernel = $this->container->get('http_kernel');
$response = $httpKernel->forward('AcmeHelloBundle:Hello:fancy', array(
 'name' => $name,
 'color' => 'green',
));

ログイン後にコピー

渲染模板:

虽然不是必须的,但是大部分controller将最终渲染一个负责生成为controller负责生成HTML的模板。renderView()方法会渲染一个模板并返回它的内容。这个返回内容可以用作创建Response对象,以供controller返回使用。

$content = $this->renderView('AcmeHelloBundle:Hello:index.html.twig', array('name' => $name));
return new Response($content);

ログイン後にコピー

上面的代码完全可以更进一步的使用下面的代码形式来写:

复制代码 代码如下:
return $this->render('AcmeHelloBundle:Hello:index.html.twig', array('name' => $name));

这两种情况下,AcmeHelloBundle中的模板Resources/views/Hello/index.html.twig都会被渲染。

renderview()方法是如下代码的快捷写法:

$templating = $this->get('templating');
$content = $templating->render('AcmeHelloBundle:Hello:index.html.twig', array('name' => $name));

ログイン後にコピー

当然也可以在子目录中渲染模板

$templating->render('AcmeHelloBundle:Hello/Greetings:index.html.twig', array('name' => $name));
// index.html.twig 存放于 Resources/views/Hello/Greetings 目录.

ログイン後にコピー

访问其它服务

只要是继承了Controller基类,你就可以通过get()方法访问symfony2的服务了。比如:

$request = $this->getRequest();
$templating = $this->get('templating');
$router = $this->get('router');
$mailer = $this->get('mailer');

ログイン後にコピー

Symfony2中还有无数的可用服务,同时也鼓励你定义自己的服务。要查看所有的服务,可以使用container:debug 命令行工具

$ php app/console container:debug

ログイン後にコピー

管理错误和404页面

当一些东西没有找到,你应该重置HTTP协议返回一个404 回复。要做到这个,你将抛出一个特殊类型的异常。如果你是继承了Controller基类,则:

public function indexAction()
{
 $product = // retrieve the object from database
 if (!$product) {
  throw $this->createNotFoundException('The product does not exist');
 }
 return $this->render(...);
}

ログイン後にコピー

createNotFoundException()方法创建一个特定的NotFoundHttpException对象,它最终触发404 HTTP回复。当然你从你的controller方法中可以抛出任何类型的Exception 类,Symfony2会自动返回一个500 HTTP回复代码。

throw new \Exception('Something went wrong!');

ログイン後にコピー

管理Session

Symfony2 提供了一个非常好的Session对象,你可以用它来在请求之间存贮有关用户的信息。默认情况下,Symfony2 通过PHP本身的Session保存属性到cookie。在任何controller中存储和获取Session信息将非常容易:

$session = $this->getRequest()->getSession();
// 为用户的后一个请求使用存储一个属性
$session->set('foo', 'bar');
// 在另一个controller中为另一个请求获取该属性
$foo = $session->get('foo');
// 设置用户的本地化语言
$session->setLocale('fr');

ログイン後にコピー

Flash 消息

你可以为特定的请求存储少量的消息到用户的Session。这在处理一个表单时非常有用,你想重定向和一个特定的信息显示在下一个请求中。这种类型的消息被称为Flash消息。比如,假设你处理一个表单提交:

public function updateAction()
{
 $form = $this->createForm(...);
 $form->bindRequest($this->getRequest());
 if ($form->isValid()) {
  // 做些排序处理
  $this->get('session')->setFlash('notice', 'Your changes were saved!');
  return $this->redirect($this->generateUrl(...));
 }
 return $this->render(...);
}

ログイン後にコピー

此例中,在处理完请求后,controller设置了一个notice flash消息并作了重定向。名字notice没什么意义,只是用于标识该消息。在下一个活动的模板中,下面的代码能够渲染这个notic消息:

Twig

{% if app.session.hasFlash('notice') %}
 <div class="flash-notice">
  {{ app.session.flash('notice') }}
 </div>
{% endif %}

ログイン後にコピー

PHP代码:

<&#63;php if ($view['session']->hasFlash('notice')): &#63;>
 <div class="flash-notice">
  <&#63;php echo $view['session']->getFlash('notice') &#63;>
 </div>
<&#63;php endif; &#63;>

ログイン後にコピー

这样设计,flash消息就能够为准确的某个请求存在了。他们一般被设计出来就是用于重定向的。

Response对象

作为一个Controller来说,唯一必须做到的是返回一个Response对象。

Response对象是一个PHP代码对HTTP Response的抽象。
HTTP Response是一个基于文本的消息有HTTP headers和 返回给客户端的内容组成。

//创建一个简单的Response对象,默认状态码为200
$response = new Response('Hello ' .$name, 200);
//创建一个基于JSON的Response对象,状态码也为200
$response = new Response(json_encode(array('name'=>$name)));
$response->headers->set('content-type','application/json');

ログイン後にコピー

其中headers属性是一个HeaderBag对象,内部包含许多有用的方法来读取和改变Response的头信息。头名字被标准化使用Content-Type 与content-type或者content_type效果等同。

请求对象Request

除了路由占位符的值以外,如果继承了Controller基类那么该controller还可以访问Request对象。

$request = $this->getRequest();
$request->isXmlHttpRequest(); // 判断是不是Ajax请求
$request->getPreferredLanguage(array('en','fr'));
$request->query->get('page'); // 获取$_GET 参数
$request->request->get('page'); //获取$_POST参数

ログイン後にコピー

跟Response对象一样,Request对象的头也保存在HeaderBag对象中,可以很方便的被访问。

总结思考:

无论何时,你创建一个页面,你最终需要为它写一些包含逻辑的代码。在Symfony中,这叫一个controller, 它是一个PHP的函数,它可以为了最后返回一个Response对象给用户可以做需要的任何事情。简单的说,你可以选择继承一个Controller基类,它包含了许多执行controller通用任务的快捷方法。比如,你不想把HTML代码写入你的controller, 你可以使用render()方法来渲染并返回一个模板内容。

希望本文所述对大家基于Symfony框架的PHP程序设计有所帮助。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 11 で Xbox One コントローラーを適切に調整する方法 Windows 11 で Xbox One コントローラーを適切に調整する方法 Sep 21, 2023 pm 09:09 PM

Windows がゲーム プラットフォームとして選ばれるようになったため、そのゲーム指向の機能を特定することがさらに重要になっています。その 1 つは、Windows 11 で Xbox One コントローラーを調整する機能です。組み込みの手動キャリブレーションを使用すると、ドリフト、ランダムな動き、またはパフォーマンスの問題を取り除き、X、Y、Z 軸を効果的に調整できます。利用可能なオプションが機能しない場合は、いつでもサードパーティの Xbox One コントローラー調整ツールを使用できます。確認してみましょう! Windows 11 で Xbox コントローラーを調整するにはどうすればよいですか?続行する前に、コントローラーをコンピューターに接続し、Xbox One コントローラーのドライバーを更新していることを確認してください。この作業中に、利用可能なファームウェアのアップデートもインストールします。 1. 風を利用する

Laravelをゼロから学ぶ:コントローラーメソッド呼び出しの詳細説明 Laravelをゼロから学ぶ:コントローラーメソッド呼び出しの詳細説明 Mar 10, 2024 pm 05:03 PM

Laravelをゼロから学ぶ:コントローラーメソッド呼び出しの詳細解説 Laravelの開発において、コントローラーは非常に重要な概念です。コントローラーはモデルとビューの間のブリッジとして機能し、ルートからのリクエストを処理し、対応するデータを表示のためにビューに返す責任を負います。コントローラー内のメソッドはルートから呼び出すことができます。この記事では、コントローラー内のメソッドの記述方法と呼び出し方法を詳しく紹介し、具体的なコード例を示します。まず、コントローラーを作成する必要があります。 Artisan コマンド ライン ツールを使用して、

Laravelコントローラーとは何ですか Laravelコントローラーとは何ですか Jan 14, 2023 am 11:16 AM

laravel では、コントローラー (Controller) は特定の機能を実装するために使用されるクラスであり、コントローラーは関連するリクエスト処理ロジックを別のクラスに結合できます。一部のメソッドは、特定の機能を実装するためにコントローラーに保存されます。コントローラーはルーティングを通じて呼び出され、コールバック関数は使用されなくなり、コントローラーは「app/Http/Controllers」ディレクトリに保存されます。

PHPでCodeIgniter4フレームワークを使用するにはどうすればよいですか? PHPでCodeIgniter4フレームワークを使用するにはどうすればよいですか? May 31, 2023 pm 02:51 PM

PHP は非常に人気のあるプログラミング言語であり、CodeIgniter4 は一般的に使用される PHP フレームワークです。 Web アプリケーションを開発する場合、フレームワークを使用すると、開発プロセスのスピードアップ、コードの品質の向上、メンテナンス コストの削減が可能になり、非常に役立ちます。この記事ではCodeIgniter4フレームワークの使い方を紹介します。 CodeIgniter4 フレームワークのインストール CodeIgniter4 フレームワークは、公式 Web サイト (https://codeigniter.com/) からダウンロードできます。下

Laravel スタディガイド: コントローラーメソッド呼び出しのベストプラクティス Laravel スタディガイド: コントローラーメソッド呼び出しのベストプラクティス Mar 11, 2024 am 08:27 AM

Laravel 学習ガイドでは、コントローラー メソッドの呼び出しは非常に重要なトピックです。コントローラーはルーティングとモデルの間のブリッジとして機能し、アプリケーションで重要な役割を果たします。この記事では、コントローラー メソッド呼び出しのベスト プラクティスを紹介し、読者の理解を助ける具体的なコード例を示します。まず、コントローラー メソッドの基本構造を理解しましょう。 Laravel では、コントローラー クラスは通常 app/Http/Controllers ディレクトリに保存され、各コントローラー クラスには複数のものが含まれます。

Yii フレームワークでコントローラーを使用して Ajax リクエストを処理する方法 Yii フレームワークでコントローラーを使用して Ajax リクエストを処理する方法 Jul 28, 2023 pm 07:37 PM

Yii フレームワークでは、コントローラーはリクエストの処理において重要な役割を果たします。通常のページ リクエストの処理に加えて、コントローラーを使用して Ajax リクエストを処理することもできます。この記事では、Yii フレームワークで Ajax リクエストを処理する方法を紹介し、コード例を示します。 Yii フレームワークでは、Ajax リクエストの処理は次の手順で実行できます。 最初の手順は、コントローラー (Controller) クラスを作成することです。 Yii フレームワークが提供する基本コントローラークラス yiiwebCo を継承できます。

Win10 イーサネット コントローラーの感嘆符が原因でインターネットにアクセスできない問題を解決するための解決策 Win10 イーサネット コントローラーの感嘆符が原因でインターネットにアクセスできない問題を解決するための解決策 Dec 23, 2023 pm 04:04 PM

Win10 システムを使用すると、イーサネット コントローラーに感嘆符が表示されることに多くのネチズンが気づくでしょう。これは、コプロセッサーとイーサネット コントローラーのドライバーが正しくインストールされていないことを意味します。デバイス マネージャーにあるドライバーを更新するだけです。更新して、その後、エディターが操作方法を教えます。 Win10 イーサネット コントローラーの感嘆符がインターネットにアクセスできない: 1. まず、デスクトップの「この PC」を右クリックし、プロパティを開きます。 2. 次に、「デバイスマネージャー」をクリックして「コントローラーウィンドウ」を開きます。 3. 次に、[ネットワーク アダプター] をクリックし、次のプログラムを見つけて、[プロパティ] を右クリックします。 4. 最後に、「ドライバーの更新」を選択し、最新バージョンをダウンロードしてインストールし、コンピューターを再起動します。

コントローラを使用して Yii フレームワークでファイルのアップロードとダウンロードを処理する方法 コントローラを使用して Yii フレームワークでファイルのアップロードとダウンロードを処理する方法 Jul 30, 2023 pm 12:25 PM

Yii フレームワークでファイルのアップロードとダウンロードを処理するためにコントローラー (コントローラー) を使用する方法 ファイルのアップロードとダウンロードは、多くの Web アプリケーションで非常に一般的な機能です。 Yii フレームワークでは、コントローラを通じてファイルのアップロードおよびダウンロード操作を処理できます。この記事では、Yii フレームワークでコントローラを使用してファイルをアップロードおよびダウンロードする方法を紹介し、対応するコード例を示します。 1. ファイルのアップロード ファイルのアップロードとは、ローカル コンピュータからサーバーにファイルを転送することを指します。

See all articles