Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Preciso atribuir a inclusão de arquivos em um array, exemplo:
arquivo1.php:
$pages = array('page1' => 'dir1/index.php','page2' => 'dir2/index.php');
foreach ($pages as $key => $value){
$page[$key] = include($value);
}
arquivo2.php:
include("arquivo1.php");
echo $page['page1'];
Sendo que o echo faria o include dos arquivos.
É possivel fazer isso?Então oque eu quero fazer é exatamente oque esta descrito no primeiro post, tenho um array com uma lista de arquivos e quero atribuir o include desses arquivos a variáveis. Ao invés de usar include(arquivo) gostaria de colocar $arquivo['nome_do_arquivo'].
Até consegui fazer o include pela variável usando output buffering, mas não esta associando a chave do array corretamente:
foreach ($pages as $key => $value){
ob_start();
include($value);
$page[$key] = ob_get_contents();
ob_end_clean();
}
Poŕém dessa forma só inclui o primeiro arquivo do array: $page[0].Se entendi a sua intenção, não precisa adicionar o include em uma variável, e no arquivo2.php, também não precisa dar echo, basta fazer o include("arquivio1.php") que os includes de arquivo1.php serão carregados automaticamente.
Dica: De uma pesquisa por autoload e psr4
arquivo1.php
$pages = array('page1' => 'dir1/index.php','page2' => 'dir2/index.php');
foreach ($pages as $page){
include($page);
}
arquivo2.php
include("arquivo1.php");
Mas aí vou carregar dezenas ou até centenas de arquivos que não vão ser usados. O arquivo2 seria um arquivo de template.
Atribuir o include a uma variavel eu ja consegui usando output buffering, só não estou conseguindo associar a chave correta do array. Não passa a chave.
Acho que entendi, mas nesse caso, o melhor seria ter um array de array para cada pagina, já que uma pagina pode ter mais de um include. Vejo que a melhor forma seria encapsular em uma função:
Arquivo fazIncludes.php
function fazIncludes($file) {
$pages = array(
'page1' => array(
'dir1/index.php',
'dir1/outroInclude.php'
),
'page2' => array(
'dir2/index.php'
)
);
foreach ($pages[$file] as $page){
include($page);
}
}
paginaOndeVoceQuerFazerOsIncludes.php
include('fazIncludes.php');
fazIncludes('page1');
Carregara apenas **dir1/index.php** e **dir1/outroInclude.php** que foram cadastrados para include em page1
Não posso deixar de reforçar:* Não deixar de dar uma olhada na PSR-4!*O problema de usar uma função são as variaveis nos includes. Fica inviavel declarar todas na função.
Você iria trocar
echo $page['page1'];
por:
fazIncludes('page1');
Se é a isso que você se refere, vejo que o esforço é basicamente o mesmoMas eu teria que declarar as variaveis dos includes no escopo da função. Isso que quero dizer. Ou estou enganado?
________
Estava enganado, da pra usar função de boa. É até melhor. Muito obrigado pela ajuda.
Não!
Não é possível fazer include com echo.
Descreva o que precisa fazer pra gente tentar te dar alguma idéia de como resolver