php - success - ¿Dónde pongo las funciones de ayuda de Laravel 4 que pueden mostrar mensajes flash?
mensajes flash laravel (8)
He escrito una simple función display_messages()
que buscará datos flash en Session::get(''errors'')
y los reflejará en la pantalla.
¿Dónde pongo esta función? En Codeigniter, tenías una carpeta de ayudantes donde podías pegar todos tus pequeños métodos de ayuda globales.
Para cargar clases :
Cree la app/libraries/class/Message.php
, y agregue la clase en el archivo
class Message {
public static function display() {
}
}
Agrega "app/libraries/class"
a composer.json
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
"app/libraries/class"
]
},
Finalmente ejecuta el composer dump-autoload
en la línea de comando.
Puedes acceder a eso por Message::display()
Para cargar funciones simples de php sin objeto:
Cree la app/libraries/function/display_messages.php
, y agregue la función en el archivo
function display_messages() {
}
agrega una linea en start / global.php
require app_path().''/libraries/function/display_messages.php'';
Puedes acceder a eso solo por display_messages()
Agrega esto en app / start / global.php
require app_path().''/config/autoload.php'';
require app_path().''/start/loader.php'';
App::instance(''loader'',new loader($autoload));
crea un nuevo archivo loader.php en app / start y agrega:
class loader{
private $helpers = array();
public $autoload = array(
''helpers'' => array()
);
function __construct($autoload = array()) {
if (!empty($autoload))
$this->autoload = $autoload;
foreach ($this->autoload as $key => $value)
{
$function = strtolower($key);
$this->$function($value);
}
}
function helpers($helpers=array())
{
if (!is_array($helpers))
$helpers = explode(",",$helpers);
foreach ($helpers as $key => $value) {
$this->helper($value);
}
}
function helper($helper = '''',$path = ''/'')
{
$folder = app_path().''/helpers''.$path;
if (file_exists($folder.$helper.''.php'') && !in_array($helper, $this->helpers)){
$this->helpers[] = $helper;
require $folder.$helper.''.php'';
}
else{
$segments = explode(''/'',$helper);
if (is_dir($folder.$segments[0])){
array_shift($segments);
$this->helper($segments,$path.$segments[0].''/'');
}
}
}
}
cree un nuevo archivo autoload.php en app / config y agregue:
$autoload[''helpers''] = array(''functions''); // my autoload helpers!
cree una nueva carpeta de ayudantes en la aplicación /, agregue sus archivos de ayuda. (es. myhelper.php)
function myhelper()
{
echo ''helper'';
}
en su controlador agregue:
App::make(''loader'')->helper(''myhelper'');
myhelper();
Como Usman sugirió,
- crear un archivo /application/libraries/demo.php
- define una
class Demo() {
dentro de ella - llame a la función así:
{{ Demo::display() }}
Funciona porque las bibliotecas y los modelos se cargan automáticamente en la línea de inicio.php 76. Creo que los nombres de los archivos deben coincidir con los nombres de clase (capital de la nota).
<?php
class Demo {
public static function display() {
if( !$message = Session::get(''errors''))
$message = ''No Errors'';
echo "<pre>print_r($message)</pre>";
}
}
No puedo entender por qué tuve un problema usando el nombre de clase Común, puede haber un conflicto (podría definir un espacio de nombres si esto fuera importante) ...
Cree una carpeta de helpers
dentro de la carpeta de su aplicación y cree un archivo application_helper.php
. Con tal código:
// app/helpers/application_helper.php
function display_messages()
{
exit(''Yes'');
}
Luego abra su archivo composer.json en la raíz. autoload app/helpers/application_helper.php
con files
compositor.
"autoload": {
....
"files": [
"app/helpers/application_helper.php"
]
Hecho, ahora puedes llamar a display_messages()
.
Algunos cargadores automáticos pueden requerir que ejecute el comando composer dump
por primera vez.
En L3, normalmente crearía una application/libraries/helpers.php
, y require_once()
en mi application/start.php
. Similar a cómo L3 tiene un archivo laravel/helpers.php
.
Supongo que hay algo similar que puedes hacer en L4.
EDIT: Solo mirando la fuente, app/start/local.php
parece ser el lugar.
Gracias, memeLab proporcionó una respuesta muy útil que me ayudó mucho. Solo quería ampliar su respuesta ya que la carpeta " libraries
" no era un directorio de carga automática, al menos no en la versión de lanzamiento / actual de L4 que estoy usando. También parece que start.php se ha expandido para ser la carpeta de start
con global.php
, local.php y artisan.php.
Entonces, para usar sus propias clases para bibliotecas o ayudantes separados con el cargador automático diferido L4, solo tiene que incluir la carpeta en la que desee almacenarlas en global.php
. Por ejemplo, agregué una carpeta de libraries
a la lista de directorios.
ClassLoader::addDirectories(array(
app_path().''/commands'',
app_path().''/controllers'',
app_path().''/models'',
app_path().''/database/seeds'',
// this a custom path
app_path().''/libraries'',
));
Entonces, cualquier clase que defina en esa carpeta como classname.php
se puede llamar a través de CLASSNAME::methodName($someVar);
en tus controladores
class CLASSNAME {
public static function methodName($someVar=NULL) {
// whatever you want to do...
return $message;
}
}
De esta manera, puede crear una clase de ayuda y definir diferentes métodos para usar a través de sus controladores. También tenga cuidado al definir funciones regulares fuera de su Clase de esta manera, ya que esto no le funcionará (porque la clase no siempre está cargada). (por ejemplo someFunctionName($someVar);
lugar de CLASSNAME::methodName($someVar);
) Si desea crear funciones de esta manera, debería asegurarse de que esté cargado; sin embargo, no lo explicaré porque es es mejor utilizar las clases de cargador diferido para tales cosas, de modo que solo cargue las clases que realmente necesita.
Gracias nuevamente a memeLab y Usman, no hubiera llegado tan lejos sin sus respuestas. :)
Utilicé este tutorial y creo que es el método más sencillo: http://laravel-recipes.com/recipes/50/creating-a-helpers-file
- Primero crea la aplicación de archivo / helpers.php
Luego, cárguelo en la parte inferior de la aplicación / start / global.php de la siguiente manera.
// en la parte inferior del archivo se requiere app_path (). ''/ helpers.php'';
O cambie su archivo composer.json y descargue el autocargador.
{
"autoload": {
"files": [
"app/helpers.php"
]
}
}
$ compositor dump-auto
entonces puedes escribir tus funciones en helpers.php y llamarlas desde cualquier lugar
function myfunction($result){ return $result; }
abrir root_folder/vendor/laravel/framework/src/Illuminate/Support/helpers.php
y puedes agregar tu función
if ( ! function_exists(''display_messages''))
{
function display_messages()
{
return ...
}
}