Jadual Kandungan
yii源码分析4——非核心类的导入注册,yii源码
Rumah pembangunan bahagian belakang tutorial php yii源码分析4——非核心类的导入注册,yii源码_PHP教程

yii源码分析4——非核心类的导入注册,yii源码_PHP教程

Jul 13, 2016 am 09:57 AM
yii menganalisis import mendaftar Kod sumber daripada baik hati

yii源码分析4——非核心类的导入注册,yii源码

转载请注明: TheViper http://www.cnblogs.com/TheViper 

在yii源码分析1中说到spl_autoload_register注册给定的函数作为 __autoload 的实现,在这里是autoload().

<span>public</span> <span>static</span> <span>function</span> autoload(<span>$className</span><span>) {
        </span><span>include</span> self::<span>$_coreClasses</span> [<span>$className</span><span>];
     }</span>
Salin selepas log masuk

实际上这个autoload()是没有考虑非核心文件的引入的。比如,在app文件夹经常会有自定义的一些重要文件夹,比如'application.utils.*(工具类),'application.filters.*'(过滤类),'application.validators.*'(校验类)等。

在实际用的时候,是不用一个一个include的,直接new就可以了,yii已经帮我们做了include的工作。而这个工作就是在autoload()里面做的。

上面的代码很显然没有考虑非核心文件的引入,这是我的疏忽。

那yii是怎么帮我们引入非核心文件的?

这要从CApplication说起。

<span>abstract</span> <span>class</span> CApplication <span>extends</span><span> CModule {
    </span><span>public</span> <span>function</span> __construct(<span>$config</span> = <span>null</span><span>) {
        </span><span>if</span> (<span>is_string</span> ( <span>$config</span><span> ))
            </span><span>$config</span> = <span>require</span> (<span>$config</span><span>);
        Yii</span>::setApplication ( <span>$this</span> );<span>//</span><span>保存整个app实例</span>
        <span>if</span> (<span>isset</span> ( <span>$config</span> ['basePath'<span>] )) {
            </span><span>$this</span>->setBasePath ( <span>$config</span> ['basePath'<span>] );
            </span><span>unset</span> ( <span>$config</span> ['basePath'<span>] );
        } </span><span>else</span>
            <span>$this</span>->setBasePath ( 'protected'<span> );
        </span><span>//</span><span>设置别名,后面就可以用application表示basePath了</span>
        Yii::setPathOfAlias ( 'application', <span>$this</span>-><span>getBasePath () );
        </span><span>//</span><span>钩子,模块 预 初始化时执行,子类实现。不过这时,配置还没有写入框架</span>
        <span>$this</span>-><span>preinit ();
        </span><span>$this</span>-><span>registerCoreComponents ();
        </span><span>//</span><span>父类实现</span>
        <span>$this</span>->configure ( <span>$config</span><span> );
        </span><span>//</span><span>加载静态应用组件</span>
        <span>$this</span>-><span>preloadComponents ();
        </span><span>//</span><span>这才开始初始化模块</span>
        <span>$this</span>-><span>init ();
    }</span>
Salin selepas log masuk

注意到里面的$this->configure ( $config );,$config是传入的配置文件,是一个数组,非核心文件的定义就是在这里面,比如引入工具类文件夹

<?<span>php
</span><span>return</span> <span>array</span><span> (
    </span>'basePath' => <span>dirname</span> ( <span>__FILE__</span> ) . DIRECTORY_SEPARATOR . '..',
    'import' => <span>array</span><span> (
        </span>'application.utils.*'<span>
    )
    );
</span>?> 
Salin selepas log masuk

然后在父类CModule

    <span>public</span> <span>function</span> configure(<span>$config</span><span>) {
        </span><span>if</span> (<span>is_array</span> ( <span>$config</span><span> )) {
            </span><span>foreach</span> ( <span>$config</span> <span>as</span> <span>$key</span> => <span>$value</span><span> )
                </span><span>$this</span>-><span>$key</span> = <span>$value</span><span>;
        }
    }</span>
Salin selepas log masuk

这里yii很"狡猾",它在CModule的父类CComponent中重写了__set()

    <span>public</span> <span>function</span> __set(<span>$name</span>,<span>$value</span><span>)
    {
        </span><span>$setter</span>='set'.<span>$name</span><span>;
        </span><span>if</span>(<span>method_exists</span>(<span>$this</span>,<span>$setter</span><span>))
            </span><span>return</span> <span>$this</span>-><span>$setter</span>(<span>$value</span><span>);
        </span><span>else</span>....<span>
    }</span>
Salin selepas log masuk

可以看到,如果CModule中如果有设置yii指定参数(比如import)的方法,就会调用它,而我之前裁剪的时候,把CModule中的setImport()删掉了。

另外可以看到basePath, params, modules, import, components 是yii保留的参数名。

    <span>public</span> <span>function</span> setImport(<span>$aliases</span><span>)
    {
        </span><span>foreach</span>(<span>$aliases</span> <span>as</span> <span>$alias</span><span>)
            Yii</span>::import(<span>$alias</span><span>);
    }</span>
Salin selepas log masuk

然后是YiiBase里面的import()

    <span>public</span> <span>static</span> <span>function</span> import(<span>$alias</span>, <span>$forceInclude</span> = <span>false</span><span>) {
        </span><span>if</span> (<span>isset</span> ( self::<span>$_imports</span> [<span>$alias</span>] )) <span>//</span><span>是否已经存在路径</span>
            <span>return</span> self::<span>$_imports</span> [<span>$alias</span><span>];
        
        </span><span>if</span> (<span>class_exists</span> ( <span>$alias</span>, <span>false</span> ) || <span>interface_exists</span> ( <span>$alias</span>, <span>false</span> ))<span>//</span><span>类是否已经定义,针对如urlManager这样的已定义于$_coreClasses[]的类</span>
            <span>return</span> self::<span>$_imports</span> [<span>$alias</span>] = <span>$alias</span><span>;
        </span><span>if</span> ((<span>$pos</span> = <span>strrpos</span> ( <span>$alias</span>, '.' )) === <span>false</span>)         <span>//</span><span>直接是文件名</span>
<span>        {
            </span><span>//</span><span> try to autoload the class with an autoloader if $forceInclude is true</span>
            <span>if</span> (<span>$forceInclude</span> && (Yii::autoload ( <span>$alias</span>, <span>true</span> ) || <span>class_exists</span> ( <span>$alias</span>, <span>true</span><span> )))
                self</span>::<span>$_imports</span> [<span>$alias</span>] = <span>$alias</span><span>;
            </span><span>return</span> <span>$alias</span><span>;
        }
        
        </span><span>$className</span> = ( <span>string</span> ) <span>substr</span> ( <span>$alias</span>, <span>$pos</span> + 1<span> );
        </span><span>$isClass</span> = <span>$className</span> !== '*'<span>;
        </span><span>//</span><span>是否为路径+类名</span>
        <span>if</span> (<span>$isClass</span> && (<span>class_exists</span> ( <span>$className</span>, <span>false</span> ) || <span>interface_exists</span> ( <span>$className</span>, <span>false</span><span> )))
            </span><span>return</span> self::<span>$_imports</span> [<span>$alias</span>] = <span>$className</span><span>;
        </span><span>//</span><span>获取真实路径</span>
        <span>if</span> ((<span>$path</span> = self::getPathOfAlias ( <span>$alias</span> )) !== <span>false</span><span>) {
            </span><span>//</span><span>是否以*结尾,如application.utils.*</span>
            <span>if</span> (<span>$isClass</span><span>) {
                </span><span>if</span> (<span>$forceInclude</span><span>) {
                    </span><span>if</span> (<span>is_file</span> ( <span>$path</span> . '.php'<span> ))
                        </span><span>require</span> (<span>$path</span> . '.php'<span>);
                    </span><span>else</span>
                        <span>throw</span> <span>new</span> CException ( Yii::t ( 'yii', 'Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.', <span>array</span><span> (
                                </span>'{alias}' => <span>$alias</span><span> 
                        ) ) );
                    self</span>::<span>$_imports</span> [<span>$alias</span>] = <span>$className</span><span>;
                } </span><span>else</span><span>
                    self</span>::<span>$classMap</span> [<span>$className</span>] = <span>$path</span> . '.php'<span>;
                </span><span>return</span> <span>$className</span><span>;
            } </span><span>else</span>             <span>//</span><span> a directory</span>
<span>            {
                </span><span>if</span> (self::<span>$_includePaths</span> === <span>null</span><span>) {
                    self</span>::<span>$_includePaths</span> = <span>array_unique</span> ( <span>explode</span> ( PATH_SEPARATOR, <span>get_include_path</span><span> () ) );
                    </span><span>if</span> ((<span>$pos</span> = <span>array_search</span> ( '.', self::<span>$_includePaths</span>, <span>true</span> )) !== <span>false</span><span>)
                        </span><span>unset</span> ( self::<span>$_includePaths</span> [<span>$pos</span><span>] );
                }
                
                </span><span>array_unshift</span> ( self::<span>$_includePaths</span>, <span>$path</span><span> );
                
                </span><span>if</span> (self::<span>$enableIncludePath</span> && <span>set_include_path</span> ( '.' . PATH_SEPARATOR . <span>implode</span> ( PATH_SEPARATOR, self::<span>$_includePaths</span> ) ) === <span>false</span><span>)
                    self</span>::<span>$enableIncludePath</span> = <span>false</span><span>;
                </span><span>return</span> self::<span>$_imports</span> [<span>$alias</span>] = <span>$path</span><span>;
            }
        }
    }</span>
Salin selepas log masuk

一系列的判断,最后走到最后的else,将path写入到$_imports,这时仍然没有include.

include在autoload()

    <span>public</span> <span>static</span> <span>function</span> autoload(<span>$className</span><span>)
    {
        </span><span>//</span><span> use include so that the error PHP file may appear</span>
        <span>if</span>(<span>isset</span>(self::<span>$classMap</span>[<span>$className</span><span>]))
            </span><span>include</span>(self::<span>$classMap</span>[<span>$className</span><span>]);
        </span><span>elseif</span>(<span>isset</span>(self::<span>$_coreClasses</span>[<span>$className</span><span>]))
            </span><span>include</span>(self::<span>$_coreClasses</span>[<span>$className</span><span>]);
        </span><span>else</span><span>
        {
            </span><span>//</span><span> include class file relying on include_path</span>
            <span>if</span>(<span>strpos</span>(<span>$className</span>,'\\')===<span>false</span>)  <span>//</span><span> class without namespace</span>
<span>            {
                </span><span>if</span>(self::<span>$enableIncludePath</span>===<span>false</span><span>)
                {
                    </span><span>foreach</span>(self::<span>$_includePaths</span> <span>as</span> <span>$path</span><span>)
                    {
                        </span><span>$classFile</span>=<span>$path</span>.DIRECTORY_SEPARATOR.<span>$className</span>.'.php'<span>;
                        </span><span>if</span>(<span>is_file</span>(<span>$classFile</span><span>))
                        {
                            </span><span>include</span>(<span>$classFile</span><span>);
                            </span><span>break</span><span>;
                        }
                    }
                }
                </span><span>else</span>
                    <span>include</span>(<span>$className</span>.'.php'<span>);
            }
            </span><span>return</span> <span>class_exists</span>(<span>$className</span>,<span>false</span>) || <span>interface_exists</span>(<span>$className</span>,<span>false</span><span>);
        }
        </span><span>return</span> <span>true</span><span>;
    }</span>
Salin selepas log masuk

 

如果需要include的是非核心文件,那这里的$className只是一个alias,即文件名的前缀。

裁剪的yii http://files.cnblogs.com/TheViper/framework.zip

如果您觉得本文的内容对您有所帮助,您可以打赏我:

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/979000.htmlTechArticleyii源码分析4——非核心类的导入注册,yii源码 转载请注明: TheViperhttp://www.cnblogs.com/TheViper 在yii源码分析1中说到spl_autoload_register注册给定...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mendaftar berbilang akaun di Xiaohongshu? Adakah saya akan ditemui jika saya mendaftar berbilang akaun? Bagaimana untuk mendaftar berbilang akaun di Xiaohongshu? Adakah saya akan ditemui jika saya mendaftar berbilang akaun? Mar 25, 2024 am 09:41 AM

Sebagai platform yang menyepadukan rangkaian sosial dan e-dagang, Xiaohongshu telah menarik lebih ramai pengguna untuk menyertainya. Sesetengah pengguna berharap untuk mendaftar berbilang akaun untuk pengalaman yang lebih baik berinteraksi dengan Xiaohongshu. Jadi, bagaimana untuk mendaftar berbilang akaun di Xiaohongshu? 1. Bagaimana untuk mendaftar berbilang akaun di Xiaohongshu? 1. Gunakan nombor telefon mudah alih yang berbeza untuk mendaftar Pada masa ini, Xiaohongshu terutamanya menggunakan nombor telefon bimbit untuk mendaftar akaun. Pengguna kadangkala cuba membeli berbilang kad nombor telefon mudah alih dan menggunakannya untuk mendaftar berbilang akaun Xiaohongshu. Walau bagaimanapun, pendekatan ini mempunyai beberapa had, kerana membeli berbilang kad nombor telefon mudah alih adalah menyusahkan dan mahal. 2. Gunakan e-mel untuk mendaftar Selain nombor telefon bimbit anda, e-mel anda juga boleh digunakan untuk mendaftar akaun Xiaohongshu. Pengguna boleh menyediakan berbilang alamat e-mel dan kemudian menggunakan alamat e-mel ini untuk mendaftar akaun. tetapi

Bagaimana untuk mendaftar akaun Xiaohongshu? Apakah yang diperlukan untuk mendaftar akaun Xiaohongshu? Bagaimana untuk mendaftar akaun Xiaohongshu? Apakah yang diperlukan untuk mendaftar akaun Xiaohongshu? Mar 22, 2024 am 10:16 AM

Xiaohongshu, platform sosial yang menyepadukan kehidupan, hiburan, membeli-belah dan perkongsian, telah menjadi bahagian yang sangat diperlukan dalam kehidupan seharian ramai orang muda. Jadi, bagaimana untuk mendaftar akaun Xiaohongshu? 1. Bagaimana untuk mendaftar akaun Xiaohongshu? 1. Buka laman web rasmi Xiaohongshu atau muat turun APP Xiaohongshu. Klik butang "Daftar" di bawah dan anda boleh memilih kaedah pendaftaran yang berbeza. Pada masa ini, Xiaohongshu menyokong pendaftaran dengan nombor telefon mudah alih, alamat e-mel dan akaun pihak ketiga (seperti WeChat, QQ, Weibo, dll.). 3. Isikan maklumat yang berkaitan. Mengikut kaedah pendaftaran yang dipilih, isikan nombor telefon bimbit, alamat e-mel atau maklumat akaun pihak ketiga yang sepadan. 4. Tetapkan kata laluan. Tetapkan kata laluan yang kukuh untuk memastikan akaun anda selamat. 5. Lengkapkan pengesahan. Ikut gesaan untuk melengkapkan pengesahan telefon mudah alih atau pengesahan e-mel. 6. Menyempurnakan individu

Bagaimana untuk mendaftar akaun Xiaohongshu? Bagaimana untuk memulihkan jika akaunnya tidak normal? Bagaimana untuk mendaftar akaun Xiaohongshu? Bagaimana untuk memulihkan jika akaunnya tidak normal? Mar 21, 2024 pm 04:57 PM

Sebagai salah satu platform perkongsian gaya hidup paling popular di dunia, Xiaohongshu telah menarik sejumlah besar pengguna. Jadi, bagaimana untuk mendaftar akaun Xiaohongshu? Artikel ini akan memperkenalkan anda kepada proses pendaftaran akaun Xiaohongshu secara terperinci, dan menjawab soalan tentang cara memulihkan akaun Xiaohongshu yang tidak normal. 1. Bagaimana untuk mendaftar akaun Xiaohongshu? 1. Muat turun APP Xiaohongshu: Cari dan muat turun APP Xiaohongshu dalam gedung aplikasi mudah alih, dan bukanya selepas pemasangan selesai. 2. Daftar akaun: Selepas membuka APP Xiaohongshu, klik butang "Saya" di penjuru kanan sebelah bawah halaman utama, dan kemudian pilih "Daftar". 3. Isikan maklumat pendaftaran: Isikan nombor telefon bimbit, tetapkan kata laluan, kod pengesahan dan maklumat pendaftaran lain mengikut arahan. 4. Lengkapkan maklumat peribadi: Selepas pendaftaran berjaya, ikut gesaan untuk melengkapkan maklumat peribadi, seperti nama, jantina, hari lahir, dsb. 5. Tetapan

Bagaimana untuk mendaftar akaun qooapp Bagaimana untuk mendaftar akaun qooapp Mar 19, 2024 pm 08:58 PM

qooapp adalah perisian yang boleh memuat turun banyak permainan, jadi bagaimana untuk mendaftar akaun Pengguna perlu mengklik butang "Daftar" jika mereka belum mempunyai pas, dan kemudian memilih kaedah pendaftaran. Pengenalan kaedah pendaftaran akaun ini sudah cukup untuk memberitahu anda cara mengendalikannya. Berikut adalah pengenalan terperinci, jadi sila lihat. Bagaimana untuk mendaftar akaun qooapp? 2. Kemudian pilih kaedah log masuk yang anda perlukan. 3. Anda boleh menggunakannya terus selepas itu. Pendaftaran laman web rasmi: 1. Buka laman web https://apps.ppaooq.com/ dan klik pada sudut kanan atas untuk mendaftar. 2. Pilih pendaftaran

Bagaimana untuk mengimport lagu tempatan daripada NetEase Cloud Music Bagaimana untuk mengimport lagu tempatan Bagaimana untuk mengimport lagu tempatan daripada NetEase Cloud Music Bagaimana untuk mengimport lagu tempatan Mar 13, 2024 am 11:19 AM

Apabila kita menggunakan platform ini untuk mendengar lagu, kebanyakannya harus mempunyai beberapa lagu yang anda ingin dengar. Sudah tentu, beberapa perkara mungkin tidak didengari kerana tiada hak cipta diimport secara tempatan. Pergi ke sana supaya anda boleh mendengar. Kami boleh memuat turun beberapa lagu dan terus menukarnya ke dalam format mp3, supaya ia boleh diimbas pada telefon mudah alih untuk import dan situasi lain. Walau bagaimanapun, bagi kebanyakan pengguna, mereka tidak tahu banyak tentang mengimport kandungan lagu tempatan, jadi untuk menyelesaikan masalah ini dengan baik, hari ini editor juga akan menerangkannya kepada anda Kaedah kandungan membolehkan anda membuat pilihan yang lebih baik tanpa bertanya anda berminat,

Bagaimana untuk mendaftar dua nombor B-site dengan satu nombor telefon bimbit? Bagaimanakah Stesen B membuka ikatan telefon bimbitnya? Bagaimana untuk mendaftar dua nombor B-site dengan satu nombor telefon bimbit? Bagaimanakah Stesen B membuka ikatan telefon bimbitnya? Mar 21, 2024 pm 10:10 PM

Bilibili (Bilibili), sebagai laman web perkongsian video yang sangat popular di kalangan anak muda Cina, telah menarik sejumlah besar pengguna. Sesetengah pengguna berharap untuk mempunyai dua akaun Bilibili supaya mereka boleh diurus dan digunakan secara berasingan. Jadi, bagaimana untuk mendaftar dua nombor B-site dengan satu nombor telefon bimbit? Artikel ini akan menumpukan pada isu ini dan cara menyahikat telefon mudah alih. 1. Bagaimana untuk mendaftar dua nombor B-site dengan satu nombor telefon bimbit? 1. Daftar akaun baharu: Pertama, buka Apl Bilibili pada telefon mudah alih anda atau log masuk ke laman web rasmi, klik butang "Daftar", dan pilih kaedah pendaftaran Anda boleh menggunakan nombor telefon bimbit, e-mel atau ketiga-. akaun pihak (seperti WeChat, QQ, dll.) untuk mendaftar. 2. Apabila mendaftar akaun, sila isi maklumat yang diperlukan mengikut gesaan sistem, termasuk nombor telefon mudah alih, kod pengesahan dan kata laluan yang ditetapkan. Pastikan anda menggunakan akaun yang berbeza

Bagaimana untuk menyemak berapa lama sejak pendaftaran WeChat? Bagaimana untuk menyemak berapa lama anda telah didaftarkan di WeChat Bagaimana untuk menyemak berapa lama sejak pendaftaran WeChat? Bagaimana untuk menyemak berapa lama anda telah didaftarkan di WeChat Mar 13, 2024 am 08:52 AM

WeChat ialah perisian sosial yang popular dengan fungsi yang kaya dan ramai pengguna. Jika anda ingin menyemak berapa lama anda telah mendaftar di WeChat, walaupun WeChat sendiri tidak secara langsung menyediakan fungsi menyemak masa pendaftaran, kami boleh membuat spekulasi melalui beberapa kaedah tidak langsung. Walau bagaimanapun, kaedah ini tidak tepat sepenuhnya kerana pelbagai faktor boleh menjejaskan ketepatan keputusan. Jika anda mempunyai keperluan yang tepat untuk masa pendaftaran, adalah disyorkan untuk menghubungi perkhidmatan pelanggan WeChat untuk perundingan. Bagaimana untuk menyemak berapa lama sejak pendaftaran WeChat? Cara pertama untuk melihat berapa lama anda telah didaftarkan di WeChat adalah dengan menyemak peti mel QQ anda. Jika anda menggunakan QQ untuk log masuk ke WeChat, selepas pendaftaran berjaya, peti mel QQ anda akan menerima e-mel alu-aluan daripada WeChat. Anda boleh mencari "WeChat" dalam peti mel QQ anda untuk melihat sama ada terdapat e-mel sedemikian, dan kemudian menentukan masa pendaftaran. Cara kedua ialah dengan melihat

Bagaimana untuk mendaftar akaun matriks nombor video? Bagaimana untuk membuat akaun video anda sendiri? Bagaimana untuk mendaftar akaun matriks nombor video? Bagaimana untuk membuat akaun video anda sendiri? Mar 22, 2024 am 10:42 AM

Dengan pelancaran akaun video WeChat, semakin ramai orang telah melihat peluang trafik baharu Oleh itu, pendaftaran akaun matriks akaun video telah menjadi tumpuan ramai pencipta dan pedagang. Jadi, bagaimana untuk mendaftar akaun matriks nombor video? Bagaimana untuk membuat akaun video anda sendiri? Artikel ini akan menjawab dua soalan ini secara terperinci. 1. Bagaimana untuk mendaftar akaun matriks nombor video? 1. Akaun WeChat: Pertama, anda perlu mempunyai akaun WeChat. Jika tidak, sila daftarkan satu dahulu. 2. Buka akaun video: Dalam APP WeChat, cari halaman "Discover" dan klik "Akaun Video" untuk memasuki halaman akaun video. 3. Pusat Pencipta: Di bahagian bawah halaman akaun video, klik butang "Pusat Pencipta" untuk memasuki Pusat Pencipta. 4. Daftar akaun video: Pada halaman Pusat Pencipta, cari pilihan "Daftar Akaun Video".

See all articles